Oracle日志挖掘之LogMiner

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Oracle日志挖掘之LogMiner 官方文档地址:http://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL019 众所周知,所有对用户数据和数据字典的改变都记录在Oracle的Redo Log中,因此,Redo Log包含了所有进行恢复操作所需要的信息。

Oracle日志挖掘之LogMiner




官方文档地址: http://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL019





众所周知,所有对用户数据和数据字典的改变都记录在OracleRedo Log中,因此,Redo Log包含了所有进行恢复操作所需要的信息。但是,原始的Redo Log文件无法看懂,所以,Oracle8i以后提供了一个非常有用的分析工具,称为LogMiner。使用该工具可以轻松获得Redo Log文件(包含归档日志文件)中的具体内容。特别是该工具可以分析出所有对于数据库的DML操作(INSERTUPDATEDELETE等)语句。Oracle 9i后可以分析DDL语句,另外还可分析得到一些必要的回滚SQL语句。LogMiner一个最重要的用途就是不用全部恢复数据库就可以恢复数据库的某个变化。该工具特别适用于调试、审计或者回退某个特定的事务。

LogMiner工具既可以用来分析在线日志,也可以用来分析离线日志文件,既可以分析本身自己数据库的重作日志文件,也可以用来分析其它数据库的重作日志文件。当分析其它数据库的重作日志文件时,需要注意的是,LogMiner必须使用被分析数据库实例产生的字典文件,而不是安装LogMiner的数据库产生的字典文件,另外,必须保证安装LogMiner数据库的字符集和被分析数据库的字符集相同。源数据库(Source Database)平台必须和分析数据库(Mining Database)平台一样。

Oracle通过LogMiner工具对Redo Log进行挖掘,显示出一系列可读的信息,该过程称为日志挖掘。LogMiner通过V$LOGMNR_CONTENTS视图显示Redo Log中的信息。

总的说来,LogMiner工具的主要用途有:

1、跟踪数据库的变化:可以离线地跟踪数据库的变化,而不会影响在线系统的性能

2、回退数据库的变化:回退特定的变化数据,减少Point-In-Time Recovery的执行

3、优化和扩容计划:可通过分析日志文件中的数据以分析数据的增长模式

4、确定数据库的逻辑损坏时间:准确定位操作执行的时间和SCN

5、确定事务级要执行的精细逻辑恢复操作,可以取得相应的UNDO操作

6、执行后续审计

(一)安装LogMiner工具

在默认情况下,Oracle已经安装了LogMiner工具。若是没有安装,则可以运行下面两个脚本:

$ORACLE_HOME/rdbms/admin/dbmslm.sql

$ORACLE_HOME/rdbms/admin/dbmslmd.sql

这两个脚本必须均以SYS用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。若要使普通用户具有日志挖掘的权限,则可以执行如下的SQL进行赋权:

GRANT EXECUTE ON  DBMS_LOGMNR TO LHR_TEST;

脚本执行完毕后,LogMiner包含两个PL/SQL包和几个视图:

1DBMS_LOGMNR_D包,包括一个用于提取数据字典信息的过程,即DBMS_LOGMNR_D.BUILD()过程,还包含一个重建LogMiner表的过程,DBMS_LOGMNR_D.SET_TABLESPACE。在默认情况下,LogMiner的表是建在SYSTEM表空间下的。

2、DBMS_LOGMNR包,它有3个存储过程:

l ADD_LOGFILE(NAME VARCHAR2,OPTIONS NUMBER) 用来添加或删除用于分析的日志文件

l START_LOGMNR(START_SCN NUMBER,END_SCN NUMBER,START_TIME NUMBER,END_TIME NUMBER,DICTFILENAME VARCHAR2,OPTIONS NUMBER) 用来开启日志分析,同时确定分析的时间或SCN窗口以及确认是否使用提取出来的数据字典信息

l END_LOGMNR()存储过程用来终止分析会话,它将回收LogMiner所占用的内存

LogMiner相关的数据字典视图:

l V$LOGHIST:显示历史日志文件的一些信息

l V$LOGMNR_DICTIONARY:因为LOGMINER可以有多个字典文件,所以该视图显示字典文件信息

l V$LOGMNR_PARAMETERS:显示LOGMINER的参数

l V$LOGMNR_LOGS:显示用于分析的日志列表信息

l V$LOGMNR_CONTENTSLOGMINER结果

(二)LogMiner的数据字典

为了完全地转换Redo Log中的内容,LogMiner需要访问一个数据库字典。LogMiner使用该字典将Oracle内部的对象标识符和数据类型转换为对象名称和外部的数据格式。没有字典,LogMiner将使用16进制字符显示内部对象ID

例如,对于如下的SQL语句:

INSERT INTO emp(name, salary) VALUES ('John Doe', 50000);

在没有数据字典的情况下,LogMiner将显示为:

INSERT INTO Object#2581(col#1, col#2) VALUES (hextoraw('4a6f686e20446f65'),hextoraw('c306'));"

LogMiner提供了3种提取字典文件的方式:

① 将字典文件提取为一个Flat File(平面文件或中间接口文件)

② 将字典文件提取为Redo Log

③ 使用Online Catalog(联机日志)

下面分别介绍这3种方式:

① 将字典文件提取为一个Flat File(平面文件或中间接口文件)

为了将数据库字典信息提取为Flat File,需要使用带有STORE_IN_FLAT_FILE参数的DBMS_LOGMNR_D.BUILD程序。DBMS_LOGMNR_D.BUILD程序需要访问一个能够放置字典文件的目录。因为PL/SQL 程序通常不能直接访问用户目录,必须手动指定一个由DBMS_LOGMNR_D.BUILD程序使用的目录。为了指定该目录,必须修改初始化文件中的UTL_FILE_DIR参数:

ALTER SYSTEM SET UTL_FILE_DIR ='/home/oracle' SCOPE=SPFILE;

然后重新启动数据库。确保在创建Flat File文件的过程中,不能有DDL操作被执行。在创建Flat File文件时,数据库必须处于OPEN状态,然后执行DMBS_LOGMNR_D.BUILD程序:

EXECUTE DBMS_LOGMNR_D.BUILD('dictionary.ora', '/home/oracle');

脚本执行完成后会在/home/oracle下生成一个dictionary.ora的文本文件。该文件中包含一系列的建表语句和插入语句。

② 将字典文件提取为Redo Log

为了将字典文件提取为Redo日志,数据库必须处于OPEN状态,并且处于归档模式。将字典提取为Redo日志的过程中,数据库系统不能有DDL语句被执行。为了将字典提取为Redo日志,需要使用带有STORE_IN_REDO_FILES参数的DBMS_LOGMNR_D.BUILD程序:

SQL> EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=>DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);

需要注意的是,将字典文件提取为Redo文件的时候需要开启附加日志,如下所示:

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

在这些Redo日志被归档之后,可以通过查询V$ARCHIVED_LOG视图来查询:

SELECT *

  FROM V$ARCHIVED_LOG A

 WHERE A.NAME IS NOT NULL

   AND (A.DICTIONARY_BEGIN = 'YES' OR A.DICTIONARY_END = 'YES');

如果将字典信息提取为Redo文件,那么在使用DBMD_LOGMNR.ADD_LOGFILE指定所需要分析的日志文件时,需要将这些包含字典信息的Redo文件也添加进去。同时在使用START_LOGMNR开始分析时,需要指定DICT_FROM_REDO_LOGS的参数。

③ 使用Online Catalog(联机日志)

为了使LogMiner直接使用数据库当前使用的字典,在开始LogMiner时可以指定将联机目录作为字典源:

SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

使用联机目录,意味着不需要再提取字典文件,是开始分析日志的最快的方式。除了可以分析联机Redo日志外,还可以在和产生归档日志文件相同的系统上分析归档日志文件。然而,记住联机目录只能重建应用于表的最新版本上的SQL语句。一旦表被修改,联机目录就无法反映出表之前的版本。这就意味着LogMiner不能重建执行于表的旧版本上的SQL语句。

(三)跟踪DDL语句

LogMiner被启动时,它会自动创建自己的内部字典。如果源字典是Flat File字典或Redo日志中的字典,则可以使用DDL_DICT_TRACKING参数来跟踪DDL语句。DDL跟踪默认是关闭的。为了打开这一功能,可以在启动LogMiner时使用DDL_DICT_TRACKING参数:

SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS =>DBMS_LOGMNR.DDL_DICT_TRACKING);

当使用DDL_DICT_TRACKING时,需要注意如下几点:

当使用联机目录(Online catalog)时,也就是当使用DICT_FROM_ONLINE_CATALOG参数时,是不能使用DDL_DICT_TRACKING选项的

使用DDL_DICT_TRACKING时,要求数据库处于OPEN状态

尽量为LogMiner的表提供一个单独的表空间。默认情况下LogMiner的表是创建在SYSTEM表空间中的。使用DBMS_LOGMNR_D.SET_TABLESPACE可以在一个单独的表空间中重建这些LogMiner的表:SQL> EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts$');

(四)过滤LogMiner返回的数据

可以使用COMMITTED_DATA_ONLY参数来只显示那些被提交的事务:

SQL> EXEC DBMS_LOGMNR.START_LOGMNR(OPTIONS=>DBMS_LOGMNR.COMMITTED_DATA_ONLY);

当使用这一参数时,LogMiner将所有的DML操作按照事务的关系组合在一起。这些事务按照它们被提交的顺序显示出来。

可以使用SKIP_CORRUPTION参数来忽略redo日志中的所有错误:

SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS =>DBMS_LOGMNR.SKIP_CORRUPTION);

可以使用使用STARTTIMEENDTIME参数按照时间过滤数据,还可以使用STARTSCNENDSCN参数按照SCNSystem Change Number)来过滤数据。

BEGIN

DBMS_LOGMNR.START_LOGMNR(STARTSCN => 23573690,ENDSCN   => 23632671,OPTIONS  => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE);

END;

/

BEGIN

DBMS_LOGMNR.START_LOGMNR(STARTTIME => '2015-06-03 11:10:12',ENDTIME => '2015-06-03 11:13:06',OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE);

END;

/

(五)典型的LogMiner步骤

一个典型的LogMiner的操作包含如下步骤:

1、进行初始化设置:开启附加日志,设置LogMiner的表空间,设置UTL_FILE_DIR参数的值

2、提取一个字典:将字典文件提取为Flat FileRedo日志,或者直接使用Online Catalog

3、指定需要分析的Redo日志文件:利用DBMS_LOGMNR.ADD_LOGFILE来添加日志

4、开始LogMiner:执行DBMS_LOGMNR.START_LOGMNR来启动LogMiner

5、查询V$LOGMNR_CONTENTS视图

6、结束LogMiner:通过执行EXECUTE DBMS_LOGMNR.END_LOGMNR来结束分析

下面给出一个使用Online Catalog作为数据字典进行日志挖掘的示例:

SQL> alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:mi:ss';

Session altered.

SQL> select member from v$logfile;

MEMBER

---------------------------------------------------

+DATA/orclasm/onlinelog/group_3.263.850260263

+FRA/orclasm/onlinelog/group_3.259.850260267

+DATA/orclasm/onlinelog/group_2.262.850260259

+FRA/orclasm/onlinelog/group_2.258.850260263

+DATA/orclasm/onlinelog/group_1.261.850260255

+FRA/orclasm/onlinelog/group_1.257.850260259

6 rows selected.

SQL> execute dbms_logmnr.add_logfile('+DATA/orclasm/onlinelog/group_1.261.850260255',dbms_logmnr.new);

PL/SQL procedure successfully completed.

SQL> execute dbms_logmnr.add_logfile('+DATA/orclasm/onlinelog/group_2.262.850260259',dbms_logmnr.addfile);

PL/SQL procedure successfully completed.

SQL> execute dbms_logmnr.add_logfile('+DATA/orclasm/onlinelog/group_3.263.850260263',dbms_logmnr.addfile);

PL/SQL procedure successfully completed.

SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog+dbms_logmnr.committed_data_only);

PL/SQL procedure successfully completed.

SQL> select sql_redo,sql_undo from v$logmnr_contents where table_name='T' and OPERATION='INSERT';

SQL_REDO                               SQL_UNDO

-------------------------------------------  ------------------------------------------------------------------------

insert into "LHR"."T"("ID") values ('1');        delete from "LHR"."T" where "ID" = '1' and ROWID = 'AAAaN7AAEAAAnhjAAA';

insert into "LHR"."T"("ID") values ('2');        delete from "LHR"."T" where "ID" = '2' and ROWID = 'AAAaN7AAEAAAnhjAAB';






1 Logminer简介

1.1 LogMiner介绍

Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 在线/归档日志文件中的具体内容,特别是该工具可以分析出所有对于数据库操作的DML和DDL语句。该工具特别适用于调试、审计或者回退某个特定的事务。

LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图(Oracle8i内置包的一部分)组成,它作为Oracle数据库的一部分来发布是8i产品提供的一个完全免费的工具。但该工具和其他Oracle内建工具相比使用起来显得有些复杂,主要原因是该工具没有提供任何的图形用户界面(GUI)。

1.2 LogMiner作用

在Oracle 8i之前,Oracle没有提供任何协助数据库管理员来读取和解释重作日志文件内容的工具。系统出现问题,对于一个普通的数据管理员来讲,唯一可以作的工作就是将所有的log文件打包,然后发给Oracle公司的技术支持,然后静静地等待Oracle 公司技术支持给我们最后的答案。然而从8i以后,Oracle提供了这样一个强有力的工具--LogMiner。

LogMiner 工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件。

总的说来,LogMiner工具的主要用途有:

1、跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能。

2、回退数据库的变化:回退特定的变化数据,减少point-in-time recovery的执行。

3、优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式

1.3 使用详解

1.3.1 安装LogMiner

在使用LogMiner之前需要确认Oracle是否带有进行LogMiner分析包,一般来说Windows操作系统Oracle10g以上都默认包含。如果不能确认,可以DBA身份登录系统,查看系统中是否存在运行LogMiner所需要的dbms_logmnr、dbms_logmnr_d包,如果没有需要安装LogMiner工具,必须首先要运行下面这样两个脚本:

1、$ORACLE_HOME/rdbms/admin/dbmslm.sql

2、$ORACLE_HOME/rdbms/admin/dbmslmd.sql.

这两个脚本必须均以DBA用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。

创建完毕后将包括如下过程和视图:

类型

过程名

用途

过程

Dbms_logmnr_d.build

创建一个数据字典文件

过程

Dbms_logmnr.add_logfile

在类表中增加日志文件以供分析

过程

Dbms_logmnr.start_logmnr

使用一个可选的字典文件和前面确定要分析日志文件来启动LogMiner

过程

Dbms_logmnr.end_logmnr

停止LogMiner分析

视图

V$logmnr_dictionary

显示用来决定对象ID名称的字典文件的信息

视图

V$logmnr_logs

在LogMiner启动时显示分析的日志列表

视图

V$logmnr_contents

LogMiner启动后,可以使用该视图在SQL提示符下输入SQL语句来查询重做日志的内容

1.3.2  创建数据字典文件

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来创建。如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。另外一种情况是在分析另外一个数据库文件的重作日志时,也必须要重新生成一遍被分析数据库的数据字典文件。

创建数据字典文件之前需要配置LogMiner文件夹:

1 CREATE DIRECTORY utlfile AS 'D:\oracle\oradata\practice\LOGMNR'; 2 alter system set utl_file_dir='D:\oracle\oradata\practice\LOGMNR' scope=spfile;

创建字典文件需要以DBA用户登录,创建到上面配置好的LogMiner文件夹中:

1 CONN LOGMINER/ LOGMINER@PRACTICE AS SYSDBA 2 EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'D:\oracle\oradata\practice\LOGMNR');

1.3.3 加入需分析的日志文件

Oracle的LogMiner可以分析在线(online)和归档(offline)两种日志文件,加入分析日志文件使用dbms_logmnr.add_logfile过程,第一个文件使用dbms_logmnr.NEW参数,后面文件使用dbms_logmnr.ADDFILE参数。

1、创建列表

1 BEGIN 2 dbms_logmnr.add_logfile(logfilename=>'D:\oracle\oradata\practice\REDO03.LOG',options=>dbms_logmnr.NEW); 3 END; 4 /

2、添加其他日志文件到列表

1 BEGIN 2 dbms_logmnr.add_logfile(logfilename=>'D:\oracle\oradata\practice\ARCHIVE\ARC00002_0817639922.001',options=>dbms_logmnr.ADDFILE); 3 dbms_logmnr.add_logfile(logfilename=>'D:\oracle\oradata\practice\ARCHIVE\ARC00003_0817639922.001',options=>dbms_logmnr.ADDFILE); 4 END; 5 /

1.3.4 使用LogMiner进行日志分析

Oracle的LogMiner分析时分为无限制条件和限制条件两种,无限制条件中分析所有加入到分析列表日志文件,限制条件根据限制条件分析指定范围日志文件。

 

1、无限制条件

EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'D:\oracle\oradata\practice\LOGMNR\dictionary.ora');

2、有限制条件

通过对过程DBMS_ LOGMNR.START_LOGMNR中几个不同参数的设置(参数含义见表1),可以缩小要分析日志文件的范围。通过设置起始时间和终止时间参数我们可以限制只分析某一时间范围的日志。

参数

参数类型

默认值

含义

StartScn

数字型

0

分析重作日志中SCN≥StartScn日志文件部分

EndScn

数字型

0

分析重作日志中SCN≤EndScn日志文件部分

StartTime

日期型

1998-01-01

分析重作日志中时间戳≥StartTime的日志文件部分

EndTime

日期型

2988-01-01

分析重作日志中时间戳≤EndTime的日志文件部分

DictFileName

字符型

 

字典文件该文件包含一个数据库目录的快照。

如下面的例子,我们仅仅分析2013年6月8日的日志,:

EXECUTE dbms_logmnr.start_logmnr(

DictFileName => dictfilename=>'D:\..\practice\LOGMNR\dictionary.ora', 

StartTime =>to_date('2013-6-8 00:00:00','YYYY-MM-DD HH24:MI:SS')

EndTime =>to_date(''2013-6-8 23:59:59','YYYY-MM-DD HH24:MI:SS ')); 

也可以通过设置起始SCN和截至SCN来限制要分析日志的范围:

EXECUTE dbms_logmnr.start_logmnr(

DictFileName =>'D:\..\practice\LOGMNR\dictionary.ora',

StartScn =>20,

EndScn =>50); 

1.3.5 观察分析结果(v$logmnr_contents)

到现在为止,我们已经分析得到了重作日志文件中的内容。动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。

SELECT sql_redo FROM v$logmnr_contents; 

如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户LOGMINER对表EMP所作的一切工作。

SELECT sql_redo FROM v$logmnr_contents WHERE username='LOGMINER' AND tablename='EMP'; 

序号

名称

含义

1

SCN

特定数据变化的系统更改号

2

TIMESTAM

数据改变发生的时间

3

COMMIT_TIMESTAMP

数据改变提交的时间

4

SEG_OWNER

数据发生改变的段名称

5

SEG_NAME

段的所有者名称

6

SEG_TYPE

数据发生改变的段类型

7

SEG_TYPE_NAME

数据发生改变的段类型名称

8

TABLE_SPACE

变化段的表空间

9

ROW_ID

特定数据变化行的ID

10

SESSION_INFO

数据发生变化时用户进程信息

11

OPERATION

重做记录中记录的操作(如INSERT)

12

SQL_REDO

可以为重做记录重做指定行变化的SQL语句(正向操作)

13

SQL_UNDO

可以为重做记录回退或恢复指定行变化的SQL语句(反向操作)

需要强调一点的是,视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在。这是因为所有的LogMiner存储都在PGA内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。

最后,使用过程DBMS_LOGMNR.END_LOGMNR终止日志分析事务,此时PGA内存区域被清除,分析结果也随之不再存在。

2 数据同步Oracle数据库设置

Oracle数据使用LogMiner查看执行SQL语句,其中需要进行如下四步骤是指:

1、设置数据库为归档模式;

2、设置LogMiner字典文件路径等;

3、创建数据同步用户(如用户名为LOGMINER,该用户拥有DBA权限);

4、验证配置是否成功;

2.1 设置数据库为归档模式

2.1.1 查看数据库是否为归档模式

使用SqlPlus或者命令行界面连接数据库(以下以命令行界面操作)

--进入SqlPlus程序

sqlplus /nolog

--使用DBA用户登录到源数据库中

conn system/system@practic as sysdba

--查看PRACTICE数据库是否处于归档模式

1 SELECT dbid, name, log_mode FROM v$database; 2 或者 3 ARCHIVE LOG LIST;

如果显示数据库显示为归档模式,则设置数据库为归档模式可跳过;如果显示数据库为非归档模式则需要进行以下设置。

上图显示数据库未进行归档,需要进行归档设置。

2.1.2 设置归档模式

创建ARCHIVE文件夹,ARCHIVE文件夹路径根据所在服务器进行设置,在下面操作中设置为" D:\oracle\oradata\practice\ARCHIVE"

--设置归档日志文件路径

ALTER SYSTEM SET log_archive_dest="D:\oracle\oradata\practice\ARCHIVE";

--日志文件名称格式:

ALTER SYSTEM SET log_archive_format="ARC%S_%R.%T" SCOPE=SPFILE;

--修改完毕后,关闭数据库,以MOUNT方式启动

1 SHUTDOWN IMMEDIATE; 2 STARTUP MOUNT;

--设置数据库为归档模式

ALTER DATABASE ARCHIVELOG;

(注意:如果重启数据失败,请参考第4章节异常问题处理)

2.1.3 验证归档是否设置成功

--查看PRACTICE数据库是否处于归档模式

1 SELECT dbid, name, log_mode FROM v$database; 2 或者 3 ARCHIVE LOG LIST;

--验证参数设置是否起作用

SELECT dest_id, status, destination FROM v$archive_dest WHERE dest_id =1;

--在参数文件设置已经起作用,打开数据库

ALTER DATABASE OPEN;

2.2 LogMiner设置

2.2.1 创建LogMiner文件夹

创建LOGMNR文件夹,路径为"D:\oracle\oradata\practice\LOGMNR"

2.2.2 设置LogMiner字典文件路径

--创建数据字典文件

1 CREATE DIRECTORY utlfile AS 'D:\oracle\oradata\practice\LOGMNR'; 2 alter system set utl_file_dir='D:\oracle\oradata\practice\LOGMNR' scope=spfile;

2.2.3 开启LogMiner日志补充模式

--创建数据字典文件

alter database add supplemental log data;

2.2.4 重启数据库验证

--修改完毕后,关闭数据库,以MOUNT方式启动

1 SHUTDOWN IMMEDIATE; 2 STARTUP;

--查看Logminer文件夹是否设置

SHOW PARAMETER utl_file_dir;

2.3 创建数据同步用户

在数据库创建LOGMINER用户,该用户需要具有DBA权限

--在源数据库创建LOGMINER用户,并赋予DBA权限

1 CREATE USER LOGMINER IDENTIFIED BY LOGMINER; 2 GRANT CONNECT, RESOURCE,DBA TO LOGMINER;

3 使用LogMiner读取日志例子

在使用LogMiner读取归档/在线日志需要按照第2章节进行设置,设置完毕后可以对归档和在线日志进行分析。特别是需要开启LogMiner日志补充模式,如果没有开始LogMiner补充模式将无法查看DDL语句,按照测试结果看,只有开始LogMiner日志补充模式后,才能查看DDL语句,在此之前进行DDL将无法进行查看。

3.1 使用LogMiner读取在线日志

3.1.1 测试数据准备

--以LOGMINER用户登录(非DBA登录)创建AAAAA表(Oracle11g请注意用户名、密码大小写)

1 CONNECT LOGMINER/LOGMINER@PRACTICE 2 CREATE TABLE AAAAA(field001 varchar2(100)); 3 INSERT INTO AAAAA (field001) values ('000000'); 4 INSERT INTO AAAAA (field001) values ('0000010'); 5 commit;

3.1.2  创建数据字典文件

数据库对象发生变化,需要重新创建数据字典文件

--以LOGMINER用户(DBA权限)登录,生成字典文件

1 CONN LOGMINER/LOGMINER@PRACTICE AS SYSDBA 2 EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'D:\oracle\oradata\practice\LOGMNR');

3.1.3 确认当前处于联机状态的日志文件

--需要确认当前处于联机状态的日志文件

SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;

 

从上图可以看出在线日志REDO03处于ACTIVE状态中

3.1.4 加入需分析的日志文件

--加入解析在线日志文件

1 BEGIN 2 dbms_logmnr.add_logfile(logfilename=>'D:\oracle\oradata\practice\REDO03.LOG',options=>dbms_logmnr.NEW); 3 END; 4 /

 

3.1.5 使用LogMiner进行分析

--启动LogMiner进行分析

EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'D:\oracle\oradata\practice\LOGMNR\dictionary.ora');

3.1.6 观察分析结果

--查询相关操作日志

1 SELECT sql_redo, sql_undo, seg_owner 2 FROM v$logmnr_contents 3 WHERE seg_name='AAAAA' 4 AND seg_owner='LOGMINER';

3.2 使用LogMiner读取归档日志

3.2.1 测试数据准备

--以LOGMINER用户登录(非DBA权限)创建EMP表(Oracle11g请注意用户名、密码大小写)

复制代码
 1 CONN LOGMINER/ LOGMINER@PRACTICE  2 CREATE TABLE EMP  3 (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,  4 ENAME VARCHAR2(10),  5 JOB VARCHAR2(9),  6 MGR NUMBER(4),  7  HIREDATE DATE,  8 SAL NUMBER(7,2),  9 COMM NUMBER(7,2), 10 DEPTNO NUMBER(2));
复制代码

 --插入EMP数据

1 INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20); 2 INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30); 3 INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30); 4 INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20); 5 COMMIT;

--从v$log视图中找出日志文件的序号

1 CONNECT system/system@practice as sysdba 2 ALTER SYSTEM SWITCH LOGFILE; 3 select sequence#, FIRST_CHANGE#, NEXT_CHANGE#,name from v$archived_log order by sequence# desc;

3.2.2 创建数据字典文件

确保按照2.2进行logMiner设置

--以LOGMINER用户(DBA权限)登录,生成字典文件

1 CONN LOGMINER/ LOGMINER@PRACTICE AS SYSDBA 2 EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'D:\oracle\oradata\practice\LOGMNR');

3.2.3  加入需分析的日志文件

--加入解析日志文件

1 BEGIN 2 dbms_logmnr.add_logfile(logfilename=>'D:\oracle\oradata\practice\ARCHIVE\ARC00002_0817639922.001',options=>dbms_logmnr.NEW); 3 END; 4 /

3.2.4 使用LogMiner进行分析

--启动LogMiner进行分析

1 EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'D:\oracle\oradata\practice\LOGMNR\dictionary.ora');

 

3.2.5 观察分析结果

--查询相关操作日志

1 SELECT sql_redo, sql_undo 2 FROM v$logmnr_contents 3 WHERE seg_name='EMP' 4 AND seg_owner='LOGMINER';

 

4 其他

4.1 异常问题处理

4.1.1 出现ORA-12514错误

如果出现ORA-12514错误时,如下图所示:

需要修改listerner.ora文件,具体在Oracle安装目录\NETWORK\ADMIN下,当前操作为" D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora "加入如下设置

1 (SID_DESC = 2 (GLOBAL_DBNAME = practice) 3 (ORACLE_HOME = D:\oracle\product\10.2.0\db_1) 4 (SID_NAME = practice) 5 )

设置后需要重新启动TNSListener,即可生效

4.1.2 出现ORA-16018错误

如果出现ORA-16018错误时,如下图所示:

该问题是数据库开启了闪回功能,归档文件默认情况下是保存到闪回路径中,简单的处理方式是在设置归档路径中加入scope=spfile参数

--设置归档日志文件路径

ALTER SYSTEM SET log_archive_dest="D:\oracle\oradata\practice\ARCHIVE"   scope=spfile;

此时查看闪回路径,该路径并未影响,只不过闪回文件和归档文件保存到各自文件夹中

4.2 LogMiner相关资料

参见Oracle官方站点对LogMiner介绍,地址如下:

http://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm




About Me

...............................................................................................................................

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文博客园地址:http://www.cnblogs.com/lhrbest

● 本文pdf版及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 联系我请加QQ好友(646634621),注明添加缘由

● 于 2017-06-02 09:00 ~ 2017-06-30 22:00 在魔都完成

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

...............................................................................................................................

拿起手机使用微信客户端扫描下边的左边图片来关注小麦苗的微信公众号:xiaomaimiaolhr,扫描右边的二维码加入小麦苗的QQ群,学习最实用的数据库技术。


DBA笔试面试讲解
欢迎与我联系

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
1月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
4月前
|
SQL Oracle 关系型数据库
"揭秘!一键解锁Oracle日志清理魔法,让海量归档日志无处遁形,守护数据库健康,告别磁盘空间告急噩梦!"
【8月更文挑战第9天】随着Oracle数据库在企业应用中的普及,归档日志管理对保持数据库健康至关重要。归档日志记录所有更改,对数据恢复极为重要,但也可能迅速占用大量磁盘空间影响性能。利用Oracle提供的RMAN工具,可通过编写Shell脚本来自动清理归档日志。脚本包括设置环境变量、连接数据库、检查和删除指定时间前的日志,并记录执行情况。通过Cron作业定时运行脚本,可有效管理日志文件,确保数据库稳定运行。
124 7
|
4月前
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
80 0
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
345 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
14天前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
333 3
|
24天前
|
存储 监控 安全
什么是事件日志管理系统?事件日志管理系统有哪些用处?
事件日志管理系统是IT安全的重要工具,用于集中收集、分析和解释来自组织IT基础设施各组件的事件日志,如防火墙、路由器、交换机等,帮助提升网络安全、实现主动威胁检测和促进合规性。系统支持多种日志类型,包括Windows事件日志、Syslog日志和应用程序日志,通过实时监测、告警及可视化分析,为企业提供强大的安全保障。然而,实施过程中也面临数据量大、日志管理和分析复杂等挑战。EventLog Analyzer作为一款高效工具,不仅提供实时监测与告警、可视化分析和报告功能,还支持多种合规性报告,帮助企业克服挑战,提升网络安全水平。
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1709 14

推荐镜像

更多