您好,欢迎访问一九零五行业门户网

探索Oracle不完全恢复之--基于cancel的恢复 第二篇

探索oracle不完全恢复之--基于cancel的恢复 第二篇
基于cancel 的不一致性恢复(归档丢失) 第二篇
创建测试表
sql> conn wwl/wwl
connected.
sql> select * from tab;
tname                          tabtype  clusterid
------------------------------ -----------------
wwl001                         table
sql> create table wwl002 as select *from wwl001;
table created.
sql> conn / as sysdba
connected.
切换日志
sql> alter system switch logfile;
system altered.
后再创建第二张表
sql> conn wwl/wwl
connected.
sql> create table wwl003 as select *from wwl001;
table created.
查看当前日志组,,确定当前活动的日志组,是组4
sql> conn / as sysdba
connected.
sql> set line 200
sql> select * from v$log;
group#    thread#  sequence#     bytes    members arc status           first_change# first_tim
---------- ---------- ---------- -------------------- --- ---------------- ------------- ---------
         4          1          2 134217728          2 yes active                 1716929 30-jul-12
        5          1          1 134217728          2 yes inactive               1692728 27-jul-12
        6          1          3 134217728          2 no  current                1720396 30-jul-12
        7          1          0 134217728          2 yes unused                       0
定位当前日志组的日志文件,有两个。
 sql> col member format a30
sql> select * from v$logfile;
group# status  type    member                         is_
---------- ------- ------------------------------------- ---
        7         online  /dbbak2/oradata/wwl/redo7a.log no
        7         online  /dbbak2/oradata/wwl/redo7b.log no
        6         online  /dbbak2/oradata/wwl/redo6a.log no
        6         online  /dbbak2/oradata/wwl/redo6b.log no
        5 stale   online  /dbbak2/oradata/wwl/redo5a.log no
        5 stale   online  /dbbak2/oradata/wwl/redo5b.log no
         4         online /dbbak2/oradata/wwl/redo4a.log no
         4         online /dbbak2/oradata/wwl/redo4b.log no
8 rows selected.
删除当前日志组文件,模拟在线事务丢失:
sql> !rm -f/dbbak2/oradata/wwl/redo4a.log
sql> !rm -f/dbbak2/oradata/wwl/redo4b.log
模拟服务器断电
sql> shutdown abort;
oracle instance shut down.
恢复步骤:
1、尝试启动数据库的时候报当前日志丢失。
sql> startup
oracle instance started.
total system global area  100663296 bytes
fixed size                  1217884 bytes
variable size              88083108 bytes
database buffers            8388608 bytes
redo buffers                2973696 bytes
database mounted.
ora-00313: open failedfor members of log group 4 of thread 1
ora-00312: online log 4thread 1: '/dbbak2/oradata/wwl/redo4b.log'
ora-27037: unable toobtain file status
linux error: 2: no suchfile or directory
additional information: 3
ora-00312: online log 4thread 1: '/dbbak2/oradata/wwl/redo4a.log'
ora-27037: unable toobtain file status
linux error: 2: no suchfile or directory
additional information: 3
2、尝试clear redo4
sql> alter database clear logfile group4;
alter database clear logfile group 4
*
error at line 1:
ora-01624: log 4 needed for crash recoveryof instance wwl (thread 1)
ora-00312: online log 4 thread 1:'/dbbak2/oradata/wwl/redo4a.log'
ora-00312: online log 4 thread 1:'/dbbak2/oradata/wwl/redo4b.log'
3、在当前库做基于cancel的不完全恢复
sql> recover database until cancel;
ora-00279: change 1716930 generated at07/30/2012 11:03:51 needed for thread 1
ora-00289: suggestion :/dbsoft/product/10.2.0/db_1/dbs/arch1_2_789761098.dbf
ora-00280: change 1716930 for thread 1 isin sequence #2
specify log: {=suggested |filename | auto | cancel}
auto
ora-00279: change 1720396 generated at07/30/2012 13:37:21 needed for thread 1
ora-00289: suggestion :/dbsoft/product/10.2.0/db_1/dbs/arch1_3_789761098.dbf
ora-00280: change 1720396 for thread 1 isin sequence #3
ora-00278: log file'/dbsoft/product/10.2.0/db_1/dbs/arch1_2_789761098.dbf' no longer needed forthis recovery
ora-00308: cannot open archived log'/dbsoft/product/10.2.0/db_1/dbs/arch1_3_789761098.dbf'
ora-27037: unable to obtain file status
linux error: 2: no such file or directory
additional information: 3
ora-01547: warning: recover succeeded butopen resetlogs would get error below
ora-01194: file 1 needs more recovery to beconsistent
ora-01110: data file 1:'/dbbak2/oradata/wwl/system01.dbf'
做完恢复之后必须使用resetlogs选项打开数据库:
sql> alter database open resetlogs;
alter database open resetlogs
*
error at line 1:
ora-01194: file 1 needs more recovery to beconsistent
ora-01110: data file 1:'/dbbak2/oradata/wwl/system01.dbf'
重建下控制文件:
sql> create controlfile reuse databasewwl resetlogs  archivelog
   maxlogfiles 16
   maxlogmembers 3
   '/dbbak2/oradata/wwl/redo4a.log',
   maxdatafiles 100
   maxinstances 8
 group 5 (
   maxloghistory 292
logfile
 group 4 (
   '/dbbak2/oradata/wwl/redo4a.log',
   '/dbbak2/oradata/wwl/redo4b.log'
 group 6 (
  )size 128m,
 group 5 (
   '/dbbak2/oradata/wwl/redo5a.log',
   '/dbbak2/oradata/wwl/redo5b.log'
   '/dbbak2/oradata/wwl/redo7b.log'
  )size 128m,
 group 6 (
   '/dbbak2/oradata/wwl/redo6a.log',
   '/dbbak2/oradata/wwl/redo6b.log'
  )size 128m,
 group 7 (
   '/dbbak2/oradata/wwl/redo7a.log',
   '/dbbak2/oradata/wwl/redo7b.log'
  )size 128m
-- standby logfile
datafile
 '/dbbak2/oradata/wwl/system01.dbf',
 '/dbbak2/oradata/wwl/undotbs01.dbf',
 '/dbbak2/oradata/wwl/sysaux01.dbf',
 '/dbbak2/oradata/wwl/users01.dbf',
 '/dbbak2/oradata/wwl/wwl001',
 '/dbbak2/oradata/wwl/wwl002',
 '/dbbak2/oradata/wwl/wwl003'
character set zhs16cgb231280
 34  ;
control file created.
再次打开,结果还是不行
sql> alter database open resetlogs;
alter database open resetlogs
*
error at line 1:
ora-01194: file 1 needs more recovery to beconsistent
ora-01110: data file 1:'/dbbak2/oradata/wwl/system01.dbf'
可以尝试使用_allow_resetlogs_corruption隐含参数来打开数据库
sql> alter system set_allow_resetlogs_corruption=true scope=spfile;
system altered.
修改完参数之后重启数据库到mount状态
sql> shutdown immediate
ora-01109: database not open
database dismounted.
oracle instance shut down.
sql> startup;
oracle instance started.
total system global area  100663296 bytes
fixed size                  1217884 bytes
variable size              88083108 bytes
database buffers            8388608 bytes
redo buffers                2973696 bytes
database mounted.
ora-01589: must use resetlogs ornoresetlogs option for database open
同样以resetlogs模式启动数据库
sql> alter database open resetlogs;
database altered.
一定记得关闭该参数
sql> alter system set_allow_resetlogs_corruption=false scope=spfile;
system altered.
让参数关闭生效,再次启动数据库
sql> startup force;
oracle instance started.
total system global area  100663296 bytes
fixed size                  1217884 bytes
variable size              88083108 bytes
database buffers            8388608 bytes
redo buffers                2973696 bytes
database mounted.
database opened.
sql> show parameter_allow_resetlogs_corruption
name                                 type        value
----------------------------------------------- ------------------------------
_allow_resetlogs_corruption          boolean     false
sql>
sql> alter tablespace temp01 addtempfile '/dbbak2/oradata/wwl/temp01.dbf' reuse;
tablespace altered.
检查数据
sql> conn wwl/wwl
connected.
sql> select * from tab;
tname                          tabtype  clusterid
------------------------------ -----------------
wwl001                         table
wwl002                         table
相关阅读:
探索oracle之rman_01概念
探索oracle之rman_02基本使用
探索oracle之rman_03非一致性备份
探索oracle之rman_04非一致性备份
探索oracle之rman_05增量备份
探索oracle之rman_06备份策略
探索oracle之rman_07单个数据文件丢失恢复
探索oracle之rman_07整个业务表空间丢失恢复
探索oracle之rman_07 磁盘损坏数据丢失恢复
探索oracle之rman_07 数据库所有文件全部丢失恢复
探索oracle之rman_07 重做日志redu文件丢失恢复
探索oracle之rman_07 参数文件丢失恢复
探索oracle之rman_07控制文件丢失恢复
探索oracle之rman_07 system表空间丢失恢复
其它类似信息

推荐信息