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


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和口令文件。
优点:操作容易,低错误风险,恢复时间为拷贝文件时间。
缺点:数据丢失时必须手动重应用,整个数据库只能恢复到上一次冷备的时间点。

冷备的linux下磁盘损坏与数据恢复
[Oracle@ora10g ubackup]$ cp /u01/oradate/orcl/* .  //先用操作系统命令备份文件
用虚拟机创建一个虚拟磁盘sdb
fdisk sdb格式磁盘
Command (m for help):n 增加新分区
Command (m for help):p  1  1  1044  w  // 增加主分区操作代码,p为主分区,1为分区数,1为第一个柱面数, 1044为该分区柱面数 w为写分区表到磁盘。
mkfs.ext3 sdb1 //在分区增加ext3文件系统
[oracle@ora10g oradata]$ mount /dev/sdb1 md //挂载到md文件夹
[oracle@ora10g oradata]$ chown -R oracle:oinstall md  //赋权
[oracle@ora10g md]$ cp /u01/ubackup/* .   //拷贝备份到md文件夹

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日志文件进行数据恢复
由于备份的控制文件没有记录新的数据文件的路径,执行上面命令后,数据库会自动指定表空间对应的数据文件路径到其他地方,这个在执行下面的命令时会有提示。
recover database using backup controlfile;
这时我们要把控制文件中自动指定的路径改成我们数据文件的真实路径
alter database rename file 'xxxx' to 'd:\oracle\oradata\orcl\xxwz_data1.dbf' //xxx是数据库指定的路径,后面的真实数据文件路径在第一次recover报错的时候有提示,也可以从alter_{sid}.log日志文件查到。
改完后执行恢复命令
recover database using backup controlfile until cancel;
然后继续一个一个试试redo文件。成功后输入
alter database open resetlogs;

resetlogs:
resetlogs选项被需要在进行不完全恢复或者用备份控制文件进行恢复时。
resetlogs所做的事情:
1.归档当前的redo日志文件(如果他们可访问),然后清除redo日志文件的内容,重设log sequence number为1.(例如当前的日志文件sequence为1000和1001,重设为1和2)
2.如果redo日志文件不存在则重建他们。
3.重新初始化控制文件中online redo logs和redo thread的metadata。
4.更新所有当前的数据文件和联机重做日志文件和所有后来已归档的重做日志文件with a new resetlogs SCN and time stamp。

只读表空间的恢复:
只读表空间的控制文件trace脚本重构时先不装载该表空间,而是在恢复时通过rename file和alter online要实现。具体可以通过对比只读和普通表空间的控制文件trace脚本。

incarnation:对应物
归档日志命名格式%s为log sequence number,%t为thread number,%r为incarnation。
通过reset incarnation实现跨resetlogs的恢复 

相关内容