ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【表空间】脱机的四种选项

【表空间】脱机的四种选项

原创 Linux操作系统 作者:niuxxf 时间:2012-12-05 09:37:59 0 删除 编辑

可以将联机的表空间脱机,当表空间为脱机状态的时候,任何用户都访问不了它(需要注意的是,system表空间无法脱机,因为数据库运行中,始终都会用到system表空间中的数据)。表空间脱机有如下四个选项:

1)Normal(正常):normal可写可不写,默认情况下即为normal

2)Temporary(临时)

3)Immediate(立即)

4)For Recover(进行恢复):FOR RECOVER 设置已被淘汰。支持此语法的目的是为了实现向后兼容。

一、表空间脱机(normal)测试

SYS@ORA11GR2>col name for a48

SYS@ORA11GR2>select t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

NAME                                             STATUS

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

/u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf ONLINE

/u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf ONLINE

 

SYS@ORA11GR2>alter tablespace ts_users offline normal;

 

Tablespace altered.

 

SYS@ORA11GR2>select t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

NAME                                             STATUS

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

/u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf OFFLINE

/u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf OFFLINE

 

SYS@ORA11GR2>alter tablespace ts_users online;

 

Tablespace altered.

 

SYS@ORA11GR2>select t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

NAME                                             STATUS

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

/u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf ONLINE

/u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf ONLINE

 

SYS@ORA11GR2>

二、表空间脱机(temporary)测试

1)查看表空间TS_USERS的状态,均为在线状态

SYS@ORA11GR2>select t.file#,t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

     FILE# NAME                                             STATUS

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

         6 /u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf ONLINE

         7 /u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf ONLINE

 

SYS@ORA11GR2>

2)将7号数据文件修改为脱机状态

SYS@ORA11GR2>alter database datafile 7 offline;

 

Database altered.

 

SYS@ORA11GR2>

注:执行上面alter命令,数据库必须处于归档模式,否则会报如下错误

ORA-01145: offline immediate disallowed unless media recovery enabled

3)查看修改后,数据文件的状态,我们会发现,7号数据文件的状态为RECOVER,也就是说,这个数据文件如果要修改为online的话,那么需要做恢复的操作。

SYS@ORA11GR2>select t.file#,t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

     FILE# NAME                                             STATUS

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

         6 /u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf ONLINE

         7 /u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf RECOVER

 

SYS@ORA11GR2>

4)我们将表空间ts_users修改为offline状态,此时报错了,因为表空间ts_users的一个数据文件已经是offline状态了,此时要么将7号文件修改为online状态,要么就使用Temporary参数

SYS@ORA11GR2>alter tablespace ts_users offline normal;

alter tablespace ts_users offline normal

*

ERROR at line 1:

ORA-01191: file 7 is already offline - cannot do a normal offline

ORA-01110: data file 7: '/u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf'

 

 

SYS@ORA11GR2>

5)使用Temporary参数使表空间ts_users修改为脱机状态

SYS@ORA11GR2>alter tablespace ts_users offline temporary;

 

Tablespace altered.

 

SYS@ORA11GR2>

6)查看表空间ts_users的两个数据文件的状态,我们可以看到6号数据文件的状态已经改为offline了,7号数据文件仍然是recover

SYS@ORA11GR2>select t.file#,t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

     FILE# NAME                                             STATUS

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

         6 /u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf OFFLINE

         7 /u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf RECOVER

 

SYS@ORA11GR2>

7)如果我们利用alter命令修改表空间为在线状态,会提示7号数据文件需要recover

SYS@ORA11GR2>alter tablespace ts_users online;

alter tablespace ts_users online

*

ERROR at line 1:

ORA-01113: file 7 needs media recovery

ORA-01110: data file 7: '/u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf'

 

 

SYS@ORA11GR2>

8)恢复完成后,我们再看一下数据文件的状态,7号数据文件已经变为offline,此时应该可以online了

SYS@ORA11GR2>recover datafile 7;

Media recovery complete.

SYS@ORA11GR2>select t.file#,t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

     FILE# NAME                                             STATUS

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

         6 /u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf OFFLINE

         7 /u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf OFFLINE

 

SYS@ORA11GR2>

9)此时可以将表空间ts_users成功修改为online状态

SYS@ORA11GR2>alter tablespace ts_users online;

 

Tablespace altered.

 

SYS@ORA11GR2>select t.file#,t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

     FILE# NAME                                             STATUS

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

         6 /u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf ONLINE

         7 /u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf ONLINE

 

SYS@ORA11GR2>

三、表空间脱机(immediate)测试

1)查看表空间ts_users的两个数据文件的状态,均为online

SYS@ORA11GR2>select t.file#,t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

     FILE# NAME                                             STATUS

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

         6 /u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf ONLINE

         7 /u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf ONLINE

 

SYS@ORA11GR2>

2)以immediate方式脱机表空间ts_users

SYS@ORA11GR2>alter tablespace ts_users offline immediate;

 

Tablespace altered.

 

SYS@ORA11GR2>

3)表空间ts_users以immediate方式脱机后数据文件的状态均为recover,即,如果需要online,那么就需要recover

SYS@ORA11GR2>select t.file#,t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

     FILE# NAME                                             STATUS

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

         6 /u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf RECOVER

         7 /u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf RECOVER

 

SYS@ORA11GR2>

4)我们尝试将表空间ts_users修改为online,结果是意料之中的,需要恢复数据文件

SYS@ORA11GR2>alter tablespace ts_users online;

alter tablespace ts_users online

*

ERROR at line 1:

ORA-01113: file 6 needs media recovery

ORA-01110: data file 6: '/u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf'

 

 

SYS@ORA11GR2>

5)上面提示恢复6号数据文件,

SYS@ORA11GR2>recover datafile 6;

Media recovery complete.

SYS@ORA11GR2>

6)6号数据文件恢复完成后,我们再看一下数据文件的状态,如我们想象(做到此处时,应该可以想象得到结果),6号数据文件offline,7号数据文件依旧是recover

SYS@ORA11GR2>select t.file#,t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

     FILE# NAME                                             STATUS

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

         6 /u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf OFFLINE

         7 /u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf RECOVER

 

SYS@ORA11GR2>

7)我们不用等oracle提示我们恢复7号数据文件了,自己主动恢复吧

SYS@ORA11GR2>recover datafile 7;

Media recovery complete.

SYS@ORA11GR2>

8)恢复完成后,查看数据文件的状态,均为offline,此时应该可以修改为online了

SYS@ORA11GR2>select t.file#,t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

     FILE# NAME                                             STATUS

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

         6 /u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf OFFLINE

         7 /u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf OFFLINE

 

SYS@ORA11GR2>

9)此时再将表空间ts_users改为online状态,成功完成

SYS@ORA11GR2>alter tablespace ts_users online;

 

Tablespace altered.

 

SYS@ORA11GR2>select t.file#,t.name,t.status from v$tablespace d,v$datafile t where d.TS#=t.TS# and d.name='TS_USERS';

 

     FILE# NAME                                             STATUS

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

         6 /u01/app/oracle/oradata/ORA11GR2/ts_users_01.dbf ONLINE

         7 /u01/app/oracle/oradata/ORA11GR2/ts_users_02.dbf ONLINE

 

SYS@ORA11GR2>

四、小结

1)Normal(正常):如果表空间中的任何数据文件不存在任何错误状态,通过正常方式便可使表空间脱机。当 Oracle 数据库使表空间脱机时,通过对表空间中的所有数据文件设置检查点,可以确保将所有数据写入磁盘。

2)Temporary(临时):如果表空间中的一个或多个文件存在错误状态,也可以使表空间暂时脱机。当 Oracle 数据库使(尚未脱机的)数据文件脱机时,会对这些数据文件设置检查点。如果没有任何文件脱机,但是您使用了临时子句,使表空间重新联机时便不需要执行介质恢复。但是,如果因写错误而导致表空间的一个或多个文件脱机,而且设置了表空间临时脱机,那么表空间需要执行恢复后才能重新联机。

3)Immediate(立即):表空间可以立即脱机,Oracle 数据库不需要对任何数据文件设置检查点。如果指定了“Immediate(立即)”,则必须先对表空间执行介质恢复 recover tablespace ,才能使表空间联机。如果数据库在 NOARCHIVELOG 模式下运行,则无法立即使表空间脱机。





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

请登录后发表评论 登录
全部评论

注册时间:2008-02-21

  • 博文量
    44
  • 访问量
    131607