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á!

  1. Coloque a tablespace no modo BEGIN BACKUP
    ALTER TABLESPACE USERS BEGIN BACKUP;
  2. 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).
  3. 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.

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 muitas possibilidades a serem exploradas.