Recuperação de datafiles e tablespaces
Wagner Pinheiro (e-mail) é OCP DBA Oracle 9i 10g, com atuação pela IFactory.
Boas novas a todos! Conforme mencionado no artigo anterior, trataremos agora da recuperação de datafiles e tablespaces, ainda através de backups gerenciados pelo usuário.
Para que possamos implementar uma recuperação de datafile ou tablespace gerenciado pelo usuário, temos, é claro, que ter um backup do banco de dados, seja ele COLD (banco fora) ou HOT (banco no ar e utilizando archives).
Como iremos simular a recuperação de apenas uma tablespace ou datafile, faremos um backup apenas da tablespace USERS.
Uma das formas para se fazer esse backup é utilizando as técnicas mostradas no artigo anterior, ou seja, BEGIN BACKUP e END BACKUP. Então, vamos lá!
01. Coloque a tablespace no modo BEGIN BACKUP
ALTER TABLESPACE USERS BEGIN BACKUP;
02. Copie o datafile da tablespace USERS utilizando os comandos do sistema operacional (COPY do WINDOWS, ou cp do Linux...)
COPY D:\Oracle\Oradata\USERS01.DBF E:\Backup\Oracle\USERS01.DBF
1 arquivo(s) copiado(s).
03. Coloque a tablespace no modo END BACKUP
ALTER TABLESPACE USERS END BACKUP;
De forma a confirmar os dados que existem nas tabelas dessa tablespace, vamos fazer um select de forma a visualizar alguns dados.
SQL> select * from scott.emp;
truncando (conforme solicitado) antes da coluna DEPTNO
EMPNO |
ENAME |
JOB |
MGR |
HIREDATE |
SAL |
COMM |
7369 |
SMITH |
CLERK |
7902 |
17/12/80 |
800 |
|
7499 |
ALLEN |
SALESMAN |
7698 |
20/02/81 |
1600 |
300 |
. |
. |
. |
. |
. |
. |
|
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
7902 |
FORD |
ANALYST |
7566 |
03/12/81 |
3000 |
|
7934 |
MILLER |
CLERK |
7782 |
23/01/82 |
1300 |
14 linhas selecionadas.
SQL> select to_char(sysdate,'dd/mm/yyyy hh:mi:ss') from dual;
TO_CHAR(SYSDATE,'DD
-------------------
25/05/2006 09:50:44
Perceba que às 09:50:44 do dia 25/05/2006, tabela EMP do usuário SCOTT possuia 14 linhas.
SQL> select tablespace_name, status
2 from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
6 linhas selecionadas.
Perceba que a tablespace USERS está online e, portanto, as tabelas podem ser acessadas.
Alguns minutos depois, o disco onde a tablespace estava armazenada apresentou um problema e você vai precisar fazer a recuperação novamente.
ERRO na linha 1:
ORA-01157: nÒo Ú possÝvel identificar/bloquear arquivo de dados 4 - consulte
arquivo de anßlise DBWR
ORA-01110: 4 do arquivo de dados:
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\USERS01.DBF'
SQL> select tablespace_name, status
2 from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS OFFLINE
EXAMPLE ONLINE
6 linhas selecionadas.
A tablespace agora se encontra offline, e os dados contidos nela não podem ser acessados.
E agora, o que fazer?
Após reconstruir o file system, seja ele Windows ou Linux, você vai restaurar o datafile que sofreu o crash a partir de um backup(USERS01.DBF), e executar o comando de RECOVER TABLESPACE.
Execute a recuperação da tablespace que apresentou problema:
SQL> RECOVER TABLESPACE USERS;
Recuperaþòo De Mýdia Concluýda.
Depois, coloque a tablespace em modo ONLINE
SQL> ALTER TABLESPACE USERS ONLINE;
Tablespace alterado.
Consultando DBA_TABLESPACES, você poderá verificar que a tablespace está novamente disponível para uso.
SQL> SELECT TABLESPACE_NAME, STATUS
2 FROM DBA_TABLESPACES;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
6 linhas selecionadas.
Fizemos um exemplo recuperando uma tablespace. Agora, imagine que essa tablespace fosse formada de dois datafiles, um datafile na unidade D e outro na unidade E. Da mesma forma com que você recuperou a tablespace, é possível também recuperar o datafile.
Imagine que o datafile existente na unidade D apresentou problemas de leitura no disco, e está corrompido.
Para isso, após corrigir o problema físico do disco, restaure o ultimo backup válido disponível no path determinado pela consulta:
SQL> SELECT FILE_ID, FILE_NAME
2 FROM DBA_DATA_FILES;
FILE_ID FILE_NAME
---------- ---------------------------------------------------
4 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\USERS01.DBF
3 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSAUX01.DBF
2 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS01.DBF
1 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM01.DBF
5 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\EXAMPLE01.DBF
Perceba o número de identificação do datafile USERS01.DBF(4), após identificar o número do arquivo, execute o seguinte comando
SQL> RECOVER DATAFILE 4;
RECUPERAÞÒO DE MÝDIA CONCLUÝDA.
Com esse, encerramos mais um artigo referente à recuperação do banco de dados.
Espero ter desmistificado um pouco o processo de recuperação gerenciado pelo usuário. Claro que ainda existem N possibilidades a serem exploradas.
Lembraça a todos! Bons Tuning´s