Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1702811
  • 博文数量: 136
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3261
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-22 11:26
文章分类

全部博文(136)

文章存档

2010年(1)

2009年(26)

2008年(109)

我的朋友

分类: Oracle

2008-07-29 10:24:18

1. 表与索引的 move
 
表 move 后,对应的索引不会自动 move,则此时的索引已经失效,因为它指向的对应行的rowid已经不再正确。
 
SQL> select * from v$version;
 
BANNER
----------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE    9.2.0.1.0       Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production

-- (1)创建表与索引
SQL> conn tianyc/test@s9i
已连接。
SQL> create table yct1(a number(10), b varchar2(10));
 
表已创建。
 
SQL> insert into yct1 values(1,'yct1');
 
已创建 1 行。
 
SQL> commit;
 
提交完成。
 
SQL> create index ind_yct1 on yct1(a);
 
索引已创建。
 
--(2)查看表与索引所在的表空间
SQL> select SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME from user_segments;
 
SEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME
-------------------- ------------------ ------------------------------
YCT1                 TABLE              USERS
IND_YCT1             INDEX              USERS
 
--(3)查看索引的状态
SQL> select INDEX_NAME, INDEX_TYPE, TABLE_OWNER, TABLE_NAME, STATUS from user_indexes;
 
INDEX_NAME           INDEX_TYPE           TABLE_OWNER          TABLE_NAME           STATUS
-------------------- -------------------- -------------------- -------------------- -------
IND_YCT1             NORMAL               TIANYC               YCT1                 VALID
 
--(4)将表 move 到表空间 tp_test
SQL> alter table yct1 move tablespace tp_test;
 
表已更改。
 
SQL> select SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME from user_segments;
 
SEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME
-------------------- ------------------ ------------------------------
YCT1                 TABLE              TP_TEST
IND_YCT1             INDEX              USERS
 
--(5)查看索引状态:失效
SQL> select INDEX_NAME, INDEX_TYPE, TABLE_OWNER, TABLE_NAME, STATUS from user_indexes;
 
INDEX_NAME           INDEX_TYPE           TABLE_OWNER          TABLE_NAME           STATUS
-------------------- -------------------- -------------------- -------------------- --------
IND_YCT1             NORMAL               TIANYC               YCT1                 UNUSABLE
--(6)重建索引到指定表空间 tp_test
SQL> alter index IND_YCT1 rebuild tablespace tp_test;
 
索引已更改。
 
SQL> select SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME from user_segments;
 
SEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME
-------------------- ------------------ ------------------------------
YCT1                 TABLE              TP_TEST
IND_YCT1             INDEX              TP_TEST
 
SQL> select INDEX_NAME, INDEX_TYPE, TABLE_OWNER, TABLE_NAME, STATUS from user_indexes;
 
INDEX_NAME           INDEX_TYPE           TABLE_OWNER          TABLE_NAME           STATUS
-------------------- -------------------- -------------------- -------------------- -------
IND_YCT1             NORMAL               TIANYC               YCT1                 VALID
 
2. 带 LOB 字段的表的 move
 
--(1)测试表 yct1 中增加一个 lob 字段
SQL> alter table yct1 add c blob;
 
表已更改。
 
SQL> select SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME from user_segments;
 
SEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME
-------------------- ------------------ ------------------------------
YCT1                 TABLE              TP_TEST
IND_YCT1             INDEX              TP_TEST
SYS_IL0000033178C000 LOBINDEX           TP_TEST
SYS_LOB0000033178C00 LOBSEGMENT         TP_TEST
--(2)move 表和索引后,LOB 字段并没有被 move(只移动了指向该存储位置的 LOB 指针)。
SQL> alter table yct1 move tablespace users;
 
表已更改。
SQL> alter index ind_yct1 rebuild tablespace users;
 
索引已更改。
 
SQL> select SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME from user_segments;
 
SEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME
-------------------- ------------------ ------------------------------
YCT1                 TABLE              USERS
IND_YCT1             INDEX              USERS
SYS_IL0000033178C000 LOBINDEX           TP_TEST
SYS_LOB0000033178C00 LOBSEGMENT         TP_TEST
 
--(3)LOB 字段得手工移动
SQL> alter table yct1 move lob(c) store as (tablespace users);
 
表已更改。
 
SQL> select SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME from user_segments;
 
SEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME
-------------------- ------------------ ------------------------------
YCT1                 TABLE              USERS
IND_YCT1             INDEX              USERS
SYS_IL0000033178C000 LOBINDEX           USERS
SYS_LOB0000033178C00 LOBSEGMENT         USERS
 
--(4)或者在 move 表的时候,就指定同时 move LOB 字段。
SQL> alter table yct1 move tablespace tp_test lob(c) store as (tablespace tp_test);
 
表已更改。
 
SQL> alter index ind_yct1 rebuild tablespace tp_test;
 
索引已更改。
 
SQL> select SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME from user_segments;
 
SEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME
-------------------- ------------------ ------------------------------
YCT1                 TABLE              TP_TEST
IND_YCT1             INDEX              TP_TEST
SYS_IL0000033178C000 LOBINDEX           TP_TEST
SYS_LOB0000033178C00 LOBSEGMENT         TP_TEST
阅读(1871) | 评论(0) | 转发(0) |
0

上一篇:SQL - 外连接

下一篇:Oracle8.1.6 的一个 BUG

给主人留下些什么吧!~~