logmnr 的一个实例
上一篇 /
下一篇 2008-06-11 23:33:32
/ 个人分类:Oracle 备份与恢复
logmnr 课程
logmnr的作用
1. analyze redo logfile
2. incomplete recover database
logmnr全部过程
1 backup database
2 modify spfile
3 restart database
4 manipulate database,switch logfile
5 use logmnr
6 analyze redo logfile
7 incomplete recover database
8 verify recover
1 备份数据库
--操作
--制作脚本备份数据库如下:
vi usualbk.rcv
connect targetsys/oracle@clonedb
run{
allocate channel d1 device type disk;
backup as compressed backupset
incremental level=0
format='/rmanbak/inc0_%d_%U'
tag='inc0'
channel=d1
database;
backup as compressed backupset
format='/rmanbak/arch_%d_%U'
tag='arch'
channel=d1
archivelog all delete input;
backup as compressed backupset
format='/rmanbak/backup.ctl'
tag='ctl'
channel=d1
current controlfile reuse;
}
--使用命令备份数据库
rman cmdfile=/home/oracle/usualbk.rcv log=/home/oracle/rman.log append
.....
2 修改参数文件
--步骤
root@zhousi#mkdir/logmnr
root@zhousi#chown-R oracle:dba /logmnr
alter system set utl_file_dir='/logmnr' scope=spfile sid ='*';
startup force
--操作实例:
oracle@zhousir->sqlclonedb
sql> show parameters utl
sql>alter system set utl_file_dir='/logmnr' scope=spfile;
sql> startup force
3 模拟误操作
--操作
sql>conn test
sql>select table_name from user_tables;
sql>create table tb_test3(col1 varchar2(100) default user not null);
sql>insert into tb_test3(col1) values('first row');
sql>/
sql>commit;
sql>drop table tb_test1; --后面恢复到这个时间点
sql>insert into tb_test3(col1) values('three row');
sql>commit;
sql>create table tb_Test4 as select * from tb_test3;
--归档日志
conn / as sysdba
alter system switch logfile; --归档日志
select * from v$archived_Log; --最新的一个归档日志是后面要分析的
4 使用logmnr
--步骤:
create dictionary
add logfile
start analyze
create table as select * from v$logmnr_contents
end logmnr
find exact drop time
--操作实例:
sql>execute dbms_logmnr_d.build(dictionary_filename=>'dictionary.ora',dictionary_logcation=>'/logmnr');
sql>commit;
--添加日志文件
sql>begin
dbms_logmnr.add_logfile(logfilename=>'/oradata/clonedb/archive/1_2_653581041.dbf',options=>dbms_logmnr.new);
end;
/
5 分析日志文件
--操作实例:
sql>select * from v$logmnr_logs; --查找添加结果
sql>execute dbms_logmnr.start_logmnr(dictfilename=>'/logmnr/dictionary.ora');
sql>select count(*) from v$logmnr_contents;
sql>create table test.tb_logmnr as select * form. v$logmnr_contents; --把数据转存到一个用户表,方便分析。
sql> conn test
sql>select count(*) from tb_logmnr;
sql>
----使用pl/sql develop查看表具体内容:
sql>select * from tb_logmnr;
--重要的字段 username seg_name seg_owner seg_type_name timestamp operation
sql>select count(*) from tb_logmnr where peration ='DDL';
--sqlplus 启动数据库到 mount状态
sql>conn / sysdba
sql>shutdown immediate
sql>startup mount
sql>exit
6 不完全恢复数据库
root#su - oracle
--用RMAN恢复数据库到第一个删除表时间点(logmnr查询得到结果)
oracle$uniread rman nocatalog targetsys/oracle@clonedb
rman>run {
allocate channel d1 device type disk;
set until scn 1469380;
restore database;
recover database;
}
rman>
---------------
7 验证恢复结果
--在另一个会话中打开数据库,查询恢复后的结果。
sql>select open_mode from v$database;
sql>alter database open resetlogs;
sql>conn test
sql>select table_name from user_tables;
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: