1 理论支持
1.1 归档日志文件
日志文件分为联机日志文件和归档日志文件。DM数据库可以在归档模式和非归档模式下运行。非归档模式下,数据库会只将重做日志写入联机日志文件中进行存储;归档模式下,数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储。
联机日志文件指的是系统当前正在使用的日志文件。创建数据库时,联机日志文件通常被扩展至一定长度,其内容则被初始化为空,当系统运行时,该文件逐渐被产生的日志所填充。对日志文件的写入是顺序连续的。然而系统磁盘空间总是有限,系统必须能够循环利用日志文件的空间,为了做到这一点,当所有日志文件空间被占满时,系统需要清空一部分日志以便重用日志文件的空间,为了保证被清空的日志所“保护”的数据在磁盘上是安全的,这里需要引入一个关键的数据库概念——检查点。当产生检查点时,系统将系统缓冲区中的日志 和脏数据页都写入磁盘,以保证当前日志所“保护”的数据页都已安全写入磁盘,这样日志文件即可被安全重用。
归档日志文件,就是在归档模式下,重做日志被连续写入到归档日志后,所生成了归档日志文件。归档日志文件以归档时间命名,扩展名也是log。但只有在归档模式下运行时,DM数据库才会将重做日志写入到归档日志文件中。采用归档模式会对系统的性能产生影响,然而系统在归档模式下运行会更安全,当出现故障时其丢失数据的可能性更小,这是因为一旦出现介质故障,如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行恢复。
1.2 DBMS_LOGMNR 包
用户可以使用DBMS_LOGMNR包对归档日志进行挖掘,重构出DDL和DML等操作,并通过获取的信息进行更深入的分析。
目前DBMS_LOGMNR只支持对归档日志进行分析,配置归档后,还需要将 dm.ini 中的 RLOG_APPEND_LOGIC选项置为 1、2、3 或 4。
DM MPP环境下不支持DBMS_LOGMNR包。DMDPC使用DBMS_LOGMNR时 ,DBMS_LOGMNR.ADD_LOGFILE只能添加同一个节点的多个日志同时进行分析,不支持同时分析不同节点的日志。
1.2.1 相关方法
1.ADD_LOGFILE
增加日志文件。
语法如下:
PROCEDURE ADD_LOGFILE (
LOGFILENAME IN VARCHAR,
OPTIONS IN INT DEFAULT DBMS_LOGMNR.ADDFILE,
RAFTID IN INT
);
参数详解:
● LogFileName
增加的文件的全路径。
● Options
可选配置参数,具体的可选配置包括:
◆ DBMS_LOGMNR.”NEW”结束当前 LOGMNR(调用 LOGMNR_END),并增加指定文件(如果已经 START,则不可增加)。
◆ DBMS_LOGMNR.ADDFILE 在当前 LOGMNR 中增加日志文件(如果已经 START,则 不可增加)
◆ DBMS_LOGMNR.REMOVEFILE 从当前 LOGMNR 中去除一个日志文件
● RAFTID
用于DMDPC环境下指定RAFT组的RAFT_ID,后续DBMS_LOGMNR包相关操作都在该RAFT组的主节点执行。 非DMDPC 环境忽略此参数。当调用 END_LOGMNR()或 REMOVE_LOGFILE()清除所有日志时,指定的RAFTID不再生效。若想RAFTID继续生效,需要调用 ADD_LOGFILE()重新指定。
2. COLUMN_PRESENT
判断某列是否被包含在指定的一行逻辑记录中。
语法如下:
FUNCTION COLUMN_PRESENT (
SQL_REDO_UNDO IN BIGINT,
COLUMN_NAME IN VARCHAR DEFAULT ''
) RETURN INT;
参数详解
● SQL_REDO_UNDO
REDO或UNDO记录的唯一标识,对应V$LOGMNR_CONTENTS中的 REDO_VALUE或UNDO_VALUE字段。
● COLUMN_NAME
由模式名.表名.列名组成的字符串。
返回值
0或1,0表示该值不可以挖掘,1表示可以挖掘
3. END_LOGMNR
语法如下:
PROCEDURE END_LOGMNR();
功能说明:
结束LOGMNR。
4.MINE_VALUE
以字符串的格式来获取某一条日志中包含的指定列的值。
语法如下:
FUNCTION MINE_VALUE(
SQL_REDO_UNDO IN BIGINT,
COLUMN_NAME IN VARCHAR DEFAULT ''
) RETURN VARCHAR;
参数详解
● SQL_REDO_UNDO
REDO或UNDO记录的唯一标识,对应V$LOGMNR_CONTENTS中的 REDO_VALUE或UNDO_VALUE字段。
● COLUMN_NAME
由模式名.表名.列名组成的字符串。
返回值
以字符串的格式返回某一条日志中包含的指定列的值。
5.REMOVE_LOGFILE
从日志列表中移除某个日志文件。
语法如下:
PROCEDURE REMOVE_LOGFILE (
LOGFILENAME IN VARCHAR
);
参数详解
● LogFileName
待移除的日志文件名。
6. START_LOGMNR
根据指定的模式和条件来开始某个会话上的LOGMNR,一个会话上仅能 START一个LOGMNR。
语法如下:
PROCEDURE START_LOGMNR (
STARTSCN IN BIGINT DEFAULT 0,
ENDSCN IN BIGINT DEFAULT 0,
STARTTIME IN DATETIME DEFAULT '1988/1/1',
ENDTIME IN DATETIME DEFAULT '2110/12/31',
DICTFILENAME IN VARCHAR DEFAULT ' ',
OPTIONS IN INT DEFAULT 0
);
参数详解
● STARTSCN
分析时或者加载时的过滤条件,日志起始序列号,默认 0,表示无限制。
● ENDSCN
分析时或者加载时的过滤条件,日志结束序列号,默认 0,表示无限制。
● STARTTIME
分析时或者加载时的过滤条件,日志起始时间,默认 1988/1/1。
● ENDTIME
分析时或者加载时的过滤条件,日志结束时间,默认 2110/12/31。
● DICTFILENAME
离线字典的全路径名,默认为空。如果选用离线字典模式,则需要指定该选项,根据此项提供的全路径来加载离线字典文件。如果已经配置了其他模式(在线字典或者 REDO 日志 抽取字典信息),此项不会生效。
● OPTIONS
提供如下表所列的可选模式,各模式可以通过 + 或者按位或来进行组合。其它位的值 如 1、4、8 等目前不支持,配置后不会报错,但是没有效果。例如,组合全部模式,则取值 计算方法为 2+16+64+2048=2130,那么 OPTIONS 值取就是 2130。
1.2.2 举例说明
使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_LOGMNR');
以下示例展示日志分析工具使用流程。
第1步 配置环境
(1)修改dm.ini中的参数,如下:
ARCH_INI = 1
RLOG_APPEND_LOGIC = 1
(2)dmarch.ini需要配置本地归档,举列如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = D:\dmdata\arch #归档日志存放路径
ARCH_FILE_SIZE = 128 #单位 Mb
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M
第2步 添加归档日志文件
(1)查询有哪些归档日志
SELECT NAME , FIRST_TIME , NEXT_TIME , FIRST_CHANGE# , NEXT_CHANGE# FROM
V$ARCHIVED_LOG;
举例设查询结果如下:
D:\DMDATA\ARCH\ARCHIVE_LOCAL1_20140505155106577.LOG
2014-05-05 15:51:06.000000 2014-05-05 15:51:07.000000
1 23303
(2)添加一个或多个需要分析的归档文件
DBMS_LOGMNR.ADD_LOGFILE('D:\DMDATA\ARCH\ARCHIVE_LOCAL1_20140505155106577.LOG'
);
如要查看通过ADD_LOGFILE添加的归档日志文件,可以通过动态视图V$LOGMNR_LOGS进行查询,如下:
SELECT LOW_SCN, NEXT_SCN, LOW_TIME, HIGH_TIME, LOG_ID, FILENAME FROM
V$LOGMNR_LOGS;
查询结果如下:
1 23303
2014-05-05 15:51:06.000000 2014-05-05 15:51:07.000000 0 D:\DMDATA\ARCH\ARCHIVE_LOCAL1_20140505155106577.LOG
第3步 启动归档日志文件分析
DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2128 , STARTTIME=>TO_DATE('2014-03-04
17:36:00','YYYY-MM-DD HH24:MI:SS') , ENDTIME=>TO_DATE('2014-06-04 17:36:02','YYYY-MM-DD HH24:MI:SS'));
如要查看归档日志文件的分析结果,可以通过动态视图 V$LOGMNR_CONTENTS进行查询,如下:
SELECT OPERATION_CODE , SCN, SQL_REDO , TIMESTAMP ,SEG_OWNER, TABLE_NAME FROM
V$LOGMNR_CONTENTS WHERE SEG_OWNER = 'SYSDBA' AND OPERATION_CODE IN (3,1,2);
第4步 终止规范日志文件分析
DBMS_LOGMNR.END_LOGMNR();
1.3 操作示例
1.3.1 设置本地归档
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=D:\dmdbms\data\DAMENG\arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
ALTER DATABASE OPEN;
1.3.2 修改dm.ini参数
参数介绍
1.3.3 创建系统包
用户可以使用DBMS_LOGMNR包对归档日志进行挖掘,重构出DDL和DML等操作,并通过获取的信息进行更深入的分析。
SP_CREATE_SYSTEM_PACKAGES(1,'DBMS_LOGMNR');
1.3.4 修改SYSDBA密码产生归档记录
ALTER USER "SYSDBA" IDENTIFIED BY "Dameng@1234";
1.3.5 查询有哪些归档日志文件
SELECT NAME , FIRST_TIME , NEXT_TIME , FIRST_CHANGE# , NEXT_CHANGE# FROM
V$ARCHIVED_LOG;
1.3.6 添加需要分析的归档日志文件
DBMS_LOGMNR.ADD_LOGFILE('D:\dmdbms\data\DAMENG\arch\ARCHIVE_LOCAL1_0x745AC3BF[0
]_2021-01-23_12-46-03.log');
1.3.7 查询等待分析的归档日志文件
SELECT LOW_SCN, NEXT_SCN, LOW_TIME, HIGH_TIME, LOG_ID, FILENAME FROM
V$LOGMNR_LOGS;
1.3.8 启动归档日志分析
● OPTIONS
提供如下表所列的可选模式,各模式可以通过 + 或者按位或来进行组合。其它位的值 如 1、4、8 等目前不支持,配置后不会报错,但是没有效果。例如,组合全部模式,则取值 计算方法为 2+16+64+2048=2130,那么OPTIONS 值取就是 2130。
DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2130);
1.3.9 查看归档分析结果
SELECT * FROM V$LOGMNR_CONTENTS;
1.3.10 终止归档分析
DBMS_LOGMNR.END_LOGMNR();
文章
阅读量
获赞