如何 用LogMiner 来查看数据库的情况, 谢谢 我的 数据库 有些数据 某名奇妙的丢失 我想用LogMiner 来查看数据库的情况 请问该怎样做 谢谢!因为我没有用过,而且上网百度也一知半解 希望 有经验的说说! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 转载:Logminer是每个Dba都应熟悉的工具,当一天由于用户的误操作你需要做不完全的恢复时,由于你无法确定这个操作是哪个时间做的,所以这对你的恢复就带来的很大的难度,丢失的数据也不能完全恢复回来。而LogMiner就可以帮你确定这个误操作的准确时间。 测试环境是Aix4.3.3的操作系统,Oracle9.2.0.3的测试库。一、LogMiner的几点说明1、LogMiner可以帮你确定在某段时间所发的各种DML,DDL操作的具体时间和SCN号,它所依据的是归档日志文件及联机日志文件。2、它只能在Oracle8i及以后的版本中使用,不过它可以分析Oracle8的日志。3、Oracle8i只能用于分析DML操作,到Oracle9i则可以分析DDL操作了。4、LogMiner不支持索引组织表、Long、LOB及集合类型。5、MTS的环境也不能使用LogMiner.二、操作步骤1、设定用于LogMiner分析的数据文件存放的位置 这是设定utl_file_dir参数的过程,我的示例: a、在initctc.ora文件中加入如下一行 utl_file_dir=/u01/arch b、得启数据库 oracle>sqlplus /nolog sql>conn / as sysdba sql>shutdown immediate sql>statup2、生成数据字典文件,是通过dbms_logmnr_d.build()来完成。 SQL> BEGIN 2 dbms_logmnr_d.build( 3 dictionary_filename => 'logminer_dict.dat', 4 dictionary_location => '/u01/arch' 5 ); 6 END; 7 / dictionary_location指的是Logminer数据字典文件存放的位置,它必须匹配utl_file_dir的设定。 其中的dictionary_filename指的是放于存放位置的字典文件的名字,名字可以任意取。3、建立一个日志分析表 a、建立日志分析表数据库必须在mount或nomount状态,启动数据库到mount状态。 sqlplus /nolog sql>conn / as sysdba sql>shutdown immediate sql>starup mount b、建立日志分析表,使用dbms_logmnr.add_logfile() SQL> BEGIN 2 dbms_logmnr.add_logfile( 3 options => dbms_logmnr.new, 4 logfilename => '/u01/arch/arc_ctc_0503.arc' 5 ); 6 END; 7 / 其中的options有三种取值,dbms_logmnr.new用于建一个日志分析表;dbms_logmnr.addfile用于加入用于分析的的日志文件;dbms_logmnr.removefile用于移出用于分析的日志文件。 4、添加用于分析的日志文件。 SQL> BEGIN 2 dbms_logmnr.add_logfile( 3 options => dbms_logmnr.addfile, 4 logfilename => '/u01/arch/arc_ctc_0504.arc' 5 ); 6 END; 7 / 使用则可以把这个文件从日志分析表中移除,从而不进行分析。 SQL> BEGIN 2 dbms_logmnr.add_logfile( 3 options => dbms_logmnr.removefile, 4 logfilename => '/u01/arch/arc_ctc_0503.arc' 5 ); 6 END; 7 / 5、启动LogMiner进行分析。 SQL> BEGIN 2 dbms_logmnr.start_logmnr( 3 dictfilename => '/u01/arch/logminer_dict.dat', 4 starttime => to_date('20030501 12:15:00','yyyymmdd hh24:mi:ss'), 5 endtime => to_date('20030501 15:40:30','yyyymmdd hh24:mi:ss') 6 ); 7 END; 8 / 即分析2003年5月1日这天12:15至15:40这段时间,并把分析结果放到数据字典中以用于查询。还有两个参数StartScn(起始scn号)及EndScn(终止Scn)号。6、查看日志分析的结果,通过查询v$logmnr_contents可以查询到 a、查看DML操作,示例: SELECT operation, sql_redo, sql_undo, FROM V$logmnr_contents WHERE seg_name = 'QIUYB'; OPERATION SQL_REDO SQL_UNDO ---------- -------------------------- -------------------------- INSERT inser into qiuyb.qiuyb ... delete from qiuyb.qiuyb... 其中operation指的是操作,sql_redo指的是实际的操作,sql_undo指的是用于取消的相反的操作。 b、查看DDL操作,示例: SELECT timstamp, sql_redo FROM v$logmnr_contents WHERE upper(sql_redo) like '%TRUNCATE%';7、结束LogMiner的分析。 SQL>BEGIN 2 dbms_logmnr.end_logmnr; 3 end; 4 / 三、与LogMiner相关的数据字典。1、v$loglist 它用于显示历史日志文件的一些信息2、v$logmnr_dictionary 因logmnr可以有多个字典文件,该视图用于显示这方面信息。3、v$logmnr_parameters 它用于显示logmnr的参数4、v$logmnr_logs 它用于显示用于分析的日志列表信息。 实际上在9i中已经是不需要停机设置utl_file_dir参数,因为毕竟这样是影响可用性的. ORACLE 与 JAVA 对应的数据类型 请问oracle olap分析中怎么给cube中显示的数据进行排序? 求教:Oracle在package的Header部声明变量与在Body部声明变量有何不同? 一个存储过程的创建 pro*c中如何用结构体插入数据啊 数据库中所有对象一瞬间全部失效 能否得出序列中空掉的号码 如何快速删除数据库中所有表的数据而保留表结构? 大家如何看表关联的优化?? 高手请进 求助写一个SQL语句 求助:数据库导入导出问题
Logminer是每个Dba都应熟悉的工具,当一天由于用户的误操作你需要做不完全的恢复时,由于你无法确定这个操作是哪个时间做的,所以这对你的恢复就带来的很大的难度,丢失的数据也不能完全恢复回来。而LogMiner就可以帮你确定这个误操作的准确时间。
测试环境是Aix4.3.3的操作系统,Oracle9.2.0.3的测试库。一、LogMiner的几点说明
1、LogMiner可以帮你确定在某段时间所发的各种DML,DDL操作的具体时间和SCN号,它所依据的是归档日志文件及联机日志文件。
2、它只能在Oracle8i及以后的版本中使用,不过它可以分析Oracle8的日志。
3、Oracle8i只能用于分析DML操作,到Oracle9i则可以分析DDL操作了。
4、LogMiner不支持索引组织表、Long、LOB及集合类型。
5、MTS的环境也不能使用LogMiner.二、操作步骤
1、设定用于LogMiner分析的数据文件存放的位置
这是设定utl_file_dir参数的过程,我的示例:
a、在initctc.ora文件中加入如下一行
utl_file_dir=/u01/arch
b、得启数据库
oracle>sqlplus /nolog
sql>conn / as sysdba
sql>shutdown immediate
sql>statup2、生成数据字典文件,是通过dbms_logmnr_d.build()来完成。
SQL> BEGIN
2 dbms_logmnr_d.build(
3 dictionary_filename => 'logminer_dict.dat',
4 dictionary_location => '/u01/arch'
5 );
6 END;
7 /
dictionary_location指的是Logminer数据字典文件存放的位置,它必须匹配utl_file_dir的设定。
其中的dictionary_filename指的是放于存放位置的字典文件的名字,名字可以任意取。3、建立一个日志分析表
a、建立日志分析表数据库必须在mount或nomount状态,启动数据库到mount状态。
sqlplus /nolog
sql>conn / as sysdba
sql>shutdown immediate
sql>starup mount
b、建立日志分析表,使用dbms_logmnr.add_logfile()
SQL> BEGIN
2 dbms_logmnr.add_logfile(
3 options => dbms_logmnr.new,
4 logfilename => '/u01/arch/arc_ctc_0503.arc'
5 );
6 END;
7 /
其中的options有三种取值,dbms_logmnr.new用于建一个日志分析表;dbms_logmnr.addfile用于加入用于分析的的日志文件;dbms_logmnr.removefile用于移出用于分析的日志文件。
4、添加用于分析的日志文件。
SQL> BEGIN
2 dbms_logmnr.add_logfile(
3 options => dbms_logmnr.addfile,
4 logfilename => '/u01/arch/arc_ctc_0504.arc'
5 );
6 END;
7 /
使用则可以把这个文件从日志分析表中移除,从而不进行分析。
SQL> BEGIN
2 dbms_logmnr.add_logfile(
3 options => dbms_logmnr.removefile,
4 logfilename => '/u01/arch/arc_ctc_0503.arc'
5 );
6 END;
7 /
5、启动LogMiner进行分析。
SQL> BEGIN
2 dbms_logmnr.start_logmnr(
3 dictfilename => '/u01/arch/logminer_dict.dat',
4 starttime => to_date('20030501 12:15:00','yyyymmdd hh24:mi:ss'),
5 endtime => to_date('20030501 15:40:30','yyyymmdd hh24:mi:ss')
6 );
7 END;
8 /
即分析2003年5月1日这天12:15至15:40这段时间,并把分析结果放到数据字典中以用于查询。还有两个参数StartScn(起始scn号)及EndScn(终止Scn)号。6、查看日志分析的结果,通过查询v$logmnr_contents可以查询到
a、查看DML操作,示例:
SELECT operation,
sql_redo,
sql_undo,
FROM V$logmnr_contents
WHERE seg_name = 'QIUYB';
OPERATION SQL_REDO SQL_UNDO
---------- -------------------------- --------------------------
INSERT inser into qiuyb.qiuyb ... delete from qiuyb.qiuyb...
其中operation指的是操作,sql_redo指的是实际的操作,sql_undo指的是用于取消的相反的操作。
b、查看DDL操作,示例:
SELECT timstamp,
sql_redo
FROM v$logmnr_contents
WHERE upper(sql_redo) like '%TRUNCATE%';7、结束LogMiner的分析。
SQL>BEGIN
2 dbms_logmnr.end_logmnr;
3 end;
4 / 三、与LogMiner相关的数据字典。
1、v$loglist 它用于显示历史日志文件的一些信息
2、v$logmnr_dictionary 因logmnr可以有多个字典文件,该视图用于显示这方面信息。
3、v$logmnr_parameters 它用于显示logmnr的参数
4、v$logmnr_logs 它用于显示用于分析的日志列表信息。