Utilização de comandos do sistema operacional com os procedimentos do sistema de congelar e descongelar para realizar cópias de segurança em linha

Normalmente, estes procedimentos são utilizados para acelerar a operação de cópia envolvida na cópia de segurança em linha. Neste cenário, o Derby não realiza a operação de cópia. É utilizado o procedimento SYSCS_UTIL.SYSCS_FREEZE_DATABASE para bloquear o banco de dados, e depois realizada a cópia do diretório do banco de dados utilizando comandos do sistema operacional.

Por exemplo, como o comando tar do UNIX utiliza rotinas de cópia de arquivo do sistema operacional, e o procedimento SYSCS_UTIL.SYSCS_BACKUP_DATABASE utiliza chamada de E/S do Java, com sincronização interna adicional para permitir que ocorram atualizações durante a cópia de segurança, o comando tar pode gerar cópias de segurança mais rapidamente que o procedimento SYSCS_UTIL.SYSCS_BACKUP_DATABASE.

Para utilizar comandos do sistema operacional para realizar cópias de segurança em linha, é chamado o procedimento do sistema SYSCS_UTIL.SYSCS_FREEZE_DATABASE. O procedimento do sistema SYSCS_UTIL.SYSCS_FREEZE_DATABASE coloca o banco de dados em um estado onde este pode ser copiado com segurança. Após o banco de dados ter sido copiado, é utilizado o procedimento do sistema SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE para continuar trabalhando com o banco de dados. Somente após SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE ter sido utilizado, as transações poderão escrever novamente no banco de dados. As operações de leitura podem prosseguir enquanto o banco de dados estiver "congelado."

Nota: Para garantir uma cópia de segurança do banco de dados consistente, o Derby deverá bloquear os aplicativos que tentarem escrever no banco de dados congelado, até que a cópia de segurança esteja completa e o procedimento do sistema SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE seja chamado.

O exemplo a seguir demonstra como os procedimentos de congelar e descongelar são utilizados para envolver o comando de cópia do sistema operacional:

public static void backUpDatabaseWithFreeze(Connection conn)
        throws SQLException
{
Statement s = conn.createStatement();
s.executeUpdate(
    "CALL SYSCS_UTIL.SYSCS_FREEZE_DATABASE()");
// Copiar o diretório do banco de dados durante este intervalo
s.executeUpdate(
    "CALL SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE()");
s.close();
}
Conceitos relacionados
Utilização do procedimento de cópia de segurança para realizar cópia de segurança em linha