Redo 损坏彻底解决

Redo 损坏彻底解决 [转]


几天在看隐含参数,为了验证一下,便加了一大堆进行,结果。。。。居然导致Redo损坏:
ORA-16038: log 3 sequence# 72 cannot be archived
ORA-00354: corrupt redo log block header
ORA-00312: online log 3 thread 1: 'D:/ORACLE/ORADATA/RMAN/REDO03.LOG'

Sat May 14 23:16:49 2005
Errors in file d:/oracle/admin/rman/bdump/rman_arc0_736.trc:
ORA-16038: log 3 sequence# 72 cannot be archived
ORA-00354: corrupt redo log block header
ORA-00312: online log 3 thread 1: 'D:/ORACLE/ORADATA/RMAN/REDO03.LOG'

此时的初始化参数:
processes = 150
timed_statistics = FALSE
_disable_system_state = TRUE
shared_pool_size = 83886080
large_pool_size = 8388608
java_pool_size = 0
trace_enabled = TRUE
backup_tape_io_slaves = TRUE
_dump_system_state_scope = LOCAL
control_files = D:/oracle/oradata/rman/control01.ctl, D:/oracle/oradata/rman/control02.ctl, D:/oracle/oradata/rman/control03.ctl
db_block_size = 4096
db_cache_size = 134217728
compatible = 9.2.0.0.0
log_archive_start = TRUE
log_checkpoint_timeout = 0
_disable_logging = TRUE
db_files = 65534
db_file_multiblock_read_count= 16
fast_start_mttr_target = 0
undo_management = AUTO
undo_tablespace = UNDOTBS1
undo_retention = 10800
remote_login_passwordfile= EXCLUSIVE
db_domain =
instance_name = rman
utl_file_dir = d:/oracle/admin/rman/
cursor_sharing = SIMILAR
hash_join_enabled = TRUE
background_dump_dest = D:/oracle/admin/rman/bdump
user_dump_dest = D:/oracle/admin/rman/udump
core_dump_dest = D:/oracle/admin/rman/cdump
session_max_open_files = 1000
sort_area_size = 2097152
db_name = rman
open_cursors = 300
sql_trace = FALSE
partition_view_enabled = TRUE
star_transformation_enabled= TRUE
query_rewrite_enabled = TRUE
pga_aggregate_target = 10485760
statistics_level = ALL

这个祸手就是 _disable_logging = TRUE。

SQL> select ksppinm,ksppdesc
2 from x$ksppi
3 where ksppinm='_disable_logging' ;

KSPPINM KSPPDESC
-------------------- --------------------
_disable_logging Disable logging

至于为什么要加这个参数,是想看一下这个参数在数据导入时,是否Disable logging。结果事与愿违,倒是弄出错误来。

为了打开数据库,首先想到的是将坏的日志清除掉,但是:
SQL> alter database clear unarchived logfile group 3 ;
alter database clear unarchived logfile group 3
*
ERROR 位于第 1 行:
ORA-01624: 线程3的紧急恢复需要日志1
ORA-00312: 联机日志 3 线程 1: 'D:/ORACLE/ORADATA/RMAN/REDO03.LOG'

SQL> alter database clear unarchived logfile group 3 unrecoverable datafile;
alter database clear unarchived logfile group 3 unrecoverable datafile
*
ERROR 位于第 1 行:
ORA-01624: 线程3的紧急恢复需要日志1
ORA-00312: 联机日志 3 线程 1: 'D:/ORACLE/ORADATA/RMAN/REDO03.LOG'

清理日志文件行不通了,只有加入隐含参数,进行不完全恢复了。
 
不完全恢复
先加入隐含参数

SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile ;

系统已更改。

SQL> alter system set "_allow_terminal_recovery_corruption"=true scope=spfile ;

系统已更改。

SQL> shutdown abort ;
ORACLE 例程已经关闭。

这两个参数,如果忘了或者记不全,也不要紧,可以从固定表X$KSPPI中查到:


代码:--------------------------------------------------------------------------------SQL> shutdown abort ;ORACLE 例程已经关闭。SQL> startup nomount ;ORACLE 例程已经启动。SQL> select  ksppinm,ksppdesc  2  from x$ksppi  3  where ksppinm like '_allow%' escape '  4  ;KSPPINM                             KSPPDESC----------------------------------- ----------------------------------------_allow_error_simulation             Allow error simulation for testing_allow_resetlogs_corruption         allow resetlogs even if it will cause co                                    rruption_allow_terminal_recovery_corruption Finish terminal recovery even if it may                                    cause corruption_allow_read_only_corruption         allow read-only open even if database is                                     --------------------------------------------------------------------------------

 


SQL>startup
.....
数据库装载完毕。
ORA-00354: 损坏重做日志块标题
ORA-00353: 日志损坏接近块 51328 更改 1029419 时间
ORA-00312: 联机日志 3 线程 1: 'D:/ORACLE/ORADATA/RMAN/REDO03.LOG'

现在开始不完全恢复:
SQL> recover database until cancel;
ORA-00279: 更改 1029419 (在 05/15/2005 01:21:08 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:/ORACLE/ORA92/RDBMS/ARC00078.001
ORA-00280: 更改 1029419 对于线程 1 是按序列 # 78 进行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件1需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:/RMAN/SYSTEM01.DBF'


ORA-01112: 未启动介质恢复

SQL> recover database until cancel;
ORA-00279: 更改 1029419 (在 05/15/2005 01:21:08 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:/ORACLE/ORA92/RDBMS/ARC00078.001
ORA-00280: 更改 1029419 对于线程 1 是按序列 # 78 进行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开存档日志 'D:/ORACLE/ORA92/RDBMS/ARC00078.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-00308: 无法打开存档日志 'D:/ORACLE/ORA92/RDBMS/ARC00078.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。

SQL> recover database until cancel;
ORA-00279: 更改 1029419 (在 05/15/2005 01:21:08 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:/ORACLE/ORA92/RDBMS/ARC00078.001
ORA-00280: 更改 1029419 对于线程 1 是按序列 # 78 进行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开存档日志 'D:/ORACLE/ORA92/RDBMS/ARC00078.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-00308: 无法打开存档日志 'D:/ORACLE/ORA92/RDBMS/ARC00078.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件1需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:/RMAN/SYSTEM01.DBF'

恢复完成。再用resetlogs打开数据库:

SQL> alter database open resetlogs ;
ERROR 位于第 1 行:
ORA-03113: 通信通道的文件结束

这是打开过程中的ALERT内容:
Sun May 15 01:32:46 2005
alter database open resetlogs
Sun May 15 01:32:47 2005
RESETLOGS is being done without consistancy checks. This may result
in a corrupted database. The database should be recreated.
RESETLOGS after incomplete recovery UNTIL CHANGE 1029419
Resetting resetlogs activation ID 1445126762 (0x5622e26a)
Sun May 15 01:32:55 2005
Assigning activation ID 1444730695 (0x561cd747)
Thread 1 opened at log sequence 1
Current log# 1 seq# 1 mem# 0: D:/ORACLE/ORADATA/RMAN/REDO01.LOG
Successful open of redo thread 1.
Sun May 15 01:32:55 2005
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Sun May 15 01:32:55 2005
SMON: enabling cache recovery
Sun May 15 01:32:56 2005
ARC1: Media recovery disabled
Sun May 15 01:32:59 2005
Errors in file d:/oracle/admin/rman/udump/rman_ora_1096.trc:
ORA-00600: 内部错误代码,参数: [2662], [0], [1029435], [0], [1037356], [8388785], [], []

Sun May 15 01:33:03 2005
Errors in file d:/oracle/admin/rman/udump/rman_ora_1096.trc:
ORA-00600: 内部错误代码,参数: [2662], [0], [1029435], [0], [1037356], [8388785], [], []

Sun May 15 01:33:03 2005
Error 600 happened during db open, shutting down database
USER: terminating instance due to error 600
Sun May 15 01:33:04 2005
Errors in file d:/oracle/admin/rman/bdump/rman_pmon_796.trc:
ORA-00600: internal error code, arguments: [], [], [], [], [], [], [], []

Instance terminated by USER, pid = 1096
ORA-1092 signalled during: alter database open resetlogs ...
Sun May 15 01:38:05 2005
USER: terminating instance due to error 1092
Instance terminated by USER, pid = 1096

等待很久,居然报这个错!其实不用怕,恢复已经完成,只要重新打开就可以了。

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值