首先祝大家中秋快乐。我用SELECT USERNAME,SQL_REDO FROM V$LOGMNR_CONTENTS;查看重做日志,结果系统告诉我必须执行函数DBMS_LOGMNR.START_LOGMNR。请问如何执行。然后还有其他查看日志文件的方式吗??

解决方案 »

  1.   

    ================================    安装    ===========================================init.ora中 UTL_FILE_DIR 为服务器中放置数据字典文件的目录。
                   如:  UTL_FILE_DIR = (e:\Oracle\logs)
    必须均以SYS用户身份   /rdbms/admin/dbmslsm.sql   // 创建 DBMS_LOGMNR 分析日志文件  
               9i  dbmslms.sql  dbmslm.sql   /rdbms/admin/dbmslsmd.sql  // 创建 DBMS_LOGMNR_D 创建数据字典文件          /** dbmslmd.sql  dbmslm.sql    prvtlm.plb
               可以在<oracle_home>\rdbms\admin下找的到,顺序执行。**/================================    使用    ===========================================
    LogMiner工具实际上是由两个新的PL/SQL内建包 DBMS_LOGMNR 和 DBMS_ LOGMNR_D 和
        四个V$动态性能视图(视图是在利用过程
        DBMS_LOGMNR.START_LOGMNR启动LogMiner时创建)组成。在使用
        LogMiner工具分析redo log文件之前,可以使用DBMS_LOGMNR_D
        包将数据字典导出为一个文本文件。该字典文件是可选的,但是
        如果没有它,LogMiner解释出来的语句中关于数据字典中的部分
        (如表名、列名等)和数值都将是16进制的形式,我们是无法
        直接理解的。例如,下面的sql语句:       INSERT INTO dm_dj_swry (rydm, rymc) VALUES (00005, '张三');  LogMiner解释出来的结果将是下面这个样子,       insert into Object#308(col#1, col#2) values
           (hextoraw('c30rte567e436'), hextoraw('4a6f686e20446f65'));    创建数据字典的目的就是让LogMiner引用涉及到内部数据字典中的部分时
        为他们实际的名字,而不是系统内部的16进制。数据字典文件是一个文本文件
        使用包DBMS_LOGMNR_D来创建。如果我们要分析的数据库中的表有变化,
        影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。
        另外一种情况是在分析另外一个数据库文件的重作日志时,也必须
        重新生成一遍被分析数据库的数据字典文件。 
      重新启动数据库,使新加的参数生效,然后创建数据字典文件:    SQL> CONNECT SYS
        SQL> EXECUTE dbms_logmnr_d.build(    // dictionary_location 是  UTL_FILE_DIR 中的地址
                     dictionary_filename => ' v816dict.ora',
                     dictionary_location => 'e:\oracle\logs');创建要分析的日志文件列表
    重作日志文件   A. 创建列表     SQL> EXECUTE dbms_logmnr.add_logfile(
                      LogFileName=>'e:\Oracle\oradata\sxf\redo01.log',
                      Options=>dbms_logmnr.new);   B. 添加其他日志文件到列表     SQL> EXECUTE dbms_logmnr.add_logfile(
                      LogFileName=>'e:\Oracle\oradata\sxf\redo02.log',
                      Options=>dbms_logmnr.addfile);归档日志文件   A.创建列表     SQL> EXECUTE dbms_logmnr.add_logfile(
                 LogFileName=>' E:\Oracle\oradata\sxf\archive\ARCARC09108.001',
                 Options=>dbms_logmnr.new);   B.添加另外的日志文件到列表     SQL> EXECUTE dbms_logmnr.add_logfile(
                 LogFileName=>' E:\Oracle\oradata\sxf\archive\ARCARC09109.001',
                 Options=>dbms_logmnr.addfile);   关于这个日志文件列表中需要分析日志文件的个数完全由你自己决定,
         但这里建议最好是每次只添加一个需要分析的日志文件,在对该文件
         分析完毕后,再添加另外的文件。   和添加日志分析列表相对应,使用过程 'dbms_logmnr.removefile'
         也可以从列表中移去一个日志文件。下面的例子移去上面添加的
         日志文件e:\Oracle\oradata\sxf\redo02.log。     SQL> EXECUTE dbms_logmnr.add_logfile(
                LogFileName=>' e:\Oracle\oradata\sxf\redo02.log',
                Options=>dbms_logmnr. REMOVEFILE);使用LogMiner进行日志分析  (1)无限制条件     SQL> EXECUTE dbms_logmnr.start_logmnr(
                      DictFileName=>' e:\oracle\logs\ v816dict.ora ');  (2)有限制条件   通过对过程DBMS_ LOGMNR.START_LOGMNR中几个不同参数的设置(参数含义见表1),
         可以缩小要分析日志文件的范围。通过设置起始时间和终止时间参数
         我们可以限制只分析某一时间范围的日志。如下面的例子,我们仅仅
         分析2001年9月18日的日志,:     SQL> EXECUTE dbms_logmnr.start_logmnr(
              DictFileName => ' e:\oracle\logs\ v816dict.ora ',
              StartTime => to_date('2001-9-18 00:00:00','YYYY-MM-DD HH24:MI:SS')
              EndTime => to_date(''2001-9-18 23:59:59','YYYY-MM-DD HH24:MI:SS '));   也可以通过设置起始SCN和截至SCN来限制要分析日志的范围:     SQL> EXECUTE dbms_logmnr.start_logmnr(
             DictFileName => ' e:\oracle\logs\ v816dict.ora ',
             StartScn => 20,
             EndScn => 50);             表1 DBMS_LOGMNR.START__LOGMNR过程参数含义
             - - - - - - - - - - - - - - - - - -
             参数         参数类型             默认值
             StartScn    数字型(Number)        0
            //分析重作日志中SCN≥StartScn日志文件部分
     EndScn      数字型(Number)        0
            //分析重作日志中SCN≤EndScn日志文件部分
             StartTime   日期型(Date)         1998-01-01
            //分析重作日志中时间戳≥StartTime的日志文件部分
             EndTime     日期型(Date)         2988-01-01
            //分析重作日志中时间戳≤EndTime的日志文件部分
             DictFileName字符型(VARCHAR2)
            //字典文件,该文件包含一个数据库目录的快照。
            //使用该文件可以使得到的分析结果是可以理解的
            // 文本形式,而非系统内部的16进制
             Options     BINARY_INTEGER          0
            //系统调试参数,实际很少使用观察分析结果(v$logmnr_contents) 
         动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。     SELECT sql_redo FROM v$logmnr_contents;   如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的
         SQL查询得到,该查询可以得到用户DB_ZGXT对表SB_DJJL所作的一切工作。     SQL> SELECT sql_redo FROM v$logmnr_contents
               WHERE username='DB_ZGXT' AND tablename='SB_DJJL';   需要强调一点的是,视图v$logmnr_contents中的分析结果仅在
         我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在。
         这是因为所有的LogMiner存储都在 ****PGA***** 内存中,所有其他的进程是看
         不到它的,同时随着进程的结束,分析结果也随之消失。   最后DBMS_LOGMNR.END_LOGMNR终止日志分析事务,此时PGA内存区域被清除,结果也随之不再存在。其他注意事项   我们可以利用LogMiner日志分析工具来分析其他数据库实例产生的重作日志文件,
         而不仅仅用来分析本身安装LogMiner的数据库实例的redo logs文件。
         使用LogMiner分析其他数据库实例时,有几点需要注意:   1. LogMiner必须使用被分析数据库实例产生的字典文件,
            而不是安装LogMiner的数据库产生的字典文件,另外必须保证
            安装LogMiner数据库的字符集和被分析数据库的字符集相同。   2. 被分析数据库平台必须和当前LogMiner所在数据库平台一样,
            也就是说如果我们要分析的文件是由运行在UNIX平台上的Oracle 8i
    产生的,那么也必须在一个运行在UNIX平台上的Oracle实例上
            运行LogMiner,而不能在其他如Microsoft NT上运行LogMiner。
    当然两者的硬件条件不一定要求完全一样。   3. LogMiner日志分析工具仅能够分析Oracle 8以后的产品,