目录
6.1. LogMiner 是在 CDC 中的运用模块 ( 生产引擎 )
1. 什么是 LogMiner
Oracle LogMiner 是 Oracle 公司在 8i 之后推出的日志 ( 在线日志和归档日志 ) 的分析工具, 该工具可以分析出所有对数据库操作的 DML 和 DDL 语句 。
2. LogMiner 的主要用途
2.1. 跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能。
2.2. 回退数据库的变化:回退特定的变化数据,减少 point-in-time recovery 的执行。
2.3. 优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式。
3. 使用 LogMiner 需要数据库开启归档模式
3.1. 以 dba 身份登录
sqlplus sys/sys as sysdba
3.2. 查询当前日志归档状态
archive log list;
3.3. 关闭运行的数据库实例
shutdown immediate
3.4. 启动数据库实例到 mount 状态,但不要打开
startup mount
3.5. 设置数据库为归档日志模式
alter database archivelog;
3.6. 打开数据库
alter database open;
3.7. 确认数据库是否处于日志归档模式
archive log list;
3.8. 打开附加日志
alter database add supplemental log data;
alter database add supplemental log data (primary key,unique index) columns;
4. LogMiner 用到的过程和视图
4.1. 过程
d bms_logmnr_d.build : 创建一个数据字典文件
d bms_logmnr.add_logfile : 在类表中增加日志文件以供分析
d bms_logmnr.start_logmnr : 启动 LogMiner 分析
d bms_logmnr.end_logmnr : 停止 LogMiner 分析
4.2 视图:
v $logmnr_dictionary : 显示用来决定对象 ID 名称的字典文件的信息
v $logmnr_logs : 在 LogMiner 启动时显示分析的日志列表
v $logmnr_contents : LogMiner 启动后,可以使用该视图在 SQL 提示符下输入 SQL 语句来查询重做日志的内容
5. 分析日志过程
5.1. 测试数据准备
SCN : ( System Change Number 简称 SCN )是当 Oracle 数据库 更新后,由 DBMS 自动维护去累积递增的一个数字 。
5.2. 使用 LogMiner 进行分析
通过对过程DBMS_ LOGMNR.START_LOGMNR中几个不同参数的设置(参数含义见下表),可以缩小要分析日志文件的范围。通过设置起始时间和终止时间参数我们可以限制只分析某一时间范围的日志。
参数 |
参数类型 |
默认值 |
含义 |
StartScn |
数字型 |
0 |
分析重作日志中 SCN ≥ StartScn 日志文件部分 |
EndScn |
数字型 |
0 |
分析重作日志中 SCN ≤ EndScn 日志文件部分 |
StartTime |
日期型 |
1998-01-01 |
分析重作日志中时间戳≥ StartTime 的日志文件部分 |
EndTime |
日期型 |
2988-01-01 |
分析重作日志中时间戳≤ EndTime 的日志文件部分 |
DictFileName |
字符型 |
|
字典文件该文件包含一个数据库目录的快照。 |
5.3. 观察分析的结果
select SCN, XIDUSN, XIDSLT, XIDSQN, rawtohex(XID) XID, SQL_REDO, RS_ID, SSN, CSF, SEG_OWNER, TABLE_NAME, OPERATION_CODE, THREAD#, RBASQN, RBABLK, RBABYTE,COMMIT_TIMESTAMP from v$logmnr_contents
where operation_code in(6,7) or operation_code in (1, 2, 3, 5,255);
v$logmnr_contents 的字段解释
名称 |
描述 |
SCN |
数据变化的系统更改号 |
XIDUDN |
事务的回滚段号 |
XIDSLT |
ITL( 事务列表 ) 列表中 ,slot 的号 ----- 事务槽 |
XIDSQN |
表示这个 slot 被重复使用的次数 也就是表示 sequence( 覆盖次数 ), |
XID |
事务号 |
SQL_REDO |
可以为重做记录重做指定行变化的SQL语句(正向操作) |
RS_ID |
结果集 ID |
SSN |
SQL 的序列号,与 RS_ID 一起用,确认唯一的一行 |
CSF |
0 :表示执行的 SQL 在一条记录中能存下 1 :表示 SQL_REDO 或 SQL_UNDO 大于 4000 字节,一行没有存下 |
SEG_OWNER |
段的所有者名称 |
TABLE_NAME |
操作的表名 |
OPERATION_CODE |
DML改变数据(1、2、3、9、10、11)
|
THREAD# |
线程号 |
RBASQN |
Redo Block Address (RBA) |
RBABLK |
RBA block number within the log file |
RBABYTE |
RBA 的块偏移 |
COMMIT_TIMESTAMP |
事务提交的时间戳 |
5.4. 调用停止分析的存储过程
exec sys.dbms_logmnr.end_logmnr();
停止以后就不能再查询 v$logmnr_contents 这个视图了,会报错
原因 : 视图 v$logmnr_contents 中的分析结果仅在我们运行过程 'dbms_logmrn.start_logmnr' 这个会话的生命期中存 在。这是因为所有的 LogMiner 存储都在 PGA 内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。最后,使用过程 DBMS_LOGMNR.END_LOGMNR 终止日志分析事务,此时 PGA 内存区域被清除,分析结果也随之不再存在。
6. 在 CDC 工具中的使用
6.1. LogMiner 是在 CDC 中的运用模块 ( 生产引擎 )
6.2. 如何确定挖掘的区间
当前挖掘 SCN ~ 当前挖掘 SCN+ 挖掘步长 (80000)
6.3. 挖掘结果查询如何过滤
在生产引擎里会定义过滤器 ( 哪些表进行增量同步 ) ,这样在结果查询的时候可以过滤出只针对这些表的数据库操作。
6.4. 向 MQ 发送的消息的消息内容是什么
内容不会把挖掘出来的数据库操作一次性全部发送,而是按照事务划分,同一个 XID( 事务 ID) 下且针对该引擎中过滤的表的操作,组成一个消息体,进行发送。
Attachments:
LogMiner介绍及在CDC中的应用.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
LogMiner介绍及在CDC中的应用.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
LogMiner介绍及在CDC中的应用.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)