Backup e Restore [OFF LINE / COLD] Gerenciado pelo Usuário


Fala galera,

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.



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