如何分析数据库的日志发生了什么变化

LogMiner工具分析归档日志,从而做数据恢复。

设置数据库的当前时间格式:

SQL>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

查询数据库当前系统时间:

SQL>select sysdate from dual;

切换当前重做日志已生成归档日志:

sqlplus下切换sys用户:SQL>conn /as sysdba

重做日志生成归档日志:

SQL>alter system switch logfile;

查看数据库归档日志序号:视图v$log_history可以产看归档日志信息,其中sequence#为归档日志序列号,first_time为归档日志开始时间。

SQL>select sequence#,first_time from v$log_history order by first_time desc;

如何确定要分析的日志文件:对比检查检查点之前和之后的两个归档日志文件。

归档日志一般在$ORACLE_HOME/flash_recovery_area/ORACLE_SID/archivelog目录下。

查看需要分析哪些归档日志,sys用户登录pl/sql developer进行查询:

SQL>select t.first_time,t.namefrom v$archived_log torderby t.first_time desc

clip_image002

对比上表找出检查时间点前后的俩个归档日志进行对比分析。

使用LogMiner工具分析数据:

Sys用户登录sqlplus下输入:

SQL>execute dbms_logmnr.add_logfile(logfilename=>’右归档日志路径’,

options=>dbms_logmnr.new);

SQL>execute dbms_logmnr.add_logfile(logfilename=>’左归档日志路径’,

options=>dbms_logmnr.addfile);

启动logminer工具:

SQL>execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

把分析数据放入表中并授权给普通用户:

SQL>create table logminer_01

As

Select * from v$logmnr_contents;

把logminer_01表的查询授权给用户:

SQL>grant select on logminer_01 to scott;

结束logminer分析:

SQL>execute dbms_logmnr.end_logmnr;

查看分析日志的结果:

SQL>select t.timestamp,t.sql_redo,t.sql_undo

from sys.logminer_01 t

where t.seg_owner='SCOTT'and t.sql_undo isnotnull;

查询结果中slq_redo就是刚才进行的操作,若想取消刚才的增删改操作,就执行相应的sql_undo下的SQL语句即可。

你可能感兴趣的:(分析数据)