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

这真是原创的 呵

 

表空间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
Fixed Size                  1248576 bytes
Variable Size             130024128 bytes
Database Buffers          150994944 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
SQL> recover database;
ORA-00283: 恢复会话因错误而取消
ORA-00264: 不要求恢复


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

 

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

 

脚本:

run{
 allocate channel ch1 type disk;
 set until time "to_date('2011-07-29 10: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, 是在一次不完全恢复使用resetlogs open方式打开后备份的


 

C:\Documents and Settings\Administrator>rman target /

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

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

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

RMAN> run{
2>  allocate channel ch1 type disk;
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
Fixed Size                  1248576 bytes
Variable Size             130024128 bytes
Database Buffers          150994944 bytes
Redo Buffers                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 reset information in the file does not match the control file. Either the data file or the control file is a backup that was made before the most 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Oracle 数据库中,只读表空间无法进行更新操作,因此需要采用特殊的方式进行恢复。以下是在使用 RMAN 进行只读表空间恢复的步骤: 1. 在正常情况下,只读表空间无法进行备份。因此,我们需要在只读表空间变为可写状态之后进行备份。可以使用以下命令将只读表空间变为可写状态: ``` ALTER TABLESPACE tablespace_name READ WRITE; ``` 2. 确认只读表空间已经变为可写状态,并且进行备份。 3. 当只读表空间出现问题需要恢复时,需要先将只读表空间变为可写状态。可以使用以下命令将只读表空间变为可写状态: ``` ALTER TABLESPACE tablespace_name READ WRITE; ``` 4. 使用 RMAN 进行恢复操作。可以使用以下命令进行只读表空间恢复: ``` RMAN> RUN { SET NEWNAME FOR DATAFILE 'datafile_path' TO 'new_datafile_path'; RESTORE TABLESPACE tablespace_name; RECOVER TABLESPACE tablespace_name; } ``` 其中,`datafile_path` 是只读表空间的数据文件路径,`new_datafile_path` 是恢复后的数据文件路径。 5. 恢复完成后,将只读表空间变为只读状态。可以使用以下命令将只读表空间变为只读状态: ``` ALTER TABLESPACE tablespace_name READ ONLY; ``` 以上就是使用 RMAN 进行只读表空间恢复的步骤。需要注意的是,在进行只读表空间恢复前,必须将只读表空间变为可写状态,并进行备份。 ### 回答2: Oracle的RMAN(Recovery Manager)是一个备份和恢复工具,用于管理数据库的备份和恢复操作。在恢复只读表空间时,我们可以按照以下步骤进行操作: 1. 首先,使用RMAN备份只读表空间。我们可以使用备份命令将只读表空间备份到一个可用的位置,以便在恢复过程中将其还原回数据库。例如,可以使用类似如下的备份命令: RMAN> BACKUP TABLESPACE tablespacename; 2. 在确认备份已经完成后,我们可以开始恢复只读表空间。首先,将只读表空间离线,并清空表空间。可以使用以下SQL语句来执行此操作: SQL> ALTER TABLESPACE tablespacename OFFLINE IMMEDIATE; SQL> DROP TABLESPACE tablespacename INCLUDING CONTENTS AND DATAFILES; 3. 接下来,使用RMAN将备份的只读表空间还原到数据库。我们可以使用如下命令将备份的只读表空间还原到数据库中: RMAN> RESTORE TABLESPACE tablespacename; 4. 在还原完成后,将只读表空间重新设置为只读模式。使用以下SQL语句来执行此操作: SQL> ALTER TABLESPACE tablespacename READ ONLY; 通过以上步骤,我们可以使用RMAN备份和恢复工具来成功恢复只读表空间。需要注意的是,恢复只读表空间时需要进行足够的备份,以便能够还原到最近可用的状态,并确保在恢复过程中不会丢失任何数据。 ### 回答3: Oracle的RMAN(Recovery Manager)可以用于恢复只读表空间。以下是恢复只读表空间的步骤: 1. 首先,确定需要恢复只读表空间的名称。可以通过查询数据库的v$tablespace视图来获取表空间的信息。 2. 在RMAN命令行界面中,连接到目标数据库。 3. 运行以下命令来将表空间置为可读写状态: ``` SQL 'ALTER TABLESPACE <tablespace_name> READ WRITE'; ``` 4. 运行以下命令来检测并修复表空间的结构问题: ``` RECOVER TABLESPACE <tablespace_name>; ``` 5. 运行以下命令来还原和恢复表空间中的数据文件: ``` RESTORE TABLESPACE <tablespace_name>; RECOVER TABLESPACE <tablespace_name>; ``` 6. 最后,将表空间设置为只读状态: ``` SQL 'ALTER TABLESPACE <tablespace_name> READ ONLY'; ``` 需要注意的是,在执行恢复操作之前,最好备份数据库以及相关的数据文件。此外,恢复只读表空间可能需要一定的时间,具体取决于表空间大小和系统配置。 总之,使用RMAN工具可以方便地恢复只读表空间,确保数据库的完整性和可用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值