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;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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从库进程监控