2010-10-30 12 views
5

Quiero tomar una instantánea consistente de una base de datos Oracle que se actualiza constantemente mediante un adaptador de base de datos TIBCO.¿Cuál es la mejor manera de tomar una "instantánea" de una base de datos Oracle que se actualiza constantemente?

Tipcialmente TIBCO actualiza un grupo de tablas a la vez, y luego COMPROMETES. Si recorro todas las tablas, tomando una instantánea una vez al día, puedo tomar datos de la tabla A antes de la confirmación, y de la tabla B después de la confirmación, pero si A y B tienen una relación, ya no lo harán. emparejar correctamente

¿Sigue "SET TRANSACTION READ ONLY" el camino a seguir?
p.

COMMIT 
SET TRANSACTION READ ONLY 
SELECT * FROM A WHERE A.ADB_UPDATEDDATE > TODAY()-1 
SELECT * FROM B WHERE B.ADB_UPDATEDDATE > TODAY()-1 
etc. 
COMMIT 

(sintaxis de hoy no sea correcta, no es importante!)

o hay algo mejor que puedo hacer?

Respuesta

4

Esto es muy fácil de hacer usando una función de Oracle llamada Flashback. Siempre que sepa cuándo la versión anterior era (hora o hora) y está dentro de la ventana de retrospectiva, puede simplemente buscarla.

7

Si con "instantánea" quiere decir una copia completa de la base de datos en un modo consistente, entonces restauraría la base de datos desde una copia de seguridad y la recuperaría hasta el momento deseado. Los procesos de recuperación de Oracle se encargarán de la coherencia (rastreados por el Número de cambio del sistema o SCN).

Si está utilizando RMAN para copias de seguridad y recuperación, hay un comando "DUPLICATE DATABASE" con una cláusula de tiempo que lo hará relativamente sencillo.

Por otro lado, si usted está buscando para extraer unas pocas mesas en un modo consistente que se me ocurren dos opciones:

  • exportación del grupo de cuadros con el consistente = y la opción de el (antiguo) exp utilidad
  • Use la utilidad expdp nuevo con la opción flashback_time
+3

Siempre me sorprende cómo las personas tienden a evitar 'RMAN'. En el mundo de Oracle, es lo mejor desde el pan rebanado. –

+0

+500 en RMAN ... – REW

1

Además de las sugerencias de dpbradley, si es sólo unas pocas mesas no demasiado grande y tiene consulta de flashback disponibles podría crear una copia de las tablas usando una consulta de retroceso a partir de la misma marca de tiempo.

0

En primer lugar, como otros chicos han dicho que hay son herramientas especiales para "snapshotting" en Oracle y es mejor usarlo para la tarea por mí. Pero si miramos el problema en particular, veremos que es un lecturas no repetibles & phantom lee problema [1], por lo que se trata de la transacción niveles de aislamiento.Tenemos el nivel SERIALISABLE en Oracle para evitarlo (pero no significa que sea bueno para su tarea en general) estos problemas [2], por lo que si no desea obtener algunas sorpresas y quiere obtener su base de datos en un estado coherente en cierto momento de tiempo (su tiempo el punto de partida de la transacción) se debe hacer esto:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

Enlaces:

  1. https://en.wikipedia.org/wiki/Isolation_(database_systems)
  2. http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_10005.htm#SQLRF01705
Cuestiones relacionadas