知识库 : LogMiner介绍及在CDC中的应用

 

Edit Document

LogMiner 简介及在 CDC 工具中的应用

目录

LogMiner 简介及在 CDC 工具中的应用

1.               什么是 LogMiner

2.               LogMiner 的主要用途

3.               使用 LogMiner 需要数据库开启归档模式

3.1.               dba 身份登录

3.2.               查询当前日志归档状态

3.3.               关闭运行的数据库实例

3.4.               启动数据库实例到 mount 状态,但不要打开

3.5.               设置数据库为归档日志模式

3.6.               打开数据库

3.7.               确认数据库是否处于日志归档模式

3.8.               打开附加日志

4.               LogMiner 用到的过程和视图

4.1.               过程

5.               分析日志过程

5.1.               测试数据准备

5.2.               使用 LogMiner 进行分析

5.3.               观察分析的结果

5.4.               调用停止分析的存储过程              

6.               CDC 工具中的使用

6.1.               LogMiner 是在 CDC 中的运用模块 ( 生产引擎 )

6.2.               如何确定挖掘的区间

6.3.               挖掘结果查询如何过滤

6.4.               MQ 发送的消息的消息内容是什么

 

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)
DDL(5)
操作码

  • 0 = INTERNAL
  • 1 = INSERT
  • 2 = DELETE
  • 3 = UPDATE
  • 5 = DDL
  • 6 = START
  • 7 = COMMIT
  • 9 = SELECT_LOB_LOCATOR
  • 10 = LOB_WRITE
  • 11 = LOB_TRIM
  • 25 = SELECT_FOR_UPDATE
  • 28 = LOB_ERASE
  • 34 = MISSING_SCN
  • 36 = ROLLBACK
  • 255 = UNSUPPORTED

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)
LogMiner介绍及在CDC中的应用.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)