oracele19c 配置logmeiner


 前提 oracle19c 安装完成

1、oracle开启数据库归档

连接sqlplus

sqlplus / as sysdba

查看是否开启

SQL> archive log list
Database log mode               No Archive Mode
Automatic archival               Disabled
Archive destination               USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     12
Current log sequence               14

如果Automatic archival是Disabled 则需要修改

SQL> shutdown immediate (立即关闭数据库)
SQL> startup mount (启动实例并加载数据库,但不打开)
SQL> alter database archivelog; (更改数据库为归档模式)
SQL> alter database open; (打开数据库)
SQL> alter system archive log start; (启用自动归档)

再执行一下 archive log list

SQL> archive log list
Database log mode               Archive Mode
Automatic archival               Enabled
Archive destination               USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     12
Next log sequence to archive   14
Current log sequence               14

2、执行脚本

SQL>@/opt/oracle/product/19c/dbhome_1/rdbms/admin/dbmslm.sql
SQL>@/opt/oracle/product/19c/dbhome_1/rdbms/admin/dbmslmd.sql

如果dbmslm.sql和dbmslmd.sql不存在次路径,find /  -name *dbmslm.sql*

 3、Logminer需要开启全字段日志补全功能(suppplemental logging,表级/列级),能够补全数据库日志信息,保证传递信息的全面性。(此操作会增加Oracle数据库的日志量)

SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(ALL,PRIMARY KEY,UNIQUE) COLUMNS;
SQL>SELECT supplemental_log_data_min min, supplemental_log_data_pk pk, supplemental_log_data_ui ui, supplemental_log_data_fk fk, supplemental_log_data_all allc FROM v$database;

 当看到如上图所示内容时,表示已经成功。

4、存在影响

4.1、对Oracle执行用户的权限依赖较高,官方推荐使用sys用户;

4.2、较为依赖归档日志,启用归档日志和加强日志类型后,Oracle会产生大于非归档模式下数倍的日志量,对存储空间的使用较多。但如果不使用归档日志则只能使用联机日志文件,当联机日志文件轮询较快时容易发生数据覆盖,导致数据丢失,另外过于频繁的联机日志文件的轮询会产生Oracle数据库log file sync事件,从而影响数据库服务器的IO,当应用调用Logmnr工具使用联机日志文件时还易引发服务器网络性能下降;

4.3、较为依赖固定的数据字典信息,使用Logmnr适用于数据字典变化较少的情形下,当Oracle数据字典发生改变则需要重新执行Logmnr配置流程。

5、测试logminer

5.1在登陆用户条件下输入

select name from V$ARCHIVED_LOG;

 5.2  选择一个archive log file作为logmnr测试分析使用

复制archive log file路径

execute sys.dbms_logmnr.add_logfile(logfilename=>'/opt/oracle/archiveARC0000000006_1094815767.0001',options=>dbms_logmnr.new);

 输入

execute sys.dbms_logmnr.start_logmnr(Options => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG)

 解析日志记录条数

select count(*) from v$logmnr_contents;

--加载日志文件
begin sys.dbms_logmnr.add_logfile(logfilename=>'/opt/oracle/archiveARC0000000007_1094815767.0001',options=>dbms_logmnr.new); end;

--开启logminer
BEGIN sys.dbms_logmnr.start_logmnr(options =>
SYS.DBMS_LOGMNR.skip_corruption +
SYS.DBMS_LOGMNR.no_sql_delimiter +
SYS.DBMS_LOGMNR.no_rowid_in_stmt +
SYS.DBMS_LOGMNR.dict_from_online_catalog);
END;

--开始读取数据
select
 scn,
 timestamp,
 operation,
 seg_owner,
 table_name,
 sql_redo,
 row_id,
 csf
from v$logmnr_contents where operation='INSERT' AND TABLE_NAME='TEST';

 create table TEST
(
  id              VARCHAR2(36) not null,
  name            VARCHAR2(50) not null
);

insert into TEST(id,name) values('3','zhangsan2');
commit;

原文链接:https://www.kancloud.cn/datapipeline-group/v2_7_0/1475268