如果自己搞不定可以找诗檀软件专业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>
Leave a Reply