Impossibile connettersi al database DB2 dopo il ripristino di un backup non in linea
Domanda
Questo è per DB2 9.7 Enterprise Server Edition su AIX.
Ho avuto un backup completo non in linea presa di diverse basi di dati all'interno del nostro esempio, in un ambiente di prestazioni.
Ho voluto ripristinare questi database per il nostro ambiente di integrazione.
ho incontrato il comando
db2 restore database database_name from
/bkp/instance_name/OfflineBackups/RestorePoint/my_restore_point
taken at 20120321103846 into database_name without prompting;
per ciascuno dei miei database (modificando il nome del database e timestamp in modo appropriato, naturalmente).
Ogni database ripristinato correttamente in base a DB2. Tuttavia, ora quando voglio per verificare se il database ha effettivamente ripristinare quello che ho pensato, provo a connettersi a un database e ottengo l'errore
SQL1117N A connection to or activation of database "database_name" cannot be made
because of ROLL-FORWARD PENDING. SQLSTATE=57019
Non ha avuto alcun nelle operazioni di processo nel database precedente, perché tutti i collegamenti sono stati costretti al largo e il database è stato premuto per un backup non in linea. Cosa devo fare?
Soluzione
Trovato la risposta qui .
ho bisogno di eseguire il comando
db2 rollforward db database_name to end of backup and complete;
Questo impegna tutto ai registri e luoghi il database in uno stato non è più sospeso, permettendo così il collegamento ad esso. Avevo bisogno di fare questo per ogni database ripristinato.
Modifica Abbiamo trovato questo pepita nifty per partecipare ad una DB2NightShow episodio. Con 9,7 FP2, hanno introdotto una variabile di Registro di sistema denominata DB2_RESTORE_GRANT_ADMIN_AUTHORITY. Questo è utile se si ripristinano un backup da un'istanza all'altra, in cui concede automaticamente esempio proprietario SECADM, DBADM, DataAccess, e ACCESSCTRL sulla database ripristinati. Con 9,7 5PQ, l'ambiente è dinamico e non lo fa richiedono rimbalzare dell'istanza. Mi rendo conto la mia domanda originale aveva niente a che fare con la sicurezza, ma può essere incontrato e pensato che questo sarebbe un bocconcino a portata di mano messo qui.
Modifica # 2: di recente ho scoperto che se il backup è un backup non in linea sulla base di una banca dati di archiviazione connesso, ho potuto includere la Clausola
WITHOUT ROLLING FORWARD
nel mio comandoRESTORE
. Questo sarebbe hanno preso il fuori banca dati del rotolo in avanti in attesa immediatamente Stato sul successo di ripristino, il che significherebbe che non avrei dovuto quindi eseguire il comandoROLLFORWARD DB
.
Altri suggerimenti
Se il tipo di backup può essere in linea di backup.
Usa percorso Log ( "/ db2logtarget")
Ad esempio: - db2 => rollforward db userdb alla fine dei registri e completo percorso di registro di troppo pieno ( "/ home / utente / target")