O procedimento SYSCS_UTIL.SYSCS_BACKUP_DATABASE ?? utilizado para criar a c??pia de seguran??a do banco de dados em um local especificado.
O procedimento SYSCS_UTIL.SYSCS_BACKUP_DATABASE recebe como argumento uma cadeia de caracteres representando o local onde ser?? armazenada a c??pia de seguran??a do banco de dados. Normalmente ?? fornecido o caminho completo para o diret??rio de c??pia de seguran??a (os caminhos relativos s??o interpretados como sendo relativos ao diret??rio corrente, e n??o ao diret??rio derby.system.home).
Por exemplo, para especificar o local de c??pia de seguran??a c:/minhascopias/2005-06-01 para um banco de dados que se encontra aberto no momento, deve ser utilizada a seguinte declara????o (s??o utilizadas barras inclinadas para frente como separadores do caminho nos comandos SQL):
CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE('c:/minhascopias/2005-06-01')
O procedimento SYSCS_UTIL.SYSCS_BACKUP_DATABASE() coloca o banco de dados em um estado no qual este pode ser copiado com seguran??a, depois copia o diret??rio de banco de dados original por completo (incluindo os arquivos de dados, arquivos de log de transa????o em linha e os arquivos jar) para o diret??rio de c??pia de seguran??a especificado. Os arquivos que n??o est??o dentro do diret??rio de banco de dados original (por exemplo, derby.properties) n??o s??o copiados.
O exemplo a seguir mostra como fazer a c??pia de seguran??a de um banco de dados em um diret??rio cujo nome reflete a data corrente:
public static void backUpDatabase(Connection conn)throws SQLException { // Obter a data de hoje como como uma cadeia de caracteres: java.text.SimpleDateFormat dataHoje = new java.text.SimpleDateFormat("yyyy-MM-dd"); String diretorioCopia = "c:/minhascopias/" + dataHoje.format((java.util.Calendar.getInstance()).getTime()); CallableStatement cs = conn.prepareCall("CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE(?)"); cs.setString(1, diretorioCopia); cs.execute(); cs.close(); System.out.println("c??pia de seguran??a colocada no diret??rio "+diretorioCopia); }
Para um banco de dados cuja c??pia de seguran??a foi realizada em 2005-06-01, os comandos anteriores copiariam o banco de dados corrente para o diret??rio com o mesmo nome em c:\minhascopias\2005-06-01.
As transa????es n??o efetivadas n??o aparecem na c??pia de seguran??a do banco de dados.
O procedimento SYSCS_UTIL.SYSCS_BACKUP_DATABASE emitir?? uma mensagem de erro se existirem opera????es n??o registradas (unlogged) 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 aplicativos no banco de dados). Os procedimentos que instalam, substituem e removem arquivos jar no banco de dados s??o bloqueados 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_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.