Oracle教程:用户管理的完全恢复(一)

2014-11-24 18:23:53 · 作者: · 浏览: 2

adump一般是audit dump
bdump是background dump
udump是user dump
cdump是core dump


恢复的步骤
1.还原数据文件
2.应用redo
3.数据库包含提交的和未提交的事务
4.应用UNDO
5.恢复完成的数据库


恢复:用操作系统命令还原文件,用SQL*PLUS recover命令恢复文件


非归档模式的恢复
必须还原所有的datafile和control files,也可以还原参数文件、redo log files和口令文件。
优点:操作容易,低错误风险,恢复时间为拷贝文件时间。
缺点:数据丢失时必须手动重应用,整个数据库只能恢复到上一次冷备的时间点。


SQL>create pfile from spfile //创建pfile
修改pfile里面的控制文件路径
SQL>create spfile from pfile;
SQL>startup mount
然后把控制文件里面的datafile目录修改
SQL>alter database rename file '/u01/oradata/morewood/system01.dbf' to '/u01/oradata/md/system01.dbf';
....(省略其他的修改操作)
再把控制文件里面的tempfile目录修改
SQL>alter database rename file '/u01/oradata/morewood/temp01.dbf' to '/u01/oradata/md/temp01.dbf';
再把控制文件里面的redo log file目录修改
SQL>alter database rename file '/u01/oradata/morewood/redo01.dbf' to '/u01/oradata/md/redo01.dbf';
...省略其他log目录修改


自动恢复redo log file(没备份redo log)
1.shutdown实例
2.还原datafile和控制文件
3.执行可取消的恢复
4.open数据库with resetlogs选项
操作代码:
startup mount
recover database until cancel using backup controlfile;//模拟不完全恢复
cancel
alter database open resetlogs;



归档模式的恢复
1.完全恢复
确保要还原的datafile是离线状态
只还原丢失或损坏的datafile
不还原其他文件
恢复datafile
优点:只需还原丢失的文件、恢复所有的数据到出错时间、恢复时间为还原丢失文件和应用所有归档日志文件的时间。
缺点:必须包含所有的归档日志文件
v$recover_file:需恢复的datafile,该信息是控制文件的信息。
v$recovery_log:恢复时需要的归档日志文件
数据库MOUNT状态下
SQL>recover database或recover datafile '/oradata/orcl/xxwz_data.dbf'
数据库OPEN状态下
SQL>recover tablespace xxwz_data;或recover datafile '/oradata/orcl/xxwz_data.dbf'


1.1冷备(直接把文件拷贝到其他盘)+热备(先用alter tablespace xxwz_data begin backup)
在不打开数据库情况下恢复(可以恢复系统表空间和UNDO表空间)
shutdown abort;//当数据库打开时datafile突然丢失,只有shutdown abort才能关闭数据库
拷贝冷备的datafile到原数据文件目录下;
startup mount;
select * from v$recover_file;//查看需要恢复的数据文件
set autorecovery off //关闭自动恢复
SQL>recover database或recover datafile 1;


在打开数据库情况下数据突然丢失的恢复(丢失时数据库没意识到)
提示:数据文件突然丢失,数据库才有在alter system checkpoint后才能用select * from v$recover_file查到要恢复的文件。
alter database datafile 1 offline;
拷贝备份文件;
recover datafile 1;
alter database datafile 1 online;


数据文件在关闭时已丢失,但要求在打开数据库实行恢复(丢失时数据库已意识到)
startup mount;
alter database datafile 1 offline;
alter database open;
拷贝备份文件;
recover datafile 1;
alter database datafile 1 online;


1.2 数据文件没备份(不能是SYSTEM表空间的数据文件,控制文件不能被重建)
前提:自数据文件创建后的所有的归档日志文件都有;控制文件包含丢失文件的名字。
alter database datafile 7 offline;
SQL>alter database create datafile 'd:\oracle\oradata\xxwz_data.dbf'或alter database create datafile 'd:\oracle\oradata\xxwz_data.dbf' AS 'e:\oracle\oradata\xxwz_data.dbf';
recovery datafile 7;
alter database datafile 7 online;



控制文件的checkpoint的SCN小于数据文件的checkpoint的SCN,则会报控制文件太旧错误,相反则需要介质恢复。
查询数据文件的checkpoint的SCN
select file#,checkpoint_change# from v$datafile_header;
查询控制文件的checkpoint的SCN
select file#,checkpoint_change# from v$datafile;


控制文件的恢复
1.控制文件没有全部丢失
create pfile from spfile;
删除pfile中丢失的控制文件的路径
create spfile from pfile;

cp control02.ctl control01.ctl


2.控制文件全部丢失
丢失之前把控制文件备份成trace脚本
alter database backup controlfile to trace as 'd:\c1.trc';
cp c1.trc c1.sql
修改sql脚本
执行sql脚本


或者
丢失之前把控制文件备份
alter database backup controlfile to 'd:\c1.trc';
然后我又新建一个表空间并且插入数据;
丢失后
先把备份的控制文件拷贝到指定的目录并重命名
cp d:\c1.trc control01.ctl
cp d:\c1.trc control02.ctl
cp d:\c1.trc control03.ctl
用控制文件恢复数据
recover database using backup controlfile;
数据可能在日志文件的其中一个当中,要一个一个试试
'd:\oracle\oradata\orcl\redo01.log' // 指定用redo01日志文件进行数据恢复
由于备份的控制文件没有记录新的数据文件的路径