O Derby suporta a recupera????o com rolagem para frente (roll-forward recovery) para restaurar um banco danificado para o estado mais recente anterior ?? ocorr??ncia da falha.
O Derby restaura o banco de dados a partir da c??pia de seguran??a completa, e refaz todas as transa????es posteriores ?? c??pia de seguran??a. S??o necess??rios todos os arquivos de log posteriores ?? c??pia de seguran??a, para refazer as transa????es posteriores ?? c??pia de seguran??a. Por padr??o, o banco de dados mant??m apenas os logs requeridos para a recupera????o de queda. Para a recupera????o com rolagem para frente ser bem-sucedida, todos os arquivos de log posteriores ?? c??pia de seguran??a devem ser guardados. Os arquivos de log podem ser guardados utilizando chamadas de fun????o de c??pia de seguran??a que habilitam guardar o log.
Na recupera????o com rolagem para frente o modo que guarda o log garante que todos os arquivos de log antigos ficam dispon??veis. Os arquivos de log ficam dispon??veis somente a partir do momento em que o modo que guarda o log ?? habilitado.
A recupera????o com rolagem para frente n??o pode ser utilizada para restaurar tabelas individuais. A recupera????o com rolagem para frente recupera todo o banco de dados.
Para restaurar um banco de dados utilizando a recupera????o com rolagem para frente dever?? existir uma c??pia de seguran??a do banco de dados, todos os logs guardados desde que a c??pia de seguran??a foi criada, e os arquivos de log ativos. Todos os arquivos de log dever??o estar no diret??rio de log do banco de dados.
Existem dois tipos de arquivo de log no Derby: os logs ativos e os logs em linha guardados.
Habilita????o do modo que guarda o log
Os logs em linha guardados estar??o dispon??veis somente se o banco de dados for habilitado para o modo de guarda o log. Pode ser utilizado o seguinte procedimento do sistema para habilitar o banco de dados no modo que guarda o log:
SYSCS_UTIL.SYSCS_BACKUP_DATABASE_AND_ENABLE_LOG_ARCHIVE_MODE (IN BACKUPDIR VARCHAR(32672), IN SMALLINT DELETE_ARCHIVED_LOG_FILES)
O procedimento SYSCS_UTIL.SYSCS_BACKUP_DATABASE_AND_ENABLE_LOG_ARCHIVE_MODE emite uma mensagem de erro quando existem opera????es n??o registradas na mesma transa????o do procedimento de c??pia de seguran??a.
Caso exista no sistema, quando a c??pia de seguran??a iniciar, opera????es n??o registradas em andamento em outras transa????es, este procedimento ficar?? bloqueado at?? que estas transa????es completem, antes de realizar a c??pia de seguran??a. O Derby converte, automaticamente, as opera????es n??o registradas para o modo registrado, quando estas s??o iniciadas quando a c??pia de seguran??a est?? em andamento (exceto as opera????es que fazem manuten????o de arquivos jar de aplicativo no banco de dados). Os procedimentos que instalam, substituem e removem arquivos jar no banco de dados s??o bloqueadas quando a c??pia de seguran??a est?? em andamento.
Se n??o for desejado que a c??pia de seguran??a fique bloqueada at?? que as opera????es n??o registradas em outras transa????es completem, deve ser utilizado o procedimento SYSCS_UTIL.SYSCS_BACKUP_DATABASE_AND_ENABLE_LOG_ARCHIVE_MODE_NOWAIT. Esse procedimento emite um erro logo no in??cio da c??pia de seguran??a caso existam transa????es em andamento com opera????es n??o registradas, em vez de aguardar estas transa????es completarem.
Desabilita????o do modo que guarda o log
Ap??s o modo que guarda o log ter sido habilitado, o banco de dados ficar?? para sempre com o modo que guarda o log habilitado, mesmo que posteriormente seja recarregado ou seja feita uma c??pia de seguran??a. A ??nica maneira de desabilitar o modo que guarda o log ?? executar o seguinte procedimento:
SYSCS_UTIL.SYSCS_DISABLE_LOG_ARCHIVE_MODE(IN SMALLINT DELETE_ARCHIVED_LOG_FILES)
Este procedimento do sistema desabilita o modo que guarda o log, e remove todos os arquivos de log guardados existentes, se o par??metro de entrada DELETE_ARCHIVED_LOG_FILES for diferente de zero.
Realiza????o da recupera????o com rolagem para frente:
Utilizando a c??pia de seguran??a completa, os logs guardados, e os logs ativos, o banco de dados pode ser restaurado at?? seu estado mais recente realizando a recupera????o com rolagem para frente. A recupera????o com rolagem para frente ?? realizada especificando o atributo da URL de conex??o rollForwardRecoveryFrom=<caminho-da-c??pia-de-seguran??a> em tempo de inicializa????o. Com isto o banco de dados retorna ao seu estado mais recente utilizando a c??pia de seguran??a completa, os logs guardados e os logs ativos. Todos os arquivos de log dever??o estar no diret??rio do caminho de log do banco de dados.
C??pia de seguran??a do banco de dados:
connect 'jdbc:derby:wombat;create=true'; create table t1(a int not null primary key); ------------------DML/DDL Operations CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE_AND_ENABLE_LOG_ARCHIVE_MODE ('d:/backup', 0); insert into t1 values(19); create table t2(a int); -----------------Opera????es de DML/DDL -----------------Queda do banco de dados (M??dia corrompida nos discos de dado)
Restaura????o do banco de dados utilizando a recupera????o com rolagem para frente:
connect 'jdbc:derby:wombat;rollForwardRecoveryFrom=d:/backup/wombat'; select * from t1; -----------------Opera????es de DML/DDL
Pode ser especificado o seguinte atributo na URL de conex??o em tempo de carga do JDBC:
rollForwardRecoveryFrom=caminho
Para obter mais informa????es deve ser consultada a se????o rollForwardRecoveryFrom=caminho no Manual de Refer??ncia do Derby.
Ap??s o banco de dados ser restaurado a partir da c??pia de seguran??a completa, as transa????es dos logs em linha arquivados e dos logs ativos s??o refeitas.