操作oracle数据库时,出现误操作的几率很大,下面提供了用logmnr对commit后的数据进行恢复的方法。
oracle版本11.1.0,
1、找到C:\app\lyq\product\11.1.0\db_1\dbs下的init.ora文件,这是数据库启动的参数文件,
手动在里面添加一个参数utl_file_dir='C:\app\lyq\admin\orcl\cdump',utl_file_dir在数据库里默认为空,
大家可以使用SHOW PARAMETER UTL来查看系统里是否已经设置过该参数。或者在启动的SERVER里面使用ALTER来修改该参数。
alter system set utl_file_dir='C:\app\lyq\admin\orcl\cdump' scope=spfile; utl_file_dir路径可随意配置。
2、重启服务,让刚刚的修改生效。
>shutdown immediate
>startup mount
3、接着生成用于分析的数据字典
在SQLPLUS里调用数据库的工具包DBMS_LOGMNR_D.BUILD
BEGIN
dbms_logmnr_d.build(
dictionary_name => 'logmnr_dict.dat',
dictionary_location=>'C:\app\lyq\admin\orcl\cdump'
);
END;
/
操作完成后,会再C:\app\lyq\admin\orcl\cdump里面出现一个名为logmnr_dict.dat的文件。
上面的dictionary_location的地址可以随便设,不过一定要和utl_file_dir的值一样,否则出错。
或者
>execute dbms_logmnr_d.build('logmnr_dict.ora','C:\app\lyq\admin\orcl\cdump');
说明:调用方法DBMS_LOGMNR_D.BUILD前,可通过desc DBMS_LOGMNR 查看logmnr是否安装,若没有安装则需要执行命令安装
>start d:\oracle\ora90\rdbms\admin\catproc.sql;(需要很长时间)
4、 重启服务,然后装入我们要分析的日志文件。
shutdown immediate
startup mount
下面的操作需要在mount状态下操作
BEGIN
dbms_logmnr.add_logfile(
ptions=>dbms_logmnr.new,
logfilename=>'C:\APP\LYQ\ORADATA\ORCL\REDO03.LOG'
);
END;
/
options是用来指定文件操作:new为添加新的用于分析的日志文件;removefile用来移除不需要分析的日志。
logfilename为需要添加进入分析的日志的文件路径,我这个是把归档的日志文件从flash_recovery_area里面拷贝过来的。
1、找到C:\app\lyq\product\11.1.0\db_1\dbs下的init.ora文件,这是数据库启动的参数文件,
手动在里面添加一个参数utl_file_dir='C:\app\lyq\admin\orcl\cdump',utl_file_dir在数据库里默认为空,
大家可以使用SHOW PARAMETER UTL来查看系统里是否已经设置过该参数。或者在启动的SERVER里面使用ALTER来修改该参数。
alter system set utl_file_dir='C:\app\lyq\admin\orcl\cdump' scope=spfile; utl_file_dir路径可随意配置。
2、重启服务,让刚刚的修改生效。
>shutdown immediate
>startup mount
3、接着生成用于分析的数据字典
在SQLPLUS里调用数据库的工具包DBMS_LOGMNR_D.BUILD
BEGIN
dbms_logmnr_d.build(
dictionary_name => 'logmnr_dict.dat',
dictionary_location=>'C:\app\lyq\admin\orcl\cdump'
);
END;
/
操作完成后,会再C:\app\lyq\admin\orcl\cdump里面出现一个名为logmnr_dict.dat的文件。
上面的dictionary_location的地址可以随便设,不过一定要和utl_file_dir的值一样,否则出错。
或者
>execute dbms_logmnr_d.build('logmnr_dict.ora','C:\app\lyq\admin\orcl\cdump');
说明:调用方法DBMS_LOGMNR_D.BUILD前,可通过desc DBMS_LOGMNR 查看logmnr是否安装,若没有安装则需要执行命令安装
>start d:\oracle\ora90\rdbms\admin\catproc.sql;(需要很长时间)
4、 重启服务,然后装入我们要分析的日志文件。
shutdown immediate
startup mount
下面的操作需要在mount状态下操作
BEGIN
dbms_logmnr.add_logfile(
ptions=>dbms_logmnr.new,
logfilename=>'C:\APP\LYQ\ORADATA\ORCL\REDO03.LOG'
);
END;
/
options是用来指定文件操作:new为添加新的用于分析的日志文件;removefile用来移除不需要分析的日志。
logfilename为需要添加进入分析的日志的文件路径,我这个是把归档的日志文件从flash_recovery_area里面拷贝过来的。
5、再接着我们就要启动分析了
因为使用LOGMNR分析需要些文件,而刚刚我们的SERVER是在MOUNT状态下的,无法写文件,因此我们需要做的是:
alter database open
将数据库的状态修改为OPEN
BEGIN
dbms_logmnr.start_logmnr(
dictfilename => 'C:\app\lyq\admin\orcl\cdump\logmnr_dict.ora'
);
END;
/
dictfilename为我们刚刚建立的数据字典文件。
starttime,endtime为分析的时间范围。
如果大家使用PL/SQL DEVELOPER上面的这些过程的调用就不用像我这样还要手动写了。
6、查询日志内容
进过上面的辛苦的工作,下面就是我们收获的时候了,先介绍几个数据字典视图。
v$logmnr_dictionary 显示用来决定对象ID名称的字典文件的信息
v$logmnr_logs 在LogMiner启动时显示被分析的日志列表
v$logmnr_contents LogMiner启动后,可以使用这个视图在sql提示符下输入sql语句来查询重做日志的内容。
select scn ,seg_name,timestamp,seg_owner,operation from v$logmnr_contents where sql_name='your object'
(seg_name='table name')
我们可以看到几条关于OBJECT的记录,operation显示的该操作的类型(DDL,DELETE,INSERT,UPDATE)。
我们如果想看看操作的具体内容可以接着查询:
select scn,sql_redo,sql_undo from v$logmnr_contents where scn=''
就可以显示你要查看的操作的内容,以及它对应的UNDO操作,可以调用SQL_UNDO在ROLLBACK。
因为使用LOGMNR分析需要些文件,而刚刚我们的SERVER是在MOUNT状态下的,无法写文件,因此我们需要做的是:
alter database open
将数据库的状态修改为OPEN
BEGIN
dbms_logmnr.start_logmnr(
dictfilename => 'C:\app\lyq\admin\orcl\cdump\logmnr_dict.ora'
);
END;
/
dictfilename为我们刚刚建立的数据字典文件。
starttime,endtime为分析的时间范围。
如果大家使用PL/SQL DEVELOPER上面的这些过程的调用就不用像我这样还要手动写了。
6、查询日志内容
进过上面的辛苦的工作,下面就是我们收获的时候了,先介绍几个数据字典视图。
v$logmnr_dictionary 显示用来决定对象ID名称的字典文件的信息
v$logmnr_logs 在LogMiner启动时显示被分析的日志列表
v$logmnr_contents LogMiner启动后,可以使用这个视图在sql提示符下输入sql语句来查询重做日志的内容。
select scn ,seg_name,timestamp,seg_owner,operation from v$logmnr_contents where sql_name='your object'
(seg_name='table name')
我们可以看到几条关于OBJECT的记录,operation显示的该操作的类型(DDL,DELETE,INSERT,UPDATE)。
我们如果想看看操作的具体内容可以接着查询:
select scn,sql_redo,sql_undo from v$logmnr_contents where scn=''
就可以显示你要查看的操作的内容,以及它对应的UNDO操作,可以调用SQL_UNDO在ROLLBACK。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21702616/viewspace-668716/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21702616/viewspace-668716/