oracle 9I/10G/11G数据库日志挖掘审计误操作

文档结构:

资料来自官方网站:

来自论坛:

来自朋友网站:

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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读773次,点赞6次,收藏9次。【代码】c# json字符串转Oracle的insert into的小程序。
文章浏览阅读8.7k次,点赞2次,收藏17次。此现象一般定位到远端的监听服务来找问题,在远端查看监听服务状态(具体看下面的解决方案会详细呈现),服务是否开启,另外查看监听端点概要是否存在host未指向到计算名的,如无直接进入监听配置文件listener.ora内添加指向即可。2、查看监听服务状态 lsnrctl status,右边为远端端点状态,未添加host指向到计算名;1、本地及远端安装好Oracle并配置好连接,Oracle服务和监听已启动;1、远程Oracle数据库:Oracle11g R2。或者进入下述服务手动重启。,再进行远程连接即可。_ora-12541:tns:无监听程序
文章浏览阅读2.8k次。mysql脚本转化为oracle脚本_mysql建表语句转oracle
文章浏览阅读2.2k次。cx_Oracle报错:cx_Oracle DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library_cx_oracle.databaseerror: dpi-1047: cannot locate a 64-bit oracle client libr
文章浏览阅读1.1k次,点赞38次,收藏35次。本文深入探讨了Oracle数据库的核心要素,包括体系结构、存储结构以及各类参数。通过解析Oracle数据库的体系结构,读者可以深入了解其内部组成和工作原理。存储结构部分介绍了数据在Oracle中的存储方式,从表空间到数据文件的层层逻辑。最后,我们深入探讨了Oracle数据库中各类参数的作用和配置方法,帮助读者更好地理解和优化数据库性能。本文旨在帮助读者全面理解Oracle数据库的运作机制,为其在实践中的应用提供基础和指导。
文章浏览阅读1.5k次。默认自动收集统计信息的时间为晚上10点(周一到周五,4个小时),早上6点(周六,周日,20个小时)由于平时默认每天只收集4小时,时间有点短了,改成每天可收集8小时。oracle 18c中默认是打开的。查看当前自动收集统计信息的时间。_oracle自动收集统计信息
文章浏览阅读929次,点赞18次,收藏20次。只有assm(Automatic Shared Memory Management)模式可以使用大页,需要关闭amm(Memory Manager Process)HugePages_Free: 306 (空闲306页,已使用306-306=0页)防止oracle使用的内存交换,所以设置的大小与oracle配置的sga、pga相关。HugePages_Rsvd: 0 (操作系统承诺给oracle预留的页数)HugePages_Total: 306 (总共306页)_oracle11g 大页
文章浏览阅读801次。例如:10046:0,1,4,8,12。默认redo日志有三个,大小为50M,循环覆盖使用。redo log再覆盖之前,会被归档,形成归档日志。答:不同事件,不同级别。trace的不同级别?_oracle 日志
文章浏览阅读4.2k次,点赞84次,收藏77次。主要讲解MySQL中SQL的DDL语句,其中包括对数据库和表的一系列操作。_sql ddl 新增字段 mysql
文章浏览阅读1.1k次。ON DEMAND:仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;ON COMMIT:一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。Method =>'C',物化视图有三种刷新方式:COMPLETE、FAST和FORCE。物化视图会占用空间,一半可用于大量数据查询时,减缓主表的查询压力使用。例如创建一个物化视图,让对接单位查询。_oracle物化视图定时刷新
文章浏览阅读713次,点赞21次,收藏18次。1.背景介绍在当今的大数据时代,数据量越来越大,传统的关系型数据库已经无法满足业务需求。因此,NoSQL数据库技术迅速崛起,成为企业和开发者的首选。Oracle NoSQL Database是Oracle公司推出的一款分布式NoSQL数据库产品,具有高性能、高可用性和易于扩展等特点。在本文中,我们将深入了解Oracle NoSQL Database的集成与开发者工具,帮助您更好地掌握这款产品的...
文章浏览阅读2.5k次,点赞2次,收藏4次。今天遇见一个问题需要将字段中包含中文字符串的筛选出来。_oracle查询包含中文字符
文章浏览阅读802次。arcmap 在oracle删除表重新创建提示表名存在解决放啊
文章浏览阅读4.3k次,点赞2次,收藏4次。Oracle连接数据库提示 ORA-12638:身份证明检索失败_ora-12638
文章浏览阅读3.4k次,点赞6次,收藏25次。etc/profile是一个全局配置文件,所有用户登录都会使用该文件构建用户环境。与windows配置环境变量是一个道理。选择Linux系统,找到适合自己系统的安装包,我的是CentOS 8 x64。接下来需要登陆Oracle账户才能下载,无账户的可以自己注册一个。Linux中export 命令用于设置或显示环境变量。模式,利用上下键到文档最后,添加以下代码。出现如图所示版本号字样,则说明安装成功。点击下载,勾选1,点击2。记住完整路径用于后面配置。找到Java并点击进去。往下翻,找到Java8。_linux安装jdk1.8
文章浏览阅读2.4w次,点赞26次,收藏109次。JDK 是的简称,也就是 Java 开发工具包。JDK 是整个 Java 的核心,其中JDK包含了 Java 运行环境(Java Runtime Envirnment,简称 JRE),Java 工具(比如 javac、java、javap 等等),以及 Java 基础类库(比如 rt.jar)。最主流的 JDK 是Oracle公司发布的 JDK,除了 Oracle JDK(商业化,更稳定)之外,还有很多公司和组织开发了属于自己的 JDK,比较有名的有IBM JDK(更适合 IBM) 和OpenJDK。_jdk安装教程
文章浏览阅读7.5w次。出现 “java.sql.SQLNonTransientConnectionException:Could not create connection to database server” 的错误通常是由于无法连接到数据库服务器引起的。_java.sql.sqlnontransientconnectionexception: could not create connection to
文章浏览阅读849次,点赞7次,收藏10次。在ClickHouse中创建用户、数据库并进行权限分配是一个重要的管理任务,它涉及到安全性和访问控制。下面是一个基本的指南来帮助你完成这些操作:1. 创建数据库首先,需要创建一个数据库。使用以下命令:CREATE DATABASE IF NOT EXISTS your_database_name;将 your_database_name 替换为你想要的数据库名。2. 创建用户接下来,创建一个新用户。使用以下命令:CREATE USER your_username IDENTIFIED WIT_在clickhouse中如何创建用户 赋权
文章浏览阅读1.2k次,点赞53次,收藏39次。本文是一篇关于Oracle数据库安装和使用的博文摘要。作者以轻松幽默的笔调介绍了自己在实验中掌握的Oracle数据库基本操作,包括使用组件查看命令、配置数据库监听器等。作者也分享了在实验中遇到的一些有趣问题,如SQL语句缺少分号导致的意外错误。此外,作者还强调了登录sys用户和启动实例加载数据库的注意事项,并鼓励读者面对挑战时保持乐观,不断提升自己的能力。整体风格风趣严谨,引人入胜。
文章浏览阅读820次,点赞17次,收藏16次。KingbaseES、xml、dbms_xmlgen、SETSKIPROWS、人大金仓、KingbaseES兼容Oracle包dbms_xmlgen的功能是通过SQL查询将关系表中数据转化为XML文档。转化方式一共有两种:(1)通过查询字符串直接转化。(2)通过上下文句柄转化。对于通过查询字符串直接转化的方式,无法跳过若干行进行查询,只能直接将表格中的所有数据转化为XML文档。