Tudo bem?
No artigo de hoje quero demonstrar como realizar um tipo de backup no banco de dados Oracle.
Faremos um backup gerenciado pelo usuário, off-line, “cold (frio) ” como é conhecido.
Após o backup, iremos eliminar de propósito os arquivos do banco de dados e restaurá-los depois para deixar o banco up novamente.
Faremos um backup gerenciado pelo usuário, off-line, “cold (frio) ” como é conhecido.
Após o backup, iremos eliminar de propósito os arquivos do banco de dados e restaurá-los depois para deixar o banco up novamente.
Neste cenário não precisaremos de recover, não aplicaremos archivelogs, então, apenas restore será o suficiente.
Bom vamos lá, antes de tudo, para nossos testes precisamos considerar o banco de dados em noarchivelog, como demonstrado abaixo:
[oracle@serv01 ~]$ sqlplus /nolog SQL*Plus: Release 12.1.0.2.0 Production on Tue Jun 6 13:34:18 2017 Copyright (c) 1982, 2014, Oracle. All rights reserved. SQL> conn / as sysdba Connected. SQL> select log_mode from v$database; LOG_MODE ------------ NOARCHIVELOG SQL>
Vale salientar que em ambientes de produção raramente você encontrará um banco em noarchivelog, mas, como apenas estamos realizando testes para estudo, não terá problema.
Tudo certo. Vamos para o passo 1 e 2. O Passo 1 gera o backup e o passo 2 elimina os arquivos do banco e restaura-os novamente.
Vamos lá, abaixo:
1 - Realizando o backup gerenciado pelo usuário – OFF LINE ou COLD:
Primeiro checamos onde os arquivos do banco de dados estão localizados para fazer o backup, em qual diretório:
SQL> select file_name from dba_data_files; FILE_NAME -------------------------------------------------------------------------------- /u01/oradata/orclnew/system01.dbf /u01/oradata/orclnew/sysaux01.dbf /u01/oradata/orclnew/example01.dbf /u01/oradata/orclnew/users01.dbf /u01/oradata/orclnew/soe01.dbf /u01/oradata/orclnew/undotbs01.dbf /u01/oradata/orclnew/tbs_01.dbf 7 rows selected. SQL> select member from v$logfile; MEMBER -------------------------------------------------------------------------------- /u01/oradata/orclnew/redo03.log /u01/oradata/orclnew/redo02.log /u01/oradata/orclnew/redo01.log SQL> select name from v$controlfile; NAME -------------------------------------------------------------------------------- /u01/oradata/orclnew/control01.ctl /u01/FRA/orcl/control02.ctl SQL>
Agora que sabemos qual o diretório dos arquivos do banco, vamos criar um diretório para nosso backup:
SQL> host mkdir -p /u02/backup/orcl/backup1 SQL> ! ls /u02/backup/orcl backup1 backup2
Certo, como é um backup off-line devemos desligar o banco com um shutdown limpo. E seguida fazemos a cópia dos arquivos que identificamos acima, deixando assim um backup consistente. Como você pode ver abaixo no exemplo:
SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> host [oracle@serv01 ~]$ cp /u01/oradata/orclnew/*.* /u02/backup/orcl/backup1 [oracle@serv01 ~]$ ls -ltr /u02/backup/orcl/backup1 total 5504724 -rw-r-----. 1 oracle oinstall 10141696 Jun 6 13:54 control01.ctl -rw-r-----. 1 oracle oinstall 1304174592 Jun 6 13:56 example01.dbf -rw-r-----. 1 oracle oinstall 52429312 Jun 6 13:56 redo01.log -rw-r-----. 1 oracle oinstall 52429312 Jun 6 13:56 redo02.log -rw-r-----. 1 oracle oinstall 52429312 Jun 6 13:56 redo03.log -rw-r-----. 1 oracle oinstall 1866539008 Jun 6 14:00 soe01.dbf -rw-r-----. 1 oracle oinstall 765468672 Jun 6 14:02 sysaux01.dbf -rw-r-----. 1 oracle oinstall 859840512 Jun 6 14:03 system01.dbf -rw-r-----. 1 oracle oinstall 209723392 Jun 6 14:04 tbs_01.dbf -rw-r-----. 1 oracle oinstall 209723392 Jun 6 14:04 temp01a.dbf -rw-r-----. 1 oracle oinstall 62922752 Jun 6 14:04 temp01.dbf -rw-r-----. 1 oracle oinstall 356524032 Jun 6 14:04 undotbs01.dbf -rw-r-----. 1 oracle oinstall 104865792 Jun 6 14:05 users01.dbf [oracle@serv01 ~]$
Pronto backup feito dos datafiles, redo log online e arquivo de controle. Agora podemos iniciar o banco novamente se quiser. Backup finalizado.
SQL> startup ORACLE instance started. Total System Global Area 754974720 bytes Fixed Size 2928968 bytes Variable Size 524291768 bytes Database Buffers 222298112 bytes Redo Buffers 5455872 bytes Database mounted. Database opened. SQL>
2 - Realizando o restore do backup gerenciado pelo usuário – OFF LINE ou COLD:
Agora que temos o backup vamos seguir para a recuperação.
Como estamos trabalhando com backup frio(cold) e o banco funcionando em noarchivelog precisamos do banco off-line para realizar o restore. Vamos parar o banco para fazer isso:
SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL>
Bom, agora vamos simular a perca dos arquivos originais do banco e restaura-los em seguida:
[oracle@serv01 ~]$ ls -ltr /u01/oradata/orclnew/ total 5504704 -rw-r-----. 1 oracle oinstall 62922752 Jun 5 19:35 temp01.dbf -rw-r-----. 1 oracle oinstall 209723392 Jun 6 13:37 temp01a.dbf -rw-r-----. 1 oracle oinstall 52429312 Jun 6 14:07 redo01.log -rw-r-----. 1 oracle oinstall 52429312 Jun 6 14:07 redo03.log -rw-r-----. 1 oracle oinstall 52429312 Jun 6 14:12 redo02.log -rw-r-----. 1 oracle oinstall 859840512 Jun 6 14:12 system01.dbf -rw-r-----. 1 oracle oinstall 1866539008 Jun 6 14:12 soe01.dbf -rw-r-----. 1 oracle oinstall 765468672 Jun 6 14:12 sysaux01.dbf -rw-r-----. 1 oracle oinstall 356524032 Jun 6 14:12 undotbs01.dbf -rw-r-----. 1 oracle oinstall 1304174592 Jun 6 14:12 example01.dbf -rw-r-----. 1 oracle oinstall 104865792 Jun 6 14:12 users01.dbf -rw-r-----. 1 oracle oinstall 209723392 Jun 6 14:12 tbs_01.dbf -rw-r-----. 1 oracle oinstall 10141696 Jun 6 14:12 control01.ctl
Perdendo os arquivos propositalmente:
[oracle@serv01 ~]$ rm /u01/oradata/orclnew/*.* [oracle@serv01 ~]$ ls -ltr /u01/oradata/orclnew/ total 0
Pronto perdemos tudo!
Agora restauramos todo o backup que fizemos para o diretório original dos arquivos do banco:
[oracle@serv01 ~]$ cp /u02/backup/orcl/backup1/*.* /u01/oradata/orclnew/ [oracle@serv01 ~]$ cp /u02/backup/orcl/backup1/control01.ctl /u01/FRA/orcl/control02.ctl [oracle@serv01 ~]$ ls -ltr /u01/oradata/orclnew/ total 5504728 -rw-r-----. 1 oracle oinstall 10141696 Jun 6 14:17 control01.ctl -rw-r-----. 1 oracle oinstall 1304174592 Jun 6 14:18 example01.dbf -rw-r-----. 1 oracle oinstall 52429312 Jun 6 14:18 redo01.log -rw-r-----. 1 oracle oinstall 52429312 Jun 6 14:18 redo02.log -rw-r-----. 1 oracle oinstall 52429312 Jun 6 14:18 redo03.log -rw-r-----. 1 oracle oinstall 1866539008 Jun 6 14:19 soe01.dbf -rw-r-----. 1 oracle oinstall 765468672 Jun 6 14:20 sysaux01.dbf -rw-r-----. 1 oracle oinstall 859840512 Jun 6 14:21 system01.dbf -rw-r-----. 1 oracle oinstall 209723392 Jun 6 14:21 tbs_01.dbf -rw-r-----. 1 oracle oinstall 209723392 Jun 6 14:21 temp01a.dbf -rw-r-----. 1 oracle oinstall 62922752 Jun 6 14:21 temp01.dbf -rw-r-----. 1 oracle oinstall 356524032 Jun 6 14:21 undotbs01.dbf -rw-r-----. 1 oracle oinstall 104865792 Jun 6 14:22 users01.dbf [oracle@serv01 ~]$
Banco restaurado! Agora podemos abrir o banco sem problemas.
[oracle@serv01 ~]$ exit exit SQL> startup ORACLE instance started. Total System Global Area 754974720 bytes Fixed Size 2928968 bytes Variable Size 524291768 bytes Database Buffers 222298112 bytes Redo Buffers 5455872 bytes Database mounted. Database opened. SQL> SQL> select status from v$instance; STATUS ------------ OPEN SQL>
É importante dizer, se você estiver restaurando o backup para outro diretório que não seja o original onde estava os arquivos do banco, você terá alguns passos a mais, como por exemplo: alterar o parâmetro control_files com o novo caminho dos arquivos de controle e realizar o rename file dos datafiles e redolog online para o novo caminho.
Abraço,
Ronaldo
Nenhum comentário:
Postar um comentário