一:恢复到上一次备份时
1.恢复spfile
$:sqlplus "/as sysdba"
sql:shutdown
sql:startup
---error
设置环境变量
$:export ORACLE_SID=orcl
寻找安装数据库时产生的pfile文件,一般在如下文件夹下
$:cd /u01/app/oracle/admin/orcl/pfile
此时启动数据库
sql:startup pfile='/u01/app/oracle/admin/orcl/pfile';
此时数据库会启动到nomount状态
可以通过select instance_name,status from v$instance查看是否有数据判断是否进入nomount状态
下一步恢复正真的spfile文件
$:rman target/
rman:restore spfile from autobackup
现在可以进入dbs目录查看是否有spfile文件生成
现在可以shutdown immediate也可以启动数据库到startup nomount状态,同时可以查看曾经的数据库参数show parameter spfile
查看参数必须要重新启动
2.恢复controlfile
上面回复了spfile,然后
sql:startup nomount
$:rman target/
rman:restore controlfile from autobackup
此时数据库控制文件已经恢复,可以在/u01/app/oracle/oradata/orcl/文件夹下看是否有controlfile文件生成
3.恢复数据库文件
恢复controlfile文件后
sql:startup mount -------这一步也可以在rman target/ 中运行alter database mount
rman:restore database
此时可以查看是否有数据库dbf文件生成,然后
sql:recover database using backup controlfile until cancel
在此语句执行过程中,有个地方停顿需要输入cancel
4.恢复重做数据库日志文件
由于是所有文件都丢失,所以这里是不完全恢复,日志文件是重建而不是恢复
sql:startup mount
sql:alter database open resetlogs
现在可以验证数据库的日志序列是否重新开启archive log list
此属于不玩全恢复,以前的备份将不能够使用,所以现在赶紧备份整个数据库
rman:backup database
完成
二:将数据库恢复到某个时间点或者某个scn
记录一下你要恢复到的时间点,比如说 2012-12-21 20:13:14前面要设置时间格式比如说:sql:alter session set nls_date_format='yyyymmdd hh24:mi:ss'
设置数据库环境
sql:shutdown immediate
$export ORACLE_SID=orcl
$rman target/
rman:startup mount
rman:restore database
----------------此处两句任选择一句执行--------------------------------------
rman:sql 'alter session set nls_date_format='yyyymmdd hh24:mi:ss'
rman:recover database until scn scn_number
-------------------------------------------------------------------------------------
rman:recover database until time '20121221 20:13:14'
rman:sql 'alter database open resetlogs'
此处也是不完全恢复,日志文件重建,可以启动数据库后也必须完全备份数据库,以前的备份也将不能用
完成到此处验证日志文件 sql:archive log list
附:提供scn与时间之间对应关系
select to_char(scn_to_timestamp(scn_number),'yyyy-mm-dd hh24:mi:ss') from dual ---------scn转时间
select timestamp_to_scn(to_date('2012-12-21 20:13:14','yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual -------------时间转scn
select sysdate,dbms_flashback.get_system_change_number from dual ------------得到当前scn与当前时间