Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2885591
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2009-12-01 23:36:30

错误发生如下:
 
SQL> EXEC SYS.DBMS_LOGMNR.START_LOGMNR
(OPTIONS=>SYS.dbms_logmnr.dict_from_redo_l
ogs+sys.dbms_logmnr.committed_data_only+sys.dbms_logmnr.ddl_dict_tracking);
BEGIN SYS.DBMS_LOGMNR.START_LOGMNR
(OPTIONS=>SYS.dbms_logmnr.dict_from_redo_logs+
sys.dbms_logmnr.committed_data_only+sys.dbms_logmnr.ddl_dict_tracking); END;
*
第 1 行出现错误:
ORA-01291: 缺失日志文件
ORA-06512: 在 "SYS.DBMS_LOGMNR", line 58
ORA-06512: 在 line 1

SQL> select filename from v$logmnr_logs;
FILENAME
----------------------------------------------------------------------------
----
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00227_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00228_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00229_0699741520.001
Missing log file(s) for thread 1, sequence(s) 230 to 252
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\REDO02.RDO
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\REDO03.RDO
已选择6行。
SQL> begin
  2   for x in (select * from v$archived_log where sequence# between 230 and 250)loop
  3   sys.dbms_logmnr.add_logfile(logfilename=>x.name,options=>sys.dbms_logmnr.a
ddfile);
  4  end loop;
  5  end;
  6  /
PL/SQL 过程已成功完成。
SQL> select filename from v$logmnr_logs;
FILENAME
----------------------------------------------------------------------------
----
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00227_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00228_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00229_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00230_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00231_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00232_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00233_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00234_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00235_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00236_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00237_0699741520.001
FILENAME
----------------------------------------------------------------------------
----
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00238_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00239_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00240_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00241_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00242_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00243_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00244_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00245_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00246_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00247_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00248_0699741520.001
FILENAME
----------------------------------------------------------------------------
----
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00249_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00250_0699741520.001
Missing log file(s) for thread 1, sequence(s) 251 to 252
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\REDO02.RDO
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\REDO03.RDO
已选择27行。
SQL> begin
  2   for x in (select * from v$archived_log where sequence# between 251 and
252
) loop
  3   sys.dbms_logmnr.add_logfile
(logfilename=>x.name,options=>sys.dbms_logmnr.a
ddfile);
  4  end loop;
  5  end;
  6  /
PL/SQL 过程已成功完成。
SQL> select filename from v$logmnr_logs;
FILENAME
----------------------------------------------------------------------------
----
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00227_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00228_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00229_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00230_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00231_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00232_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00233_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00234_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00235_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00236_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00237_0699741520.001
FILENAME
----------------------------------------------------------------------------
----
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00238_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00239_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00240_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00241_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00242_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00243_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00244_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00245_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00246_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00247_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00248_0699741520.001
FILENAME
----------------------------------------------------------------------------
----
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00249_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00250_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00251_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\ARCHIVE\ARC00252_0699741520.001
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\REDO02.RDO
C:\ORACLE\PRODUCT\10.2.0\ORADATA\YSPENG\REDO03.RDO
已选择28行。

SQL> exec sys.dbms_logmnr.start_logmnr
(options=>sys.dbms_logmnr.dict_from_redo_logs+sys.dbms_logmnr.committed_data_only+sys.dbms_logmnr.ddl_dict_tracking);
PL/SQL 过程已成功完成。
SQL> insert into tomshan select * from v$logmnr_contents where
seg_name='MYTEST'
;
insert into tomshan select * from v$logmnr_contents where seg_name='MYTEST'
            *
第 1 行出现错误:
ORA-00600: 内部错误代码, 参数: [krvxbpns01], [], [], [], [], [], [], []
 
google一下,查到这是Oracle 10G的BUG
 
metalink描述如下:
Logminer ad-hoc can hang or fail with an ORA-600  when mining logs
from a RAC database that has thread enable and disables or if there are
missing sequences from the log list.
 
初步判断是由于日志不连续造成的。
通过查询v$logmnr_logs可以看到 我的日志文件列表里面有2个在线日志文件 redo02.rdo redo03.rdo 这2个日志文件对应的序列号分别为253和254 。问题就是出现在这2个日志文件上,由于我想省事,后面2个没使用对应的归档文件,而直接使用的在线日志。START_LOGMNR的时候没什么问题。但INSERT得时候出问题了。由于INSERT将会产生REDO数据,而我的REDO文件设置的比较小,导致日志文件切换了好几次,因此现在的REDO02.RDO和REDO03.RDO对应的序列号应该不在是253和254了,经我检查现在2个日志文件的序列号分别为:256和257
SQL> SELECT GROUP#,SEQUENCE#,STATUS FROM V$LOG;
    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         1        255 INACTIVE
         2        256 ACTIVE
         3        257 CURRENT
我们知道v$LOGMNR_CONTENTS表 只有我们在请求(SELECT)的时候才会填充,LogMiner会分析日志列表,并将满足需要的结果返回给我们。每请求一次v$LOGMNR_CONTENTS,LogMiner就会分析一次。因此,当我们insert into tomshan select * from v$logmnr_contents的时候,LogMiner会按照日志文件的序列号依次分析每个日志文件,并将结果插入到tomshan这个表中。而在插入表的过程中将会生成很多REDO数据,并发生日志切换,从而现在的redo02.rdo,redo03.rdo里面的数据已经被覆盖了。而现在的LogMiner日志列表中的redo02.rdo、redo03.rdo对应的序列号为256、257,从而出现日志文件的断点。
知道了导致问题的原因,问题就好解决了。
 
删除日志列表中日志为redo02.rdo、redo03.rdo的文件:
 
SQL> EXEC SYS.DBMS_LOGMNR.REMOVE_LOGFILE(LogFileName=>'C:\ORACLE\PRODUCT\10.2.0\
ORADATA\YSPENG\REDO02.RDO');
PL/SQL 过程已成功完成。
SQL> EXEC SYS.DBMS_LOGMNR.REMOVE_LOGFILE(LogFileName=>'C:\ORACLE\PRODUCT\10.2.0\
ORADATA\YSPENG\REDO03.RDO');
PL/SQL 过程已成功完成。
 
重新添加日志序列号为253和254的归档文件:
 
SQL> EXEC SYS.DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>'C:\ORACLE\PRODUCT\10.2.0\ORA
DATA\YSPENG\ARCHIVE\ARC00253_0699741520.001',OPTIONS=>SYS.DBMS_LOGMNR.ADDFILE);
PL/SQL 过程已成功完成。
SQL> EXEC SYS.DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>'C:\ORACLE\PRODUCT\10.2.0\ORA
DATA\YSPENG\ARCHIVE\ARC00254_0699741520.001',OPTIONS=>SYS.DBMS_LOGMNR.ADDFILE);
PL/SQL 过程已成功完成。
 
开始日志分析:

SQL> EXEC SYS.DBMS_LOGMNR.START_LOGMNR(OPTIONS=>SYS.DBMS_LOGMNR.DICT_FROM_REDO_L
OGS+SYS.DBMS_LOGMNR.COMMITTED_DATA_ONLY+SYS.DBMS_LOGMNR.DDL_DICT_TRACKING);
PL/SQL 过程已成功完成。
SQL> INSERT INTO TOMSHAN SELECT * FROM V$LOGMNR_CONTENTS WHERE SEG_NAME ='MYTEST';
PL/SQL 过程已成功完成。
阅读(7570) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~