记一次Drop只读表空间的恢复

来源:互联网 发布:网络监控 距离 编辑:程序博客网 时间:2024/06/05 09:03

这真是原创的 呵

 

表空间USER0716为READ ONLY的表空间

 

SQL> drop tablespace user0716;
表空间已删除。

 

SQL> recover tablespace user0716;
ORA-00959: 表空间 'USER0716' 不存在


SQL> recover database;
ORA-00283: 恢复会话因错误而取消
ORA-01124: 无法恢复数据文件 1 - 文件在使用中或在恢复中
ORA-01110: 数据文件 1:'F:\ORACLE\PRODUCT\10.2.0\ORADATA\MYORACLE\SYSTEM01.DBF'

 

因为数据库是在open状态

 

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  289406976 bytes
FixedSize                 1248576 bytes
VariableSize            130024128 bytes
DatabaseBuffers         150994944 bytes
RedoBuffers               7139328 bytes
数据库装载完毕。
SQL> recover database;
ORA-00283: 恢复会话因错误而取消
ORA-00264: 不要求恢复


--因为没有什么不一致,恢复个啥!!!自己drop掉的

 

打算使用rman基于时间的恢复

 

脚本:

run{
 allocate channel ch1 type disk;
 set until time "to_date('2011-07-2910:40:00','YYYY-MM-DD hh24:mi:ss')";
 restore database;
 recover database;
 release channel ch1;
}

 

'2011-07-29 10:40:00' 这个时间还没有drop表空间

 

注: 最近一次rman全备是在2011-07-29 00:09:00, 是在一次不完全恢复使用resetlogsopen方式打开后备份的


 

C:\Documents and Settings\Administrator>rmantarget /

恢复管理器: Release 10.2.0.1.0 - Production on 星期五 7月 29 13:22:472011

Copyright (c) 1982, 2005, Oracle.  All rightsreserved.

已连接到目标数据库: MYORACLE (DBID=1854006956, 未打开)

RMAN> run{
2>  allocate channel ch1 typedisk;
3>  set until time"to_date('2011-07-29 10:40:00','YYYY-MM-DD hh24:mi:ss')";
4>  restore database;
5>  recover database;
6>  release channel ch1;
7> }

使用目标数据库控制文件替代恢复目录
分配的通道: ch1
通道 ch1: sid=155 devtype=DISK

正在执行命令: SET until clause

启动 restore 于 29-7月 -11

通道 ch1: 正在开始恢复数据文件备份集
通道 ch1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到F:\ORACLE\PRODUCT\10.2.0\ORADATA\MYORACLE\SYSTEM01.DBF
正将数据文件00002恢复到F:\ORACLE\PRODUCT\10.2.0\ORADATA\MYORACLE\UNDOTBS01.DBF
正将数据文件00003恢复到F:\ORACLE\PRODUCT\10.2.0\ORADATA\MYORACLE\SYSAUX01.DBF
正将数据文件00004恢复到F:\ORACLE\PRODUCT\10.2.0\ORADATA\MYORACLE\USERS01.DBF
正将数据文件00005恢复到F:\ORACLE\PRODUCT\10.2.0\ORADATA\MYORACLE\EXAMPLE01.DBF
通道 ch1: 正在读取备份段F:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYORACLE\B
ACKUPSET\2011_07_29\O1_MF_NNNDF_TAG20110729T000748_7332BRB8_.BKP
通道 ch1: 已恢复备份段 1
段句柄 =F:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYORACLE\BACKUPSET\2011_07
_29\O1_MF_NNNDF_TAG20110729T000748_7332BRB8_.BKP 标记 =TAG20110729T000748
通道 ch1: 恢复完成, 用时: 00:01:46
完成 restore 于 29-7月 -11

启动 recover 于 29-7月 -11

正在开始介质的恢复
介质恢复完成, 用时: 00:00:10

完成 recover 于 29-7月 -11

释放的通道: ch1

 

SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area  289406976 bytes
FixedSize                 1248576 bytes
VariableSize            130024128 bytes
DatabaseBuffers         150994944 bytes
RedoBuffers               7139328 bytes
数据库装载完毕。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


SQL> alter database open resetlogs;

数据库已更改。

 

--查一下dba_data_files发现属于user0716只读表空间的数据文件是offline状态

 

SQL> alter database datafile 6 online;
alter database datafile 6 online
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01111: 数据文件 6 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 6:'F:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING00006'


SQL> alter database rename file'F:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING0
0006' to'F:\oracle\product\10.2.0\oradata\myoracle\MYORACLE\DATAFILE\O1_MF_USER
0716_723C8OXS_.DBF';

数据库已更改。

SQL> alter database datafile 6 online;
alter database datafile 6 online
*
第 1 行出现错误:
ORA-01190: 控制文件或数据文件 6 来自最后一个 RESETLOGS 之前
ORA-01110: 数据文件 6:
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\MYORACLE\MYORACLE\DATAFILE\O1_MF_USER0716_723C

8OXS_.DBF'

 

 数据文件6来自最后一个 RESETLOGS 之前? 也就是刚才的resetlogs之前

 

查资料:

Cause: Attempting to use a data file when the log resetinformation in the file does not match the control file. Either thedata file or the control file is a backup that was made before themost recent ALTER DATABASE OPEN RESETLOGS.
Action: Restore file from a more recent backup.

 

 那就试试直接recover

 

SQL> recover datafile 6;
ORA-00283: 恢复会话因错误而取消
ORA-00264: 不要求恢复

 

??不要求恢复? 那应该是一致的呀 为什么报ora-01190的错误!?


SQL> alter database datafile 6 online;
alter database datafile 6 online
*
第 1 行出现错误:
ORA-01190: 控制文件或数据文件 6 来自最后一个 RESETLOGS 之前
ORA-01110: 数据文件 6:
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\MYORACLE\MYORACLE\DATAFILE\O1_MF_USER0716_723C

8OXS_.DBF'


SQL> alter tablespace user0716 online;

表空间已更改。

SQL> alter database datafile 6 online;

数据库已更改。

 

?这样就OK了 为什么,不用设置隐含参数_allow_resetlogs_corruption解决ora-01190??

倒数第二个resetlogs open是我在重建controlfile的时候使用的,之后backup database了

这次基于时间点恢复使用的备份集就是这个备份

drop表空间时未删除数据文件,restore的时候为什么不见datafile 6的restore?

因为是只读表空间的restore吗

 

先写到这,问问专家去

 

看来ora-01190需要具体分析,不要随便设置隐含参数

 


 

0 0
原创粉丝点击