Irei demonstrar como realizar um recovery incompleto no oracle, algumas vezes é a única maneira de recuperarmos dados, por exemplo, quando houve operações erroneas causadas por um usuário, ou durante um recover, e um dos archives não estava presente.
Vamos realizar o restore do banco utilizando o backup mais recente, porém em uma data anterior a qual desejamos recuperar o banco, iremos realizar o recovery até um determinado momento antes das alteração.
No nosso caso sabemos a data exata a qual realizaremos o restore, porém algumas vezes não há informações precisas e há a necessidade de ser investigado o momento certo das alterações.
Convenções:
Negrito: Passos a serem executados.
Fonte Azul: Comentários.
Ambiente
Antes de iniciarmos é preciso validar o ambiente, precisamos ter o banco em modo de archivelog, algumas variaveis de ambientes devem estar configuradas, e é claro devemos ter um backup válido via rman.
A parte do banco em archive e o backup do rman não será demonstrada, irei apenas demonstrar o restore e o recovery pelo rman.
Falhas
Salvar a data antes das alterações, e a seguir iremos remover o schema HR, assim, voltaremos o banco para antes do usuário HR ser removido do sistema e antes de ser perdido todas as informações do mesmo.
SQL> SELECT TO_CHAR(SYSDATE,'DD/MM/YYYY HH24:MI:SS') FROM DUAL;
TO_CHAR(SYSDATE,'DD
-------------------
15/12/2008 14:59:41
SQL> SELECT SUM(BYTES)/1024/1024 FROM DBA_SEGMENTS WHERE OWNER='HR';
SUM(BYTES)/1024/1024
--------------------
1.5625
SQL> DROP USER HR CASCADE;
User dropped.
SQL> SELECT SUM(BYTES)/1024/1024 FROM DBA_SEGMENTS WHERE OWNER='HR';
SUM(BYTES)/1024/1024
--------------------
SQL>
Restore
Vamos pegar as informações necessárias para setar as váriaveis de ambiente NLS_LANG e NLS_DATE_FORMAT, utilizadas para realizar o backup do rman.
Váriaveis necessárias:
NLS_LANG = language_territory.charset
NLS_DATE_FORMAT = Qualquer formato válido.
Variaveis de Ambiente
SQL> set line 120
SQL> set pagesize 30
SQL> col description format a40
SQL> col property_value format a40
SQL> select * from database_properties where property_name like '%NLS%';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
------------------------------ ---------------------------------------- ----------------------------------------
NLS_LANGUAGE AMERICAN Language
NLS_TERRITORY AMERICA Territory
NLS_CURRENCY $ Local currency
NLS_ISO_CURRENCY AMERICA ISO currency
NLS_NUMERIC_CHARACTERS ., Numeric characters
NLS_CHARACTERSET AL32UTF8 Character set
NLS_CALENDAR GREGORIAN Calendar system
NLS_DATE_FORMAT DD-MON-RR Date format
NLS_DATE_LANGUAGE AMERICAN Date language
NLS_SORT BINARY Linguistic definition
NLS_TIME_FORMAT HH.MI.SSXFF AM Time format
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM Time stamp format
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR Time with timezone format
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR Timestamp with timezone format
NLS_DUAL_CURRENCY $ Dual currency symbol
NLS_COMP BINARY NLS comparison
NLS_LENGTH_SEMANTICS BYTE NLS length semantics
NLS_NCHAR_CONV_EXCP FALSE NLS conversion exception
NLS_NCHAR_CHARACTERSET AL16UTF16 NCHAR Character set
NLS_RDBMS_VERSION 10.2.0.1.0 RDBMS version for NLS parameters
20 rows selected.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Restore
1) Declaramos as variaveis de ambiente no SO
2) Chama-se o rman
3) Procedimento de recuperação
1) Variaveis de ambiente
[oracle@hodb01 logs]$export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
[oracle@hodb01 logs]$ export NLS_DATE_FORMAT="DD/MM/YYYY hh24:mi:ss"
2) Rman
[oracle@hodb01 logs]$ rman
Recovery Manager: Release 10.2.0.1.0 - Production on Mon Dec 15 15:13:12 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
RMAN> connect target /
connected to target database: ORCL (DBID=1201080710)
3) Procedimento de restore
Paramos o banco de dados, iniciamos ele em modo munted, determinamos a data a qual o banco irá voltar, realizamos o restore e o recover, e abrimos ele com resetlogs, o que faz com que o banco volte em uma nova incarnação.
RMAN> run {
2> shutdown immediate;
3> startup mount;
4> set until time '15/12/2008 14:59:41';
5> restore database;
6> recover database;
7> }
using target database control file instead of recovery catalog
database closed
database dismounted
Oracle instance shut down
connected to target database (not started)
Oracle instance started
database mounted
Total System Global Area 205520896 bytes
Fixed Size 1218532 bytes
Variable Size 79693852 bytes
Database Buffers 121634816 bytes
Redo Buffers 2973696 bytes
executing command: SET until clause
Starting restore at 15/12/2008 15:14:33
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=157 devtype=DISK
media recovery complete, elapsed time: 00:00:04
Finished recover at 15/12/2008 15:16:57
RMAN> alter database open restlogs;
RMAN> alter database open resetlogs;
database opened
RMAN> exit
Recovery Manager complete.
[oracle@hodb01 logs]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Dec 15 15:19:21 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> SELECT TO_CHAR(SYSDATE,'DD/MM/YYYY HH24:MI:SS') FROM DUAL;
TO_CHAR(SYSDATE,'DD
-------------------
15/12/2008 15:19:55
SQL> SELECT SUM(BYTES)/1024/1024 FROM DBA_SEGMENTS WHERE OWNER='HR';
SUM(BYTES)/1024/1024
--------------------
1.5625
SQL>
Bom esse artigo somente foi para demonstrar os procedimentos para um recover inclompleto, esse tipo de falha talves poderia ser recuperada de outra maneira um pouco mais eficente.
Como visto é simples realizar o restore incompleto pelo rman.
Nenhum comentário:
Postar um comentário