DG的备库使用LogMiner日志挖掘之静态文件

2024年 1月 16日 65.6k 0

DG的备库使用LogMiner日志挖掘之静态文件

当LogMiner需要挖掘归档redo数据时,需要一个字典来将对象id转换为对象名称。在这里,Logminer提供三个字典选项

1、使用online catalog

2、提取logminer字典信息到redo log file文件中

3、提取logminer字典信息到静态文件(flat file),在19c版本官网文档有详细描述如何使用,但是在21c开始已经不支持该功能。

下面的案例将以提取logminer字典信息到静态文件为例,展示logMiner如何操作。

查看当前的归档模式

由于当前环境使用的dg库,所以主备库的归档模式已经开启。

SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /data3/data
Oldest online log sequence 6003
Next log sequence to archive 6005
Current log sequence 6005

创建存放字典文件目录

--查询当前库的字典目录是否创建
SELECT * FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME ='DICT_DIR';
--如果没有创建则执行如下命令
mkdir -p /data3/dictdata
chown -R oracle:dba /data3/dictdata
CREATE directory dict_dir AS '/data3/dictdata';

确认开启数据库的附加日志

--查询结果为YES,则表示已经开启
SELECT supplemental_log_data_min FROM v$database;
SUPPLEME
--------
YES

如果查询结果显示为NO,则执行如下命令

alter database add supplemental log data;

开启待同步表的日志补充

--开启待同步表的日志补充,需针对每一张表进行设置,如果不做该设置,对于挖掘的数据可能有误。
ALTER TABLE TEST.T2 ADD SUPPLEMENTAL LOG DATA(ALL,PRIMARY KEY,UNIQUE,FOREIGN KEY) COLUMNS;

更新数据,验证挖掘的数据

UPDATE TEST.T2 SET NAME = 'lier' WHERE PID = 25421;

挖掘LogMiner字典信息到文件

--DICT_DIR在第一步创建
EXECUTE dbms_logmnr_d.build(dictionary_location=>'DICT_DIR', -
dictionary_filename=>'dictionary.ora',OPTIONS=>dbms_logmnr_d.store_in_flat_file);

添加要分析的日志文件

--查询最新的归档日志文件名称
SELECT SEQUENCE#, name,first_time,next_time FROM v$archived_log WHERE FIRST_time >= to_date('2024-01-16 14:00:00','yyyy-mm-dd hh24:mi:ss') ORDER BY FIRST_time DESC;

--添加归档日志文件
EXECUTE dbms_logmnr.add_logfile(logfilename=>'/data3/oracle/archdata/archivelog/1_6004_1045340148.dbf',OPTIONS=>dbms_logmnr.NEW);

启动logminer

EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'/data3/dictdata/dictionary.ora', OPTIONS=>dbms_logmnr.no_rowid_in_stmt);

查询挖掘的日志信息

SELECT xidusn|| '.'||xidslt||'.'||xidsqn AS xid,username,sql_redo FROM v$logmnr_contents WHERE seg_owner IN ('TEST') and username!='SYS';

查询结果信息展示

SQL> SELECT xidusn|| '.'||xidslt||'.'||xidsqn AS xid,username,sql_redo FROM v$logmnr_contents WHERE seg_owner IN ('TEST') and username!='SYS';

XID
--------------------------------------------------------------------------------
USERNAME
--------------------------------------------------------------------------------
SQL_REDO
--------------------------------------------------------------------------------
18.0.209830
HXBTEST
update "TEST"."T2" set "NAME" = 'lier' where "PID" = '25421' and "NAME" = 'sunla
oshi';

结束日志挖掘

EXECUTE dbms_logmnr.END_LOGMNR();

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论