oracle系统空间可以脱机吗,【表空间】脱机的四种选项

可以将联机的表空间脱机,当表空间为脱机状态的时候,任何用户都访问不了它(需要注意的是,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 模式下运行,则无法立即使表空间脱机。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值