No se puede conectar a la base de datos DB2 después de restaurar una copia de seguridad fuera de línea
Pregunta
Esto es para DB2 9.7 Enterprise Server Edition en AIX.
Tenía una copia de seguridad completa y fuera de línea de varias bases de datos dentro de nuestra instancia en un entorno de rendimiento.
Quería restaurar estas bases de datos a nuestro entorno de integración.
Ejecuté el comando
db2 restore database database_name from
/bkp/instance_name/OfflineBackups/RestorePoint/my_restore_point
taken at 20120321103846 into database_name without prompting;
para cada una de mis bases de datos (modificando el nombre de la base de datos y la marca de tiempo de manera apropiada, por supuesto).
Cada base de datos se restauró con éxito según DB2. Sin embargo, ahora, cuando deseo verificar si la base de datos realmente restauró lo que pensaba, intento conectarme a una base de datos y recibo el error
SQL1117N A connection to or activation of database "database_name" cannot be made
because of ROLL-FORWARD PENDING. SQLSTATE=57019
No tuve transacciones en procesos en la base de datos anterior porque todas las conexiones fueron forzadas y la base de datos estaba baja para una copia de seguridad fuera de línea. ¿Qué debo hacer?
Solución
Encontré la respuesta aquí.
Necesitaba ejecutar el comando
db2 rollforward db database_name to end of backup and complete;
Esto compromete todo a los registros y coloca la base de datos en un estado ya no pendiente, lo que permite la conexión. Necesitaba hacer esto para cada base de datos restaurada.
EDITAR: Encontró esta ingeniosa pepita mientras asistía a un Db2nightshow episodio. Con 9.7 fp2, introdujeron una variable de registro llamada DB2_RESTORE_GRANT_ADMIN_AUTHORITY. Esto es útil si está restaurando una copia de seguridad de una instancia a otra, ya que otorga automáticamente el propietario de la instancia Secadm, DBADM, DataAccess y AccessCTRL en las bases de datos restauradas. Con 9.7 FP5, la configuración es dinámica y no requiere rebotar la instancia. Me doy cuenta de que mi pregunta original no tenía nada que ver con la seguridad, pero se puede encontrar y pensé que este sería un dato útil colocado aquí.
Editar #2: Recientemente descubrí que si la copia de seguridad es una copia de seguridad fuera de línea basada en una base de datos registrada de archivo, podría haber incluido la cláusula
WITHOUT ROLLING FORWARD
en miRESTORE
dominio. Esto habría sacado la base de datos a partir del estado pendiente inmediatamente después de la restauración exitosa, lo que significaría que no habría tenido que emitir elROLLFORWARD DB
dominio.
Otros consejos
Si el tipo de copia de seguridad puede estar en copia de seguridad en línea.
Use la ruta log ("/db2logTarget")
Por ejemplo:- db2 => rollforward db userdb hasta el final de los registros y complete la ruta de registro de desbordamiento ("/home/user/target")