oracle (9I/10G/11G)数据库日志挖掘(审计误操作)
文档结构:
资料来自官方网站:
https://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL019
来自论坛:
https://blog.csdn.net/yes_is_ok/article/details/79296614
来自朋友网站:
https://www.cnblogs.com/sky2088/p/9273351.html
Oracle 9i后可以分析DDL语句,另外还可分析得到一些必要的回滚SQL语句。LogMiner一个最重要的用途就是不用全部恢复数据库就可以恢复数据库的某个变化。该工具特别适用于调试、审计或者回退某个特定的事务。
LogMiner工具既可以用来分析在线日志,也可以用来分析离线日志文件,既可以分析本身自己数据库的重作日志文件,也可以用来分析其它数据库的重作日志文件。当分析其它数据库的重作日志文件时,需要注意的是,LogMiner必须使用被分析数据库实例产生的字典文件,而不是安装LogMiner的数据库产生的字典文件,另外,必须保证安装LogMiner数据库的字符集和被分析数据库的字符集相同。源数据库(Source Database)平台必须和分析数据库(Mining Database)平台一样。
一、安装LogMiner工具
在默认情况下,Oracle已经安装了LogMiner工具。若是没有安装,则可以运行下面两个脚本:
SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
SQL>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
这两个脚本必须均以SYS用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。若要使普通用户具有日志挖掘的权限,则可以执行如下的SQL进行赋权:
GRANT EXECUTE ON DBMS_LOGMNR TO username;
脚本执行完毕后,LogMiner包含两个PL/SQL包和几个视图:
1.1. DBMS_LOGMNR_D包
包括一个用于提取数据字典信息的过程,即DBMS_LOGMNR_D.BUILD()过程,还包含一个重建LogMiner表的过程,DBMS_LOGMNR_D.SET_TABLESPACE。在默认情况下,LogMiner的表是建在SYSTEM表空间下的。
1.2. DBMS_LOGMNR包,它有3个存储过程
ADD_LOGFILE(NAME VARCHAR2,OPTIONS NUMBER) 用来添加或删除用于分析的日志文件
START_LOGMNR(START_SCN NUMBER,END_SCN NUMBER,START_TIME NUMBER,END_TIME NUMBER,DICTFILENAME VARCHAR2,OPTIONS NUMBER) 用来开启日志分析,同时确定分析的时间或SCN窗口以及确认是否使用提取出来的数据字典信息
END_LOGMNR()存储过程用来终止分析会话,它将回收LogMiner所占用的内存
与LogMiner相关的数据字典视图:
V$LOGHIST:显示历史日志文件的一些信息
V$LOGMNR_DICTIONARY:因为LOGMINER可以有多个字典文件,所以该视图显示字典文件信息
V$LOGMNR_PARAMETERS:显示LOGMINER的参数
V$LOGMNR_LOGS:显示用于分析的日志列表信息
V$LOGMNR_CONTENTS:LOGMINER结果
二、LogMiner的数据字典
为了完全地转换Redo Log中的内容,LogMiner需要访问一个数据库字典。LogMiner使用该字典将Oracle内部的对象标识符和数据类型转换为对象名称和外部的数据格式。没有字典,LogMiner将使用16进制字符显示内部对象ID。
LogMiner提供了3种提取字典文件的方式:
① 将字典文件提取为一个Flat File(平面文件或中间接口文件)
② 将字典文件提取为Redo Log
③ 使用Online Catalog(联机日志)
下面分别介绍这3种方式:
2.1. 将字典文件提取为一个Flat File
(平面文件或中间接口文件)
为了将数据库字典信息提取为Flat File,需要使用带有STORE_IN_FLAT_FILE参数的DBMS_LOGMNR_D.BUILD程序。DBMS_LOGMNR_D.BUILD程序需要访问一个能够放置字典文件的目录。因为PL/SQL 程序通常不能直接访问用户目录,必须手动指定一个由DBMS_LOGMNR_D.BUILD程序使用的目录。为了指定该目录,必须修改初始化文件中的UTL_FILE_DIR参数:
ALTER SYSTEM SET UTL_FILE_DIR ='/home/oracle' SCOPE=SPFILE;
然后重新启动数据库。确保在创建Flat File文件的过程中,不能有DDL操作被执行。在创建Flat File文件时,数据库必须处于OPEN状态,然后执行DMBS_LOGMNR_D.BUILD程序:
EXECUTE DBMS_LOGMNR_D.BUILD('dictionary.ora', '/home/oracle');
脚本执行完成后会在/home/oracle下生成一个dictionary.ora的文本文件。该文件中包含一系列的建表语句和插入语句。
2.2. 将字典文件提取为Redo Log
为了将字典文件提取为Redo日志,数据库必须处于OPEN状态,并且处于归档模式。将字典提取为Redo日志的过程中,数据库系统不能有DDL语句被执行。为了将字典提取为Redo日志,需要使用带有STORE_IN_REDO_FILES参数的DBMS_LOGMNR_D.BUILD程序:
SQL> EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=>DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
需要注意的是,将字典文件提取为Redo文件的时候需要开启附加日志,如下所示:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
在这些Redo日志被归档之后,可以通过查询V$ARCHIVED_LOG视图来查询:
SELECT *
FROM V$ARCHIVED_LOG A
WHERE A.NAME IS NOT NULL
AND (A.DICTIONARY_BEGIN = 'YES' OR A.DICTIONARY_END = 'YES');
如果将字典信息提取为Redo文件,那么在使用DBMD_LOGMNR.ADD_LOGFILE指定所需要分析的日志文件时,需要将这些包含字典信息的Redo文件也添加进去。同时在使用START_LOGMNR开始分析时,需要指定DICT_FROM_REDO_LOGS的参数。
2.3. 使用Online Catalog(联机日志)
为了使LogMiner直接使用数据库当前使用的字典,在开始LogMiner时可以指定将联机目录作为字典源:
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
使用联机目录,意味着不需要再提取字典文件,是开始分析日志的最快的方式。除了可以分析联机Redo日志外,还可以在和产生归档日志文件相同的系统上分析归档日志文件。然而,记住联机目录只能重建应用于表的最新版本上的SQL语句。一旦表被修改,联机目录就无法反映出表之前的版本。这就意味着LogMiner不能重建执行于表的旧版本上的SQL语句。
三、本次日志挖掘误操作
由于本次是oracle9I数据库,采用的是2.1将字典文件提取为一个Flat File这种办法,其他两种貌似行不通;挖掘是基于会话的,如果直接退出,就停止了挖掘,以下操作要在一个会话中进行,如果会话被异常退出,需要重新抽取字典到平面文件中以及以后的步骤。
注意:注意此种方法要事先设置好UTL_FILE_DIR,否则要设置了进行数据库重启,生产上要慎重。
3.1. 开启附加日志
SELECT SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;
如果没有最小附加日志,开启如下:
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
3.2. 指定归档日志挖掘路径
SELECT NAME FROM V$ARCHIVED_LOG WHERE FIRST_TIME between to_date('2018-12-03 9:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2018-12-03 17:00:00','yyyy-mm-dd hh24:mi:ss') order by 1;
3.3. 指定Logminer字典
Oracle 11g 指定Logminer字典有三种方法
1.Using the Online Catalog 使用在线目录
2.Extracting a LogMiner Dictionary to the Redo Log Files 抽取字典到redo日志文件中
3.Extracting the LogMiner Dictionary to a Flat File 抽取字典到平面文件中(需要设置UTL_FILE_DIR参数,本次之前已经设置好)
9I建议使用第三种,9I+版本建议使用前面两种方法。
EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
OR
EXECUTE DBMS_LOGMNR_D.BUILD( OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
OR
EXECUTE DBMS_LOGMNR_D.BUILD('dictionary.ora', ' /oracle/utl', DBMS_LOGMNR_D.STORE_IN_FLAT_FILE); --本次用的这种方法
3.4. Logminer中添加归档日志文件
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/oracle/odbbak1/arch/1_24988.dbf', OPTIONS => DBMS_LOGMNR.ADDFILE);
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/oracle/odbbak1/arch/1_24989.dbf', OPTIONS => DBMS_LOGMNR.ADDFILE);
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/oracle/odbbak1/arch/1_24990.dbf', OPTIONS => DBMS_LOGMNR.ADDFILE);
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/oracle/odbbak1/arch/1_24991.dbf', OPTIONS => DBMS_LOGMNR.ADDFILE);
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/oracle/odbbak1/arch/1_24992.dbf', OPTIONS => DBMS_LOGMNR.ADDFILE);
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( LOGFILENAME => '/oracle/odbbak1/arch/1_24993.dbf', OPTIONS => DBMS_LOGMNR.ADDFILE);
select filename from V$LOGMNR_LOGS;
3.5. 开始日志挖掘
前面两种对应的是如下语句(11g用的1,2两种方法,本次第三句)
EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
OR
EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_REDO_LOGS );
OR
EXECUTE DBMS_LOGMNR.START_LOGMNR(DICTFILENAME =>'/oracle/utl/dictionary.ora');
3.6. 查看挖掘生成的语句
SELECT username AS USR, (XIDUSN || '.' || XIDSLT || '.' || XIDSQN) AS XID,
SQL_REDO, SQL_UNDO FROM V$LOGMNR_CONTENTS WHERE username IN ('SMART') where rownum <=2;
把整个挖掘结果存进一张表,方便查询
create table logtab as select * from v$logmnr_contents;
select *
from sys.logtab
where username = 'SMART'
AND lower(SQL_REDO) LIKE '%s_sms_template_db%'
经排查,是业务人员在14:38进行表的删除和重建,并且机器名为MD177
3.7. 结束日志挖掘
EXECUTE DBMS_LOGMNR.END_LOGMNR(); --此句是基于会话的,如果直接退出,就停止了挖掘。
ALTER DATABASE drop SUPPLEMENTAL LOG DATA;
oracle (9I/10G/11G)数据库日志挖掘(审计误操作)的更多相关文章
- Oracle 9i 10g 11g 区别的转载
下面看看9i.10g.11g版本的区别 Oracle 10g比9i多的新特性? 1. 10g支持网格计算,即多台结点服务器利用高速网络组成一个虚拟的高性能服务器,负载在整个 网格中衡(L ...
- oracle 9i/10g/11g(11.2.0.3)安装包和PATCH下载地址汇总
今天上PUB看见一位热心人汇总了这么个地址列表,转发来空间: 把下面的地址复制到讯雷里就可以下载. -------------------------------------------------- ...
- Oracle 9i,10g,11g各自alert日志的位置
10g&9i的alert日志: 进入oracle:[zhangshengdong@oralocal1 ~]$ sudo su - oracle[oracle@oralocal1 ~]$ sql ...
- Horizontal Toolbar With Navigational Buttons Form Sample For Oracle Forms 10g/11g
Sharing an Oracle Form Htoolbar.fmb for Oracle Forms 10g/11g containing Horizontal Toolbar canvas an ...
- Calling / Running a report in Oracle forms 10g / 11g
Calling / Running a report in Oracle forms 10g / 11g Below is the procedure to call a report in Orac ...
- 使用Oracle 9i工具管理数据库 - 初学者系列 - 学习者系列文章
前面介绍了Oracle 9i的安装,本文大概介绍下Oracle 9i提供的管理工具的使用. 1 打开数据库配置工具 2 下一步 3 下一步 4 下一步.这里输入数据库名和SID 5 下一步 6 下一步 ...
- 【Oracle】10g 11g下载路径
现在直接点击不能下载了 要经过oracle许可才可以下载 如果嫌麻烦可以用迅雷直接下载密码是这个 一般不会动了 大家也不用帮我找回密码了 每次都改 也很麻烦的用迅雷下就不用密码了 下载也不会卡到最后 ...
- Oracle 9i & 10g编程艺术-深入数据库体系结构-学习笔记(持续更新中)
--20170322 --1.0 --更新表的统计信息begin dbms_stats.set_table_stats(user,'EMP',numrows => 10000);end; beg ...
- oracle database 9i/10g/11g 编程艺术 源代码下载
背景 在找这本书的源码,搜到提供的都是需要C币下载的.比较固执(其实是穷). 在这本书的前言中提到源代码可以在 www.appress.com 上下载. 下面是该书在该网站上的链接: https:// ...
随机推荐
- tp5数据库操作 模型层
一.数据模型作用 相同功能代码不用重复写多次 二.创建方式 在模块下建立model文件夹,php文件,文件名为数据库表名,其中类为数据库表名,继承Model类,模型层即为此表 namespace ap ...
- hdu 2444 The Accomodation of Students 判断是否构成二分图 + 最大匹配
此题就是求最大匹配.不过需要判断是否构成二分图.判断的方法是人选一点标记为红色(0),与它相邻的点标记为黑色(1),产生矛盾就无法构成二分图.声明一个vis[],初始化为-1.通过深搜,相邻的点不满足 ...
- linq.sort
reflections.Sort(delegate(ReflectionEntity a, ReflectionEntity b) { if (a.CreatedTime < b.Created ...
- Eclipse中Git的基本使用
以下所有命令如没有特殊说明,均在命令行中完成(cmd窗口) 1.全局设定(需要告诉git自己是谁) git config --global user.name "你的名字或昵称&quo ...
- Oracle 11g XE 与 Oracle SQL Developer 的配置与使用(重制版)
Oracle 11g XE 与 Oracle SQL Developer 的配置与使用(重制版) 前提概要 项目上需求要适应Oracle数据库,当然这和某EF框架也有关. 因为Oracle 的表名和列 ...
- Multitier architecture-n-tier architecture
In software engineering, multitier architecture (often referred to as n-tier architecture) or multil ...
- linux VFS 之一 :虚拟文件系统的面向对象设计思想
VFS的面向对象的思想,如下图: VFS在上层用户空间的进程与底层特定文件系统之间起到一个承上启下的作用, 对上:封装标准的系统调用接口给用户空间app,user space app不必关心特定文件系 ...
- CorelDRAW三十周年庆典暨2019新耀发布会,诚邀您的莅临!
30年时光荏苒!眨眼风惊雨过. 在1989年的春天,CorelDRAW 1.0正式发布,一经面世就掀起了图形设计行业革命浪潮,这个图形工具不仅给设计师提供了矢量图像.页面设计,更能应用于网站制作.位图 ...
- linux下载命令wget
Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到 本地服务器.如果我们使用虚拟主机,处理这样 ...
- [tyvj-1391]走廊泼水节 最小生成树
做克鲁斯卡尔的时候维护一个并查集即可. #include <iostream> #include <cstdio> #include <cstring> #incl ...