Oracle中重做及归档日志(转)ITeye - AG环亚娱乐

Oracle中重做及归档日志(转)ITeye

2019年03月28日13时07分09秒 | 作者: 宛亦 | 标签: 日志,归档,剖析 | 浏览: 1480

Oracle中重做及归档日志

  2007-06-12 16:29 星期二
LogMiner 是集成在Oracle8i/Oracle9i数据库产品中的日志剖析东西,经过该东西能够剖析重做日志和归档日志中的一切业务改动,并能精确地确认各种 DML和DDL操作的详细时刻和SCN值。对重做日志和归档日志进行剖析的意图是为了康复因为履行了误操作而丢掉的数据。

运用LogMiner可完结:①确认数据逻辑损坏的时刻。例如,用户履行了DROP TABLE和TRUNCATE TABLE指令等误操作后,运用LogMiner能够精确认位履行这些误操作的详细时刻。留意:Oracle8i只能复原DML操作,不能复原DDL操作;Oracle9i能够复原DDL以及DML操作。②盯梢用户履行的业务改动操作。运用LogMiner不只能够盯梢用户所履行的各种DML操作和 DDL操作,而且还能够获得数据改动。③盯梢表的DML操作,运用LogMiner能够盯梢在表上所发作的一切业务改动。

下面以Oracle8i(8.1.5)for Windows 2000/NT为例阐明怎么运用LogMiner对重做日志和归档日志进行剖析。本文进行的一切操作均在该环境下验证经过,文中运用的数据库名为phj,Oracle_sid为phj。

一、日志操作形式

Oracle数据库对日志的管理形式有两种,即:非归档形式和归档形式。在树立或装置Oracle数据库时,假如没有指定日志操作形式,则默以为非归档形式(NOARCHIVELOG)。数据库树立之后,用户能够根据需求修正数据库日志的操作形式。

1.非归档形式(NOARCHIVELOG)

非归档形式是指不保存重做日志的日志操作形式,这种日志操作形式只能用于维护实例失利(如体系断电),而不能用于维护介质失利(数据库物理文件损坏)。

非归档形式的作业进程如下:假定数据库只要两个日志组,且当时日志组为日志组一,日志序列号为1。当业务改动填满日志组一时,体系会切换到日志组二,而且 LGWR进程将业务改动写入该日志组,日志序列号变为2;而当业务改动填满日志组二时,体系又主动切换回日志组一,此刻日志序列号变为3,而且日志序列号 3所对应的业务改动会掩盖日志序列号1所对应的业务改动,依此类推。

2.归档形式(ARCHIVELOG)

归档形式是指将重做日志内容保存到归档日志中的日志操作形式。在这种日志操作形式下,当进行日志切换时ARCH进程会将重做日志的内容仿制到归档日志中。例如,假定数据库只包括两个日志组,LGWR进程首要将业务改动写入日志组一,此刻日志序列号为1;当业务改动填满日志组一时,体系将主动切换到日志组二,并将业务改动写入日志组二,此刻日志序列号变为2,一起后台进程ARCn会将日志组一的内容保存到归档日志文件1中;而当业务改动填满日志组二时,体系主动切换回日志组一,并将业务改动写入日志组一,此刻日志序列号变为3,一起后台进程ARCn会将日志组二的内容保存到归档日志文件2中,依此类推。

3.改动日志的操作形式为主动归档形式

①修正数据库的参数文件,在参数文件后添加如下参数:


log_archive_start = true

log_archive_dest_1 = "location=C:\Oracle\phj\archive"

log_archive_format = "T%TS%S.ARC"



阐明:第一个参数在重启数据库时将主动发动ARCH进程;第二个参数指出归档日志寄存的方位;第三个参数阐明归档日志的文件名格局,%T取重做线程号,%S取日志序列号;

②重启并装载数据库


sqlplus internal/oracle@phj

shutdown immediate

startup mount pfile=%Oracle_Home%\database\initphj.ora

alter database archivelog

alter database open



4.生成归档日志

下面以剖析TMP表的DDL和DML操作为例,介绍运用LogMiner剖析重做日志和归档日志的全进程。咱们首要履行以下句子在表TMP上履行DDL以及DML操作,并生成归档日志:


sqlplus internal/oracle@phj

create table tmp(name varchar2(10),no number(3));

alter system switch logfile;

insert into tmp values(‘liming’,112);

update tmp set no=200;

commit;

alter system switch logfile;

delete from tmp;

alter system switch logfile;




经过上面的操作会发生三个接连的归档日志文件。
二、树立字典文件

字典文件用于寄存表及目标ID号之间的对应联系。当运用字典文件时,它会在表名和目标ID号之间树立一一对应的联系。因而需求留意,假如用户树立了新表之后,而且将来或许会对该表进行日志剖析,那么就需求从头树立字典文件,以将其目标名及目标ID号寄存到字典文件中。

1.修正参数文件,添加参数:UTL_FILE_DIR=C:\Oracle\phj\logmnr

目录logmnr有必要事前手艺树立,该目录用于寄存发生的字典文件,目录称号能够自定。

2.从头发动数据库


sqlplus internal/oracle@phj

shutdown immediate

startup pfile=%Oracle_Home%\database\initphj.ora



3.树立字典文件


BEGIN

dbms_logmnr_d.build(

dictionary_filename= ’dict.ora’,

dictionary_location= ’c:\oracle\phj\logmnr’);

END;

/



留意:参数dictionary_filename用以指定字典文件的文件名;参数 dictionary_location用于指定寄存字典文件地点的目录,该目录有必要与初始化参数UTL_FILE_DIR的值共同。假如指定的字典文件名dict.ora现已存在,则应在履行此操作前将其完全删去(从垃圾箱中删去),不然履行该进程将失利。

三、树立日志剖析列表

树立日志剖析列表有必要在MOUNT或NOMOUNT状态下完结。

1.中止并装载数据库


sqlplus internal/oracle@phj

shutdown immediate

startup mount pfile=%Oracle_Home%\database\initphj.ora

2.树立日志剖析列表

在“生成归档日志”的操作中现已生成了三个接连的归档日志文件,为便于剖析咱们从头仿制这三个归档日志文件并别离命名为:test1.arc、test2.arc、test3.arc。经过以下操作树立日志剖析列表:


BEGIN

dbms_logmnr.add_logfile(

options= dbms_logmnr.new,

logfilename= ’c:\oracle\phj\archive\test1.arc’);

END;

/



3.添加其它欲进行剖析的日志文件


BEGIN

dbms_logmnr.add_logfile(

options= dbms_logmnr.addfile,

logfilename= ’c:\oracle\phj\ archive \test2.arc’);

END;

/



用相同的办法将归档日志文件test3.arc添加到日志剖析列表中。能够经过动态功能视图v$logmnr_logs检查日志剖析列表中有哪些待剖析的日志文件。


SQL select filename from v$logmnr_logs;

FILENAME



c:\oracle\phj\archive\test1.arc

c:\oracle\phj\archive\test2.arc

c:\oracle\phj\archive\test3.arc



四、发动LogMiner履行剖析

1.剖析重做日志和归档日志


BEGIN

dbms_logmnr.start_logmnr(

dictfilename= ’c:\oracle\phj\logmnr\dict.ora’,

starttime= to_date(’2003-02-10:10:05:00’,’YYYY-MM-DD:HH24:MI:SS’),

endtime= to_date(’2003-02-10:10:17:00’,’YYYY-MM-DD:HH24:MI:SS’)

);

END;

/



留意:此进程能否履行成功的关键是给出的starttime(开始时刻)和endtime(停止时刻)应在一个有用的范围内。特别是停止时刻,应小于或等于归档日志的树立时刻;假如大于归档日志的树立时刻,则不能履行剖析进程。剖析多个归档日志时,这些归档日志最好是接连的。

2.检查日志剖析成果

上面对日志进行剖析的成果寄存在动态功能视图v$logmnr_contents中,经过查询该动态功能视图能够获得一切DML以及其反操作。


SQL select operation,sql_redo,sql_undo

2 from v$logmnr_contents

3 where seg_name=TMP;

OPERATION SQL_REDO SQL_UNDO

- -

INSERT insert into SYS.TMP…… delete from SYS.TMP ……

UPDATE update SYS.TMP set NO …… update SYS.TMP set ……

DELETE delete from SYS.TMP …… insert into SYS.TMP ……



根据需求能够从动态功能视图v$logmnr_contents中获取更多的有用信息,限于篇幅此不赘述。对重做日志进行剖析的办法与对归档日志剖析的办法相同,只是在树立日志剖析列表时,需将重做日志文件添加到日志剖析列表中。
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章