Oracle Recover Database until SCN小窍门

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638    QQ号:47079569    邮箱:[email protected]

 

RMAN 重置数据库到重设日志操作之前

使用flashback 数据库,可以使数据库回到之前的重设日志选项,假设不完全恢复在具体的scn 上执行,使用重设日志选项打开数据库之后,要求你使用flashback 数据库选项将数据库恢复到重设日志操作之前的scn。要做到这一点,你需要在V $数据库视图有一个resetlogs_change# column值,比v$flashback_database_log视图oldest_flashback_scn column值大的变化#列。

如果第一个值大于第二个值 ,那么执行flashback数据库到重设日志命令之前,使数据库回到之前的重设日志选项。    

在下面的例子中, 创建一个新表,然后执行不完全恢复,使用重设日志选项打开数据库,之后,丢弃表,使数据库回到之前的重设日志状态,重新获得表。

首先, 启用数据库的 flashback 功能:

SQL>
startup
mount
SQL>
alter
database flashback on;
SQL>
alter
database open;

然后创建一个表,插入一个行:

SQL>
create
table test (id number);
Table created.

SQL>
insert
into test values(1);
1 row created.

SQL>
commit;
Commit complete.
SQL>

现在使用RMAN获得数据库的备份:

RMAN> backup database plus archivelog;

获得当前的 scn 号码,返回,执行不完全恢复,删除系统01.dbf 文件,造成人工多媒体损坏,关闭数据库,然后尝试打开它:

SQL>
select
current_scn
from v$database;

CURRENT_SCN
———–
454695

SQL> host
[oracle@localhost ~]$ rm -rf
/u01/oracle/product/10.2.0/db_1/oradata/test/system01.dbf
SQL>
startup
force
Database mounted.
ORA-01157: cannot identify/lock data file 1 – see DBWR trace file
ORA-01110: data file 1:
‘/u01/oracle/product/10.2.0/db_1/oradata/test/system01.dbf’
SQL>

现在恢复数据库,恢复它到之前步骤中的scn 值 ,然后使用重设日志选项打开数据库:

RMAN> restore database;
RMAN> recover database until scn 454695;
RMAN> alter database open resetlogs;
database opened
RMAN>

现在你决定使用flashback 数据库使数据库返回到之前的重设日志状态,为保证已回到之前的重设日志状态,删除表, 另外, 你需要检查v$flashback_database_log视图的oldest_flashback_scn值和v$database 视图的 resetlogs_change# 值,为了确保你能够恢复数据库,复原重设日志,删除表,获得下列的值:

SQL>
select
oldest_flashback_scn
from
v$flashback_database_log;

OLDEST_FLASHBACK_SCN
——————–
454372

SQL>
select
resetlogs_change#
from
v$database;

RESETLOGS_CHANGE#
—————–
454622

SQL>

SQL>
drop
table test;
Table dropped.
SQL>

正如你从结果454622>454372看到的那样, 你可以返回,复原重设日志选项 , 使数据库回到安装状态,恢复数据库:

SQL>
shutdown
immediate
SQL>
startup
mount
SQL>
flashback
database to before resetlogs;
Flashback complete.
SQL>

使用重设日志选项打开数据库,查询之前创建、重设日志之后删除的表:

SQL>
alter
database open resetlogs;
Database altered.

SQL> select * from test;

ID
———-
1

SQL>

计算Flashback日志生成

根据Metalink注释: 761126.1, 为计算flashback日志的量, 倍增日常重做日志生成的大小到db_flashback_retention_target参数值 ,这决定了使用flashback日志恢复数据库的时间,如果你想要保存 20 天的 flashback日志,你日常的重做日志生成量是4.5 GB,那么,你需要为flashback日志留大概 90 GB – 100 GB的空间              

监测 Flashback 数据库中的变化

有两个主要的视图可以帮助监测flashback 数据库: v$flashback_database_log v$flashback_database_stat 视图. 使用第一个视图, 可以获得有关最低scn 号和时间的信息,分钟内的保留信息(定义为flash恢复区域内保存flashback日志的时间),所有flashback日志的大小以及满足保留目标需要的大小:

SQL>
select * from
v$flashback_database_log;

OLDEST_FLASHBACK_SCN OLDEST_FL RETENTION_TARGET FLASHBACK_SIZE  ESTIMATED_FLASHBACK SIZE
——————– ——— —————- ————–  ———–
————
467751               24-FEB-10  1440            16269312       164044800
SQL>

第二个视图是 v$flashback_database_stat,它展示了磁盘I/O 重做日志, 数据文件和flashback日志的历史汇率. 另外, 使用该视图,需要估计flashback空间:

SQL>
select * from
v$flashback_database_stat;

BEGIN_TIM END_TIME  FLASHBACK_DATA    DB_DATA  REDO_DATA  ESTIMATED_FLASHBACK_SIZE
——— ——— ————– ———- ———-  —————–
——
24-FEB-10 24-FEB-10        6389760    9232384    4923392
0

SQL>


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *