ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Tablespace Offline

Tablespace Offline

原创 Linux操作系统 作者:ylw66 时间:2009-11-10 13:18:00 0 删除 编辑

准备

SQL> drop tablespace yang including contents;

表空间已丢弃。

 

SQL> create tablespace yang

  2  logging

  3  datafile 'd:\oracle\oradata\game\yang.ora' size 10m reuse

  4  autoextend

  5  on maxsize unlimited

  6  extent management local

  7  segment space management auto;

表空间已创建。

 

SQL> alter user yang default tablespace yang;

用户已更改。

 

SQL> conn yang/yang

已连接。

SQL> create table test as select * from dba_objects;

表已创建。

 

SQL> select count(*) from test;

  COUNT(*)

----------

     30025

 

1 表空间offline,无法访问表空间的表

SQL> conn /as sysdba

已连接。

SQL> alter tablespace yang offline;

表空间已更改。

 

SQL> select count(*) from test;

select count(*) from test

                     *

ERROR 位于第 1 行:

ORA-00376: 此时无法读取文件 15

ORA-01110: 数据文件 15: 'D:\ORACLE\ORADATA\GAME\YANG.ORA'

2 在某个transaction执行中offline表空间

step 1: 将表的容量加到20万

SQL> select count(*) from test;

 

  COUNT(*)

----------

210175

 

step 2:test表执行大数据量的update

SQL> update test set object_name = upper(object_name);

 

step 3: 在update还没有结束时,offline该表所在的表空间

SQL> alter tablespace yang offline;

表空间已更改。

 

step 4: 此时update报错

update test set object_name = upper(object_name)

*

ERROR 位于第 1 行:

ORA-00376: 此时无法读取文件 15

ORA-01110: 数据文件 15: 'D:\ORACLE\ORADATA\GAME\YANG.ORA'

 

step 5: online表空间

 SQL> alter tablespace yang online;

表空间已更改。

 

step 6: 查询test表发现数据并没有改变,

SQL> select object_name from test where rownum<5;

 

当offline tablespace时,如果存在active transaction在使用这个tablespace的数据,会保留旧的数据保留在回滚段上,这样在online时,会将对这部分数据rollback

 

3 表使用的数据所在的tablespace offline


step 1:创建索引到表空间yang2上

SQL> create index test_index on test(object_id) tablespace yang2;

索引已创建。

 

SQL> set autotrace on

SQL> select * from test where object_id =34099;

Execution Plan

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

   0      SELECT STATEMENT ptimizer=CHOOSE

   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'TEST'

   2    1     INDEX (RANGE SCAN) OF 'TEST_INDEX' (NON-UNIQUE)

 

step2:offline tablespace yang2

SQL> alter tablespace yang2 offline;

表空间已更改。

 

step3:需要使用索引查询

SQL> select * from test where object_id =34099;

select * from test where object_id =34099

              *

ERROR 位于第 1 行:

ORA-00376: 此时无法读取文件 16

ORA-01110: 数据文件 16: 'D:\ORACLE\ORADATA\GAME\YANG2.ORA'

 

本来认为如果将索引所在的表空间offline后,查询该表的数据就不走索引但能访问数据,但没想到会报错。而且试了9i和10g都是如此处理的

 

所以Concepts的某些翻译中的这句话是有问题的:

如果包含索引的表空间脱机,那么查询依旧可以访问表数据,因为对表数据的访问并不一定需要索引数据。

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

上一篇: Hint - FIRST_ROWS
请登录后发表评论 登录
全部评论

注册时间:2009-07-29

  • 博文量
    57
  • 访问量
    107662