alter table xx move tablespace xx

转载 2007年09月11日 16:54:00

SQL> select table_name,tablespace_name from user_tables where table_name='T_NEW';

TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
T_NEW USERS

SQL> select num_rows,blocks,last_analyzed from user_tables where table_name='T_NEW';

NUM_ROWS BLOCKS LAST_ANALYZED
---------- ---------- --------------
50024 180 31-8月 -07

SQL> ALTER TABLE T_NEW MOVE TABLESPACE TEST;

表已更改。

SQL> select num_rows,blocks,last_analyzed from user_tables where table_name='T_NEW';

NUM_ROWS BLOCKS LAST_ANALYZED
---------- ---------- --------------
50024 180 31-8月 -07

发现统计表的信息依然存在.

但是10G的文档是这么说的:
Moving a table changes the rowids of the rows in the table. This causes indexes on the table to be marked UNUSABLE, and DML accessing the table using these indexes will receive an ORA-01502 error. The indexes on the table must be dropped or rebuilt. Likewise, any statistics for the table become invalid and new statistics should be collected after moving the table.

SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'T_NEW');
BEGIN DBMS_STATS.GATHER_TABLE_STATS(USER,'T_NEW'); END;

*
第 1 行出现错误:
ORA-20000: index "TEST"."IND_T" or partition of such index is in unusable
state
ORA-06512: 在 "SYS.DBMS_STATS", line 13056
ORA-06512: 在 "SYS.DBMS_STATS", line 13076
ORA-06512: 在 line 1


SQL> DESC USER_INDEXES
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
INDEX_NAME NOT NULL VARCHAR2(30)
INDEX_TYPE VARCHAR2(27)
TABLE_OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
TABLE_TYPE VARCHAR2(11)
UNIQUENESS VARCHAR2(9)
COMPRESSION VARCHAR2(8)
PREFIX_LENGTH NUMBER
TABLESPACE_NAME VARCHAR2(30)
INI_TRANS NUMBER
MAX_TRANS NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
PCT_INCREASE NUMBER
PCT_THRESHOLD NUMBER
INCLUDE_COLUMN NUMBER
FREELISTS NUMBER
FREELIST_GROUPS NUMBER
PCT_FREE NUMBER
LOGGING VARCHAR2(3)
BLEVEL NUMBER
LEAF_BLOCKS NUMBER
DISTINCT_KEYS NUMBER
AVG_LEAF_BLOCKS_PER_KEY NUMBER
AVG_DATA_BLOCKS_PER_KEY NUMBER
CLUSTERING_FACTOR NUMBER
STATUS VARCHAR2(8)
NUM_ROWS NUMBER
SAMPLE_SIZE NUMBER
LAST_ANALYZED DATE
DEGREE VARCHAR2(40)
INSTANCES VARCHAR2(40)
PARTITIONED VARCHAR2(3)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
BUFFER_POOL VARCHAR2(7)
USER_STATS VARCHAR2(3)
DURATION VARCHAR2(15)
PCT_DIRECT_ACCESS NUMBER
ITYP_OWNER VARCHAR2(30)
ITYP_NAME VARCHAR2(30)
PARAMETERS VARCHAR2(1000)
GLOBAL_STATS VARCHAR2(3)
DOMIDX_STATUS VARCHAR2(12)
DOMIDX_OPSTATUS VARCHAR2(6)
FUNCIDX_STATUS VARCHAR2(8)
JOIN_INDEX VARCHAR2(3)
IOT_REDUNDANT_PKEY_ELIM VARCHAR2(3)
DROPPED VARCHAR2(3)

SQL> SELECT INDEX_NAME,TABLE_NAME FROM USER_INDEXES;

INDEX_NAME TABLE_NAME
------------------------------ ------------------------------
SYS_C005548 EMP
IND_T T_NEW
SYS_C005541 BOOKS
SYS_C005540 AUTHORS
SYS_C005547 DEPT
SYS_C005536 T
IND_FLA1 FLASH1

已选择7行。

SQL> ALTER INDEX IND_T REBUILD;

索引已更改。

SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'T_NEW');

PL/SQL 过程已成功完成。

SQL> SELECT TABLE_NAME, NUM_ROWS, BLOCKS, LAST_ANALYZED FROM USER_TABLES WHERE TABLE_NAME ='T_NEW';

TABLE_NAME NUM_ROWS BLOCKS LAST_ANALYZED
------------------------------ ---------- ---------- --------------
T_NEW 50024 136 03-9月 -07


重新进行表分析后发现索引是已经失效了!
需要重建索引,重新分析后,发现BLOCKS减少
 

关于 alter table move tablespace 的一点理解

测试一: SQL> alter table hlj move tablespace test; alter table hlj move tablespace test             * E...
  • royjj
  • royjj
  • 2014年12月03日 22:33
  • 2496

alter table move 与shrink space的区别

案例: 同事将一关键表中删了多余的300w条数据后,程序就变的异常缓慢。分析得出,应该是表空间碎片过多,旧的索引效率过低。 执行下面两句话: alter table ycsbt_qyyg...
  • zhjxixi
  • zhjxixi
  • 2012年06月13日 23:15
  • 7379

ALTER TABLE...MOVE 相关使用方法

1.  The ALTER TABLE...MOVE statement enables you to relocate data of a non-partitioned table or of a...
  • rudymatrix
  • rudymatrix
  • 2009年12月15日 16:59
  • 13747

oracle alter table详解

ALTER TABLE (表名) ADD (列名 数据类型); ALTER TABLE (表名) MODIFY (列名 数据类型); ALTER TABLE (表名) RENAME COLUMN ...
  • Magister_Feng
  • Magister_Feng
  • 2011年12月13日 15:48
  • 429

Oracle中 Alter Table 语句的使用

alter table 的功能是修改表格。包括重名命,加减字段,修改字段类型和大小,处理 约束等等。本例子之处理表名和字段,代码如下:  create table liu(a varchar2(20)...
  • ak47947
  • ak47947
  • 2008年03月15日 01:56
  • 13204

MYSQL表空间迁移。

表空间迁移。 有如下原因你可能需要将InnoDB表复制到不同的数据库服务器上。 不增加生产负载的情况下生成 一个报表 在一个新的服务器上建立一个和生产上数据相同的表 做一个备份在发生问题或错误...
  • henrybai
  • henrybai
  • 2013年10月15日 13:41
  • 8122

ORACLE MOVE表空间

move一个表到另外一个表空间时,索引不会跟着一起move,而且会失效(LOB类型例外)。做表空间转移之前,被转移表的用户必须在目的表空间上有使用表空间的权限,否则会报错:ORA-01950: no ...
  • huaishu
  • huaishu
  • 2013年12月05日 17:39
  • 993

oracle LOB 大对象的表Move方法

       对于LOB型的表,数据量比较大的话,比如单个表的大对象有6G以上的话,使用导入和导出的方法是比较浪费时间的,并且不划算。本人测试过在P4 2.4G 1G内存 的一般工作站使用imp/dm...
  • radkitty
  • radkitty
  • 2007年11月14日 21:36
  • 8193

alter table xx move tablespace xx

SQL> select table_name,tablespace_name from user_tables where table_name=T_NEW;TABLE_NAME TABLESPACE...
  • hailang99
  • hailang99
  • 2007年09月11日 16:54
  • 4711

如果必须要重建表,alter table ...move tablespace...绝对是第一选择

If you have to rebuild a table,always consider the 'move' command first.Availability can be reduced,...
  • qq_20327293
  • qq_20327293
  • 2015年08月20日 15:38
  • 635
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:alter table xx move tablespace xx
举报原因:
原因补充:

(最多只允许输入30个字)