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.