解析Oracle 10g中的Logmnr使用一例
很多时候我们在Oracle中执行操作时,需要对Oracle执行的DDL语句或者DML语句的操作过程做出一些分析;或者当某一个用户误删除了一张表或者误删除了一些数据时,DBA需要在事后找回误操作的数据,这时,可以通过对操作日志的分析,从而找到数据库中发生的一些变化。分析日志的工具就是Oracle所提供的Logmnr工具。
在Oracle9i中,Logmnr工具是DBA用来找回被删除数据的好办法,利用Logmnr可以完成以下的任务:
1、 查明数据库的变更记录,或者是进行变化分析,如有的用户怀疑自己的应用有什么问题,产生了大量的失误,可以用Logmnr来分析这些事务,看看到底发生了些什么事情。
2、 查明并更正用户的误操作,如有的用户一不小心误删除了某个表,但是并不承认,这个时候就可以利用Logmnr来分析是谁执行的DML或者是DDL操作。
3、 找回丢失的数据,当不能使用flashback或者使用flashback受到限制的时候,可以考虑使用Logmnr工具来找回数据,这个时候,只需要有归档日志即可。
Logmnr工具包含的内容与数据字典
dbms_logmnr_d包:用于提取字典信息到外部文件或者是联机日志中去。
dbms_logmnr包:包含三个过程:
(1) add_logfile:用来添加/删除用于分析的日志文件。
(2) start_logmnr:用来开启日志分析,而且在9i/10g中,可以开启很多不同的分析选项。
(3) end_logmnr:用来终止分析会话,它将回收LogMiner所占用的内存。
如果普通用户想使用以上的包,必须现在sys中授权才可以使用,如:
sys用户执行授权:
SQL> grant execute on dbms_logmnr to scott;
与LogMiner相关的数据字典如下:
u v$logmnr_dictionary:LogMiner可能使用的数据字典信息
u v$logmnr_parameters:当前LogMiner所设定的参数信息
u v$logmnr_logs:当前用于分析的日志列表
u v$logmnr_contents:日志分析结果
Logmnr分析过程演示
创建一张表,然后插入一些数据,再删除这些数据。
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> alter system archive log current;
系统已更改。
SQL> create table mytesttab as select * from scott.dept;
表已创建。
SQL> insert into mytesttab values(80,''IT'',''WA'');
已创建 1 行。
SQL> insert into mytesttab values(90,''MGR'',''YR'');
已创建 1 行。
SQL> commit;
提交完成。
SQL> delete from mytesttab;
已删除6行。
SQL> commit;
提交完成。
SQL> alter system archive log current;
系统已更改。
然后找出操作过程记录的日志文件
D:\oracle\flash_recovery_area\MYORACLE\ARCHIVELOG\2007_08_11目录下的
O1_MF_1_4_3CVHLKJM_.ARC
文件,我们需要对这个文件进行分析处理。
SQL> exec sys.dbms_logmnr.add_logfile(LogFileName=>''D:\oracle\flash_recovery_area\MYORACLE\ARCHIVELO
G\2007_08_11\O1_MF_1_4_3CVHLKJM_.ARC'',options=>dbms_logmnr.new);
PL/SQL 过程已成功完成。
SQL> exec sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.dict_from_online_catalog);
PL/SQL 过程已成功完成。
OK,分析完成。
查看日志记录的内容
SQL> select t.scn,t.timestamp,t.seg_owner,t.operation
2 from v$logmnr_contents t where t.seg_name=''MYTESTTAB'';
SCN TIMESTAMP SEG_OWNE OPERATION
---------- -------------- -------- ----------
5483840 11-8月 -07 SYS DDL
5483863 11-8月 -07 SYS INSERT
5483874 11-8月 -07 SYS INSERT
5483885 11-8月 -07 SYS DELETE
5483885 11-8月 -07 SYS DELETE
5483885 11-8月 -07 SYS DELETE
5483885 11-8月 -07 SYS DELETE
5483886 11-8月 -07 SYS DELETE
5483886 11-8月 -07 SYS DELETE
已选择9行。
SQL> select t.SQL_REDO from v$logmnr_contents t where t.seg_name=''MYTESTTAB'';
SQL_REDO
----------------------------------------------------------------------------------------------------
create table mytesttab as select * from scott.dept;
insert into "SYS"."MYTESTTAB"("DEPTNO","DNAME","LOC") values (''80'',''IT'',''WA'');
insert into "SYS"."MYTESTTAB"("DEPTNO","DNAME","LOC") values (''90'',''MGR'',''YR'');
delete from "SYS"."MYTESTTAB" where "DEPTNO" = ''10'' and "DNAME" = ''ACCOUNTING'' and "LOC" = ''NEW
YORK
delete from "SYS"."MYTESTTAB" where "DEPTNO" = ''20'' and "DNAME" = ''RESEARCH'' and "LOC" = ''DALLAS'' an
delete from "SYS"."MYTESTTAB" where "DEPTNO" = ''30'' and "DNAME" = ''SALES'' and "LOC" = ''CHICAGO'' and
delete from "SYS"."MYTESTTAB" where "DEPTNO" = ''40'' and "DNAME" = ''OPERATIONS'' and "LOC" = ''BOSTON''
delete from "SYS"."MYTESTTAB" where "DEPTNO" = ''80'' and "DNAME" = ''IT'' and "LOC" = ''WA'' and ROWID =
delete from "SYS"."MYTESTTAB" where "DEPTNO" = ''90'' and "DNAME" = ''MGR'' and "LOC" = ''YR'' and ROWID =
已选择9行。
SQL> select t.SQL_UNDO from v$logmnr_contents t where t.seg_name=''MYTESTTAB'';
SQL_UNDO
----------------------------------------------------------------------------------------------------
delete from "SYS"."MYTESTTAB" where "DEPTNO" = ''80'' and "DNAME" = ''IT'' and "LOC" = ''WA'' and ROWID =
delete from "SYS"."MYTESTTAB" where "DEPTNO" = ''90'' and "DNAME" = ''MGR'' and "LOC" = ''YR'' and ROWID =
insert into "SYS"."MYTESTTAB"("DEPTNO","DNAME","LOC") values (''10'',''ACCOUNTING'',''NEW YORK'');
insert into "SYS"."MYTESTTAB"("DEPTNO","DNAME","LOC") values (''20'',''RESEARCH'',''DALLAS'');
insert into "SYS"."MYTESTTAB"("DEPTNO","DNAME","LOC") values (''30'',''SALES'',''CHICAGO'');
insert into "SYS"."MYTESTTAB"("DEPTNO","DNAME","LOC") values (''40'',''OPERATIONS'',''BOSTON'');
insert into "SYS"."MYTESTTAB"("DEPTNO","DNAME","LOC") values (''80'',''IT'',''WA'');
insert into "SYS"."MYTESTTAB"("DEPTNO","DNAME","LOC") values (''90'',''MGR'',''YR'');
已选择9行。
通过查看v$logmnr_contents视图中的一些列可以看到日志的记录详细信息。
注意其中:SQL_UNDO和SQL_REDO列记录的信息。这就是我们需要找回的内容!
可以将结果转存在一张用户表中
SQL> create table my_logmnr_contents
2 as
3 select * from v$logmnr_contents;
表已创建。
清空session内存信息
SQL> exec sys.dbms_logmnr.end_logmnr;
PL/SQL 过程已成功完成。
文章出处:http://www.diybl.com/course/7_databases/oracle/oraclejs/2008515/116714.html
分享到:
相关推荐
Oracle 10G LogMiner 是Oracle数据库系统中一个强大的日志分析工具,它允许用户在不使用归档重做日志的情况下分析数据库的redo log files,获取对数据库更改历史的详细视图。LogMiner 提供了一种有效的方式来进行...
Logminer依赖于2个包:DBMS_LOGMNR和DBMS_LOGMNR_D,Oracle 11g默认已安装 Logminer 基本使用步骤 <1>. Specify a LogMiner dictionary. 指定Logminer字典 <2>. Specify a list of redo log files for analysis. ...
在Oracle 10g中,LogMiner 的安装主要涉及创建DBMS_LOGMNR程序包和数据字典。首先,通过执行`@?/rdbms/admin/dbmslm.sql`来创建DBMS_LOGMNR包,这会创建必要的存储过程和函数。接着,执行`@?/rdbms/admin/dbmslmd....
Oracle 10g中的LogMiner是一个强大的工具,主要用于分析Oracle数据库的日志文件,从而获取数据库的DML(数据操纵语言)操作历史。这个工具在Oracle 10g版本中得到了显著的提升,使得分析过程更为简便且功能更为强大...
DBMS_LOGMNR 是 Oracle 中的一个日志分析包,用于分析和解释redo日志文件,以便追踪和诊断数据库中的操作。下面是 DBMS_LOGMNR 的使用方法。 首先,需要安装 LogMiner 工具,包括两个脚本 dbmslm.sql 和 dbmslmd....
在Oracle 11g中,物理DG是一种复制方法,通过实时地传输和应用生产数据库的日志到一个或多个备用数据库,使得备用数据库与主库保持几乎同步的状态。这样,当生产数据库遇到故障时,可以通过快速切换到备用数据库来...
br>精通Oracle 10g PL/SQL编程 <br> 【作 者】王海亮 林立新 于三禄 郑建茹 【丛 书 名】 万水Oracle技术丛书 <br>http://images.china-pub.com/ebook20001-25000/21975/shupi.jpg<br><br>PL/SQL是...
在Oracle 10g中,DataGuard是一种高可用性解决方案,它可以创建并维护一个或多个物理、逻辑或快照副本数据库(称为standby数据库),这些副本与主数据库(primary database)同步或异步运行。通过这种方式,即使主...
在Oracle 10g环境中,为了确保LogMiner能够正确解析并分析包含DML(数据操纵语言)语句的日志,数据库需设置`SUPPLEMENTAL LOG DATA PRIMARY KEY`和`SUPPLEMENTAL LOG DATA UNIQUE INDEX`。这些设置使得Oracle记录...
### Oracle 10g 视图详解 #### 高可用性和恢复能力 Oracle 10g 的高可用性与恢复功能对于确保数据安全至关重要。以下列出的视图提供了关于备份、归档和恢复过程的关键信息。 1. **V$ARCHIVE**: 展示了归档日志的...
Oracle 11g DataGuard是Oracle数据库系统中的一个强大特性,用于实现高可用性和灾难恢复。DataGuard通过创建和维护一个或多个备用数据库,确保在主数据库出现问题时,业务能够迅速切换到备用数据库,减少数据丢失和...
Oracle 数据库归档日志挖掘是指从 Oracle 数据库中提取有价值的信息,以便追溯和分析数据库的操作记录。这种操作可以帮助数据库管理员和开发者更好地理解数据库的行为,提高数据库的性能和安全性。 Oracle 数据库...
Oracle 11g 数据守护(Data ...通过以上步骤,你可以成功地在Oracle 11g环境中搭建Data Guard,提供了一个可靠的数据保护方案。在实际操作中,还需要考虑网络配置、安全性、性能优化等因素,确保整个系统的稳定运行。
### GoldenGate 12 for Oracle 11g 测试知识点详解 #### 一、环境准备与配置 **1. 用户配置文档编辑** - **命令行操作**:`[oracle@enmo ~]$ vi .bash_profile` - 这一步是通过`vi`编辑器来编辑用户的`.bash_...
在Oracle数据库中,日志管理是维护数据库稳定性和完整性的重要组成部分。以下是一些常见的日志管理命令及其详细解释: 1. **强制切换日志(Forcing Log Switches)** - **命令**: `ALTER SYSTEM SWITCH LOGFILE;`...
G、sql> execute dbms_logmnr.end_logmnr; ``` #### 第二章:表空间管理 表空间是Oracle数据库的基本存储单位,负责存储数据库对象的数据。表空间管理包括创建、修改和删除表空间等操作。 ##### 1. 创建表空间 ...
Oracle LogMiner 是一个强大的分析工具,自 Oracle 8i 版本开始提供,用于解析和提取重作日志文件(redo log files)中的详细信息。重作日志是 Oracle 数据库的重要组成部分,记录了所有对数据库进行的DML(插入、...
对于想要将 SYSAUX 中的对象转移到其他表空间的情况,Oracle 10g 提供了 `V$SYSAUX_OCCUPANTS` 视图,该视图详细列出了 SYSAUX 中的模式、描述、占用空间以及迁移方法。例如,LogMiner 对象可以使用 `SYS.DBMS_...