2012-01-30 7 views
6

¿Existe alguna manera en Oracle de crear una tabla que solo exista mientras la base de datos se está ejecutando y solo se almacena en la memoria? Entonces, si la base de datos se reinicia, ¿tendré que volver a crear la tabla?En Oracle, ¿puede crear una tabla que solo exista mientras se ejecuta la base de datos?

Editar: Quiero que los datos persistan en todas las sesiones. La razón es que los datos son caros de recrear pero también son muy sensibles.

Usar una tabla temporal probablemente ayudaría al rendimiento en comparación con lo que sucede hoy en día, pero todavía no es una gran solución.

+0

Hasta donde yo sé, las tablas temporales en Oracle son persistentes; solo sus datos son volátiles. ¿Eso sería un problema para ti? –

+0

Ese es mi problema, quiero que los datos se queden mientras la base de datos está activa ya que recrear los datos es costoso. – chotchki

+0

¿Cuál es su intención? ¿Qué quieres hacer? –

Respuesta

3

Puede utilizar el mecanismo de activación de Oracle para invocar un procedimiento almacenado cuando la base de datos se inicia o se apaga.

De esta forma puede hacer que el disparador de inicio cree la tabla y que el desencadenador de apagado la suelte.

Probablemente también desee que el desencadenante de inicio controle los casos en los que existe la tabla y trunque solo en caso de que el servidor se detenga repentinamente y no se invoque el desencadenador de apagado.

Oracle trigger documentation

+0

Me gusta este enfoque con una tabla sin registrar. También puedo usar el buffer_pool mantener arriba también. – chotchki

4

Puede crear una tabla 100% efímera que se pueda usar durante una sesión (normalmente más corta que la duración del tiempo de ejecución de la base de datos) llamada tabla TEMPORAL. El propósito completo de una tabla en la memoria es hacer que sea más rápido para leer. Tendrá que rellenar la tabla para cada sesión, ya que la mesa se olvidará (tanto la estructura como los datos) una vez que se complete la sesión.

2

Usando Oracle Global Temporary Tables, puede crear una tabla en la memoria y hacer que elimine los datos al final de la transacción o al final de la sesión.

4

No exactamente, no. Oracle tiene el concepto de una "tabla temporal global". Con una tabla temporal global, crea la tabla una vez, como con cualquier otra tabla. La definición de tabla persistirá permanentemente, como con cualquier otra tabla.

El contenido de la tabla, sin embargo, no será permanente. Dependiendo de cómo lo defina, el contenido persistirá durante la vida de la sesión (en las filas de confirmación de confirmación) o la vida de la transacción (en las filas de eliminación de confirmación).

consulte la documentación de todos los detalles: http://docs.oracle.com/cd/E11882_01/server.112/e25494/tables003.htm#ADMIN11633

Espero que ayude.

2

Si he entendido bien, usted tiene algunos datos que necesita ser procesada cuando la base de datos se pone en línea y se deja disponible sólo mientras la base de datos está en línea. El único caso de uso que puedo pensar que requeriría esto es si estás encriptando algunos datos y quieres asegurarte de que los datos no encriptados nunca se escriban en el disco.

Si este es realmente tu caso de uso, recomendaría olvidarte de tratar de crear tu propia solución para esto y, en cambio, utilizar Oracle encrypted tablespaces o Transparent Data Encryption.

+0

No se ría, pero los espacios de tablas cifrados de Oracle y TDE se han considerado riesgos de seguridad para el entorno en el que estoy trabajando. Desafortunadamente, eso está fuera de mi control y ya perdí la lucha por usarlos. – chotchki

Cuestiones relacionadas