只读表空间的恢复问题--预备知识

1. 预备知识

将表空间设置为只读,可以防止用户对表空间中的数据文件执行写入操作。然而,这也使得系统进程同样无法完成文件头的写入操作。这将对系统在执行checkpointresetlogs之类修改文件头的等操作产生影响。

要全面理解只读表空间的恢复问题,我们首先要搞清楚表空间、数据文件状态的改变,与控制文件之间存在着哪些联系:

1.1 控制文件自动备份

首先,当表空间状态发生改变时,系统将启动控制文件自动备份操作。

sys@STUDY>alter tablespace users read only;

Tablespace altered.

我们来查看alert.log文件:

Thu Jun 24 13:05:38 2010

alter tablespace users read only

Thu Jun 24 13:05:38 2010

Starting control autobackup

Control autobackup written to DISK device

handle 'C:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREASTUDYAUTOBACKUP2010_06_24O1_MF_S_722523938_625SX4G5_.BKP'

Completed: alter tablespace users read write

如果alert.log文件被删除了也不要紧,我们可以在V$BACKUP_CONTROLFILE_DETAILS视图中查询系统自动备份控制文件的详细信息。

sys@STUDY>select btype_key, id1, id2, creation_time from v$backup_controlfile_details;

BTYPE_KEY ID1 ID2 CREATION_TIME

--------- ---------- ---------- -------------------

63 722516269 68 2008-04-22 16:50:16

64 722516931 69 2008-04-22 16:50:16

65 722523938 70 2008-04-22 16:50:16

为了显示方便,以上结果部分被省略了。

当数据文件被置为read only后,系统将修改文件头,将系统当前的SCN记录在Checkpoint_change#last_change#中。注意,此处系统并未执行CKPT

sys@STUDY>select file#, checkpoint_change#, last_change#, offline_change#, online_change# from v$datafile;

FILE# CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# ONLINE_CHANGE#

---------- -------------- ---------- --------------- --------------

1 2147692 534906 534907

2 2147692 534906 534907

3 2147692 534906 534907

4 2151527 2151527 2145970 2150425

5 2147692 0 0

7 2147692 0 0

8 2147692 0 0

进一步实验我们可以发现:只要表空间状态发生改变(online, offlineread only, read write),系统均会自动进行控制文件的备份操作。

如果我们将数据文件的状态设为offline

alter database datafile 4 offline;

alert.log文件中将记录,但系统并不进行控制文件的自动备份。

Thu Jun 24 15:38:27 2010

alter database datafile 4 offline

Thu Jun 24 15:38:27 2010

Completed: alter database datafile 4 offline

下一次重新online数据文件时:

alter database datafile 4 online;

alert.log文件中将记录,并执行控制文件的自动备份。

Thu Jun 24 15:45:54 2010

alter database datafile 4 online

Thu Jun 24 15:45:54 2010

Starting control autobackup

Control autobackup written to DISK device

handle 'C:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREASTUDYAUTOBACKUP2010_06_24O1_MF_S_722533554_62639MC7_.BKP'

Completed: alter database datafile 4 online

了解控制文件备份的位置,对于我们运用using backup controlfile来实现数据库的不完全恢复非常重要。如果所有的备份控制文件都丢失了,那么只能通过执行控制文件重建脚本来完成恢复操作。

1.2 控制文件记录数据文件

对于只读表空间,由于无法对其进行更改,因此系统假设其不需要恢复,其中的数据文件并没有包含在控制文件中。

sys@STUDY>alter database backup controlfile to trace;

对应的跟踪文件中有关数据文件的代码段:

DATAFILE

'C:ORACLEPRODUCT10.2.0ORADATASTUDYSYSTEM01.DBF',

'C:ORACLEPRODUCT10.2.0ORADATASTUDYUNDOTBS01.DBF',

'C:ORACLEPRODUCT10.2.0ORADATASTUDYSYSAUX01.DBF',

'C:ORACLEPRODUCT10.2.0ORADATASTUDYEXAMPLE01.DBF',

'C:ORACLEPRODUCT10.2.0ORADATASTUDYRMAN01.DBF',

'C:ORACLEPRODUCT10.2.0ORADATASTUDYPERFSTATS01.DBF'

可以看到,其中没有记录USER01.DBF的信息。

进一步,我们尝试将Users表空间变为offline;然后导出控制文件,我们发现Users中的数据文件同样没有记录在控制文件中。这是由于系统同样认为脱机表空间也同样不需要恢复。

1.3 小结

如下图所示,表空间与控制文件间的关系如下:

表空间状态控制文件操作
自动备份记录数据文件
offline×
onlineread only×
read write

综上所述,系统对只读表空间和脱机表空间的恢复过程中的操作是非常类似的。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20162/viewspace-1034620/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20162/viewspace-1034620/

  • 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、付费专栏及课程。

余额充值