logminer(基于redo log来存储数据字典)-归档日志+安装部署

环境:

OS:Centos 7

DB:2节点RAC 11.2.0.4

 

 

logmnr 可以用来分析redo 日志和归档文件。将redo日志或者归档文件中的内容提取出来,供DBA进行操作分析历史操作,
比如进行误删除操作的恢复。 LOGMNR 分析日志,需要创建一个数据字典,这个数据字典可以存储在外部文件(external file) 或者redo log 中。 如果要存储在外部文件中,数据库参数utl_file_dir 需要配置,并重启数据库。
有些时候,我们的生产系统不能重启,因此只能选用redo log来存储数据字典,下面的例子是基于redo log来存储数据字典的方法的:

1.redo log 存储数据字典
使用redo log 存储数据字典不需要重启数据库,也不需要配置任何参数,这种方式比较灵活.直接可以创建数据字典到redo文件

复制代码
declare
begin
dbms_logmnr_d.build(options => dbms_logmnr_d.STORE_IN_REDO_LOGS);
end;

SQL> execute dbms_logmnr_d.build(options => dbms_logmnr_d.STORE_IN_REDO_LOGS);
BEGIN dbms_logmnr_d.build(options => dbms_logmnr_d.STORE_IN_REDO_LOGS); END;

*
ERROR at line 1:
ORA-01354: Supplemental log data must be added to run this command
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 6110
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 6208
ORA-06512: at "SYS.DBMS_LOGMNR_D", line 12
ORA-06512: at line 1
复制代码

 



解决办法:
需要开启附加日志
alter database add supplemental log data;

2.添加需要分析的文件

复制代码
declare
begin
dbms_logmnr.add_logfile('+DATA/slnngk/archivelog/2021_10_09/thread_1_seq_101.443.1085454503',dbms_logmnr.new);
end;

declare
begin
dbms_logmnr.add_logfile('+DATA/slnngk/archivelog/2021_10_09/thread_1_seq_102.444.1085454505',dbms_logmnr.addfile);
end;
复制代码

 



报错误:
SQL> execute dbms_logmnr.ADDFILE('+DATA/slnngk/archivelog/2021_10_08/thread_1_seq_88.424.1085435681',dbms_logmnr.new);
BEGIN dbms_logmnr.ADDFILE('+DATA/slnngk/archivelog/2021_10_08/thread_1_seq_88.424.1085435681',dbms_logmnr.new); END;

      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00221: 'ADDFILE' is not a procedure or is undefined
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

解决办法,安装相应的包(在其中一个节点上执行,我这里是在节点1上执行):
SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
SQL>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql

函数说明
dbms_logmnr.new       在数据字典中添加第一个需要分析的文件
dbms_logmnr.addfile 在数据字典中添加其他需要分析的文件

4.开始分析文件
我们使用不同的方式存储数据字典,让oracle开始分析文件的命令参数不一样。
如果是外部文件方式存储数据字典,是不需要使用任何参数的,如果使用的是redo日志文件,
需要明确告知Oracle 数据字典存储在redo文件中.

declare
begin
dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog+dbms_logmnr.committed_data_only);
end;

 

不使用options,可以分析其他库的日志

declare
begin
dbms_logmnr.start_logmnr();
end;

 

否则报如下的错误

 



5.开始分析内容
经过上一步分析后,日志中的内容,可以在视图v$logmnr_contents中查询到.

select * from v$logmnr_contents where sql_redo like '%drop%'

 



6.结束日志分析

declare
begin
dbms_logmnr.end_logmnr;
end;

 

logmnr 挖掘日志,是会话级别的操作。分析数据不在数据库级别共享

 

 

也可以分析其他库的日志

 

复制代码
1.使用redo_log作为数据字典
declare
begin
dbms_logmnr_d.build(options => dbms_logmnr_d.STORE_IN_REDO_LOGS);
end;

2.添加其他的库的日志
declare
begin
dbms_logmnr.add_logfile('/tmp/redo03.log',dbms_logmnr.new); ##其他库的日志文件
end;

3.分析
declare
begin
dbms_logmnr.start_logmnr(options => 0);
end;

4.查看分析日志
select sql_redo from v$logmnr_contents 
where lower(sql_redo) like '%tb_test%' or lower(sql_redo) like '%200454%';
只能获取到可识别的ddl语句,dml语句因为没有映射关系,分析结果不可读

5.结束分析
declare
begin
dbms_logmnr.end_logmnr;
end;
复制代码

 

posted @   slnngk  阅读(738)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-10-09 python3安装沙盒环境
2019-10-09 ogg从库进程监控
点击右上角即可分享
微信分享提示