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 Procedimento do sistema SYSCS_FREEZE_DATABASE Procedimento do sistema SYSCS_UNFREEZE_DATABASE

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 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."

Para garantir uma cópia de segurança do banco de dados consistente, o 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(); }