热备份模式下,使用用户管理的备份,在数据库运行过程中数据库文件丢失,
请问如何恢复啊?
请问如何恢复啊?
解决方案 »
- 昨天数据库突然变得很慢。
- 奇怪的SQL语句 求助(分少请原谅)
- start with connect by性能问题
- 安装oracle出错!急求问
- 有没有类似oracle的帮助文档的《concepts Guide》之类的纸质的书卖,中英文皆可。
- 关于存储过程使用临时表的问题
- 一个很奇怪的问题,已经google和baidu了,也找了itpub和csdn,没人能解答...(奇怪的tnslistener)
- 調用函數報錯?
- 我oracle里面有张日志表!有几百条记录,用SQL语句一删就没反应了!只能用手动删!怎个办啊?
- 在Oracle中判断一个表是否存在的SQL语句是什么?
- oracle数据导出问题
- ACCESS 字符串截取
5.1 完全恢复简介
5.1.1 诊断数据文件介质失败
1、诊断数据文件介质失败
启动数据库的时候dbwr 报错误:ora-01157 ora-01110
2、在open状态下诊断数据文件损坏,损坏的数据文件在检查点时自动被数据库脱机。在查询相关对象时
select * from emp (全表扫描) ora-000376 ora-01110
3、在open下诊断数据块损坏。只有涉及到损坏的块,就会报错误
select * from emp (全表扫描) ora-01578 ora-01110
5.1.2 转换数据文件到其它磁盘
在mount时,可以改变任何文件的位置,在open时,不能改变system的数据文件
1、在mount下改变文件位置
host copy d:\aa e:\dd
alter database rename file 'd:\aa' to 'e:dd'
2、在open状态下改变文件位置。
alter tablespace test offline 或者 alter database datafile 'd:aa' offline
alter database rename file 'd:\aa' to 'e:dd'
alter tablespace test rename datafile 'd:\aa' to 'e:dd'
5.1.3 完全恢复命令
1、recover database (sql*plus 命令 对应的sql命令是 alter database recover database )
该命令恢复多个数据文件,只能在mount下执行。
2、recover tablespace (sql*plus 命令 对应的sql命令是 alter database recover tablespace )
这个命令只能在open下执行
3、recover datafile (sql*plus 命令 对应的sql命令是 alter database recover datafile )
即可以在open下执行也可以在mount下执行
5.1.4 应用归档日志
当执行用户管理的完全恢复时,需要英国归档日志和重做日志的事物变化。如果归档日志、重做日志存在相同的事物变化
那么只应用重做日志的变化;应用重做日志是可以指定名称,也可以应用oracle建议的日志
1、应用默认目录的归档日志
recover datafile 5
2、应用指定位置的归档日志
recover datafile 5 from 'c:\test'
3、自动应用归档日志
方法1:recover datafile 5 命令后选择auto选项
方法2:set autorecovery on
方法2:recover automatic datafile 5
5.1.5 察看恢复文件
1、列出需要恢复的数据文件
首先把备份文件放到指定位置。然后查询序列号。这是查询到的是备份文件的scn。根据这个scn可以确定重哪个
日志文件开始应用
select * from v$recover_file;
2、列出日志历史信息
select * from v$loghist where 11231 between first_change# and switch_change#;
3、列出恢复需要使用的归档日志
显示所有的归档日志
select * from v$recovery_log
5.3 在mount状态下恢复数据文件
这种方法可以恢复任何数据文件,不过需要数据库处于mount状态;其实只有system的数据文件必须在mount
下恢复,其他文件可以在open状态下恢复。在mount恢复方法如下(假设system表空间文件有问题):
1、装载数据库
conn / as sysdba
startup force mount
2、确定需要恢复的文件
select file#,error from v$recover_file;
3、复制文件备份
host copy d:\backup\system.dbf d:\oracle\orcl\
如果磁盘损坏,可以将备份文件复制到可用位置
host copy d:\backup\system.dbf d:\oracle\orcl\
alter database rename file old_namepath to new_namepath
4、恢复数据文件
recover datafile 1 或者使用命令 alter database recover datafile 1
5、打开数据库
alter database open
5.4 在open状态下恢复关闭后意外丢失的数据文件
如果在数据库关闭的情况下文件意外损坏,那么数据库无法打开。假设user1.dbf丢失。为了减少停机时间,在open
下恢复该文件
1、装载数据库
如果文件无法访问,数据库是否无法打开的,因此先装载。
startup force mount
2、确定需要恢复的文件
select file#,error from v$recover_file;
3、使损坏文件脱机
alter database datafile 4 offline;
4、打开数据库
alter database open
5、复制文件到指定位置
host copy d:\backup\system.dbf d:\oracle\orcl\
如果磁盘损坏,可以将备份文件复制到可用位置
host copy d:\backup\system.dbf d:\oracle\orcl\
alter database rename file old_namepath to new_namepath
6、恢复数据文件
recover datafile 4
7、使文件联机
alter database datafile 4 online;
5.4 在open状态下恢复意外打开时丢失的数据文件
在数据库处在open时,如果system的数据文件坏了,系统会自动关闭。如果其他数据文件坏了。那么只有该文件
无法访问,在执行sql语句的时候会报错误
select * from temp_t
ora-00376: file 4 cannot be read at this time
ora-01110: data file 4
恢复该文件的方法如:
1、确定需要恢复的数据文件
select file#,error from v$recover_file;
2、使数据文件脱机
alter database datafile 4 offline;
3、复制文件的备份到指定位置或者通过rename改变原文件位置
4、恢复表空间或数据文件
recover datafile 4
5、市表空间、数据文件联机
alter database datafile 4 online;
5.5、在open状态下恢复未备份数据文件
在archivelog下,如果dba增加了新的数据文件,并且未备份新增加的数据文件,如果该文件损坏,dba可以恢复该文件
但前提是从该文件建立到损坏时的所有归档文件都必须存在。
1、装载数据库
startup force mount
2、确定需要恢复的数据文件
select file#,error from v$recover_file;
3、使数文件脱机
alter database datafile 6 offline
4、打开数据库
alter database open
5、重新建立数据文件
alter database create datafie 'd:\aa';
如果需要换磁盘
alter database create datafie 'e:\aa' as 'd:\aa';
6、恢复数据文件
recover datafile 6不完全恢复---------------------
6 用户管理的不完全恢复
恢复数据库到失败时刻前的某一个时刻,这种恢复方式只适合归档模式数据库。
学会基于时间点的不完全恢复
学会基于取消的不完全恢复
学会基于scn的不完全恢复
学会基于控制文件副本的不完全恢复
要学会判断场景,选择恢复方法
一般步骤
1、关闭数据库,并备份当前数据库(重要:避免恢复失败有破坏了现场)
2、restore all datafiles. do not restore the control file,redo logs,password file,or parameter file
3、mout the database
4、recover the datafiles to a point before the time of failure
5、open the database with resetlogs
6、perform a closed database backup.(重要:为以后的恢复打基础)
6.1.1 不完全恢复分类
1、基于时间恢复
如果不知道时间,可以通过logminer分析归档日志,取得操作时间
适用于 :误删除表、误截断、体积错误数据
ora10g开始可以使用flashback功能
2、基于取消恢复
使用于在完全恢复时,发现某一个日志丢失的情况。恢复过程只能进行到被迫取消点。
3、基于scn恢复
恢复到某一个scn。如果用户知道具体的scn 就可以使用这种方法
4、基于备份控制文件恢复
使用备份的控制文件,将数据库恢复到备份点和失败点之间的某一点。
适用于: 表空间被意外删除;所有控制文件全部丢失
6.1.2 不完全恢复命令
1、recover database until time
基于时间恢复的命令,时间格式必须为 yyyy-mm-dd hh24:mi:ss,用nls_data_format 设置时间格式
2 recover database until change
change 后是scn ,只适用于基于scn的恢复
3 recover database until cancel
基于取消的恢复
4 recover database .... using backup controlfile
使用控制文件的恢复
6.2 基于时间的恢复
如果不知道要恢复到那个时间,可使用logminer 分析操作的时间 方法:
a shudown immediate
b startup mount
c host copy backup_file to now_file
通过v$recover_file可以查看数据文件的备份时间
d recover database until time '2008-06-06 23:32:12'
e 以 resetlogs 方式打开数据库
alter database open resetlogs
注意由于不完全恢复后,必须进行resetlogs 操作。这个操作使之前的备份不能直接使用,因此必须在resetlogs
后立即重新备份数据库。
alter database begin backup
copy database files to other directory
alter database end backup
alter database backup controlfile to 'd:\adfad\adfad';
alter system archive log current
6.3 基于scn的恢复
确定scn select current_scn from v$database;
方法如下:
a shutdown immediate
b startup mount
c host copy backup_file to now_file
d recober database until change 123143
e alter database open resetlogs
注意由于不完全恢复后,必须进行resetlogs 操作。这个操作使之前的备份不能直接使用,因此必须在resetlogs
后立即重新备份数据库。
alter database begin backup
copy database files to other directory
alter database end backup
alter database backup controlfile to 'd:\adfad\adfad';
alter system archive log current
6.4 基于取消的恢复
方法如下:
a shutdown immediate
b startup mount
c host copy backup_file to now_file
d recober database until cancel
e alter database open resetlogs
注意由于不完全恢复后,必须进行resetlogs 操作。这个操作使之前的备份不能直接使用,因此必须在resetlogs
后立即重新备份数据库。
alter database begin backup
copy database files to other directory
alter database end backup
alter database backup controlfile to 'd:\adfad\adfad';
alter system archive log current
6.5 基于控制文件的恢复
在表空间删除,后者所以文件都损坏时使用,这种恢复方法。使用这种方法,需要控制文件备份和
表空间被误删除的时间
方法如下:
a shutdown immediate
b 复制所有控制文件日志文件的备份到当前位置
c startup
d recober database until time '2008-06-06 23:32:12' using backup controlfile
e alter database open resetlogs
注意由于不完全恢复后,必须进行resetlogs 操作。这个操作使之前的备份不能直接使用,因此必须在resetlogs
后立即重新备份数据库。
alter database begin backup
copy database files to other directory
alter database end backup
alter database backup controlfile to 'd:\adfad\adfad';
alter system archive log current
如果是system文件,或者undo文件,那么需要shutdown 进行,如果是临时表空间数据文件,那么没关系,重建临时表空间,再设置
2.如果是用户表空间 ,基本上是
(1)alter database datafile xx offline;
(2)然后将备份的数据文件拷贝到目标目录。
(3)recover tablespace xx ;依据情况是否是不一致性的恢复
(4) alter tablespace xx online;