Oracle 12C R2-新特性-在线移动表
非分区表可以作在线移动,而不阻止任何并发DML操作。 表移动操作现在还支持自动索引维护作为移动的一部分。
对非分区表的数据维护不需要任何维护窗口,因为它不影响任何DML或查询操作。https://www.cndba.cn/Expect-le/article/1765
https://www.cndba.cn/Expect-le/article/1765
1
移动一个表到一个新的段或者表空间
可以在线移动表,分区,子分区。语法如下:
·ALTER TABLE ... MOVE ... ONLINE
·ALTER TABLE ... MOVE PARTITION ... ONLINE
·ALTER TABLE ... MOVE SUBPARTITION ... ONLINE
移动表会更改表中行的rowid。 如果移动表并包括ONLINE关键字和UPDATE INDEXES子句,则索引在移动操作期间仍可用。 如果包括UPDATE INDEXES子句但不包括ONLINE关键字,则索引可在移动操作后立即使用。UPDATE INDEXES子句只能更改表上全局索引的存储属性或表上任何全局分区索引的索引分区的存储属性。 如果不包括UPDATE INDEXES子句,则对rowid的更改将导致表上的索引标记为UNUSABLE,并且使用这些索引访问表的DML会收到ORA-01502错误。 在这种情况下,必须删除或重建表上的索引。
移动操作会导致表的统计信息无效,所以要在移动表之后立即收集新的统计信息。
https://www.cndba.cn/Expect-le/article/1765
如果表包含LOB列,则此语句可用于将表连同明确指定的LOB数据和LOB索引段(与此表关联)移动。 如果未指定,则缺省为不移动LOB数据和LOB索引段。https://www.cndba.cn/Expect-le/article/1765
2
移动表
当对此语句使用ONLINE关键字时,数据操作语言(DML)操作可以继续在正在移动的表上不间断运行。 如果不包括ONLINE关键字,则在移动操作期间,不能对表中的数据进行并发DML操作。https://www.cndba.cn/Expect-le/article/1765https://www.cndba.cn/Expect-le/article/1765
例子:
2.1
创建一个表,索引:
https://www.cndba.cn/Expect-le/article/1765
SQL> CREATE TABLE dept_exp (
DEPTNO NUMBER (2) NOT NULL,
DNAME VARCHAR2 (14),
LOC VARCHAR2 (13))
TABLESPACE tbs_1; 2 3 4 5
Table created.
SQL> CREATE INDEX i1_deptno ON dept_exp(deptno) TABLESPACE tbs_1;
Index created.
SQL> CREATE INDEX i2_dname ON dept_exp(dname) TABLESPACE tbs_1;
Index created.
SQL> COL TABLE_NAME FOR A20;
SQL> COL TABLESPACE_NAME FOR A30
SQL> SELECT TABLE_NAME,TABLESPACE_NAME FROM DBA_TABLES WHERE TABLE_NAME ='DEPT_EXP';
TABLE_NAME TABLESPACE_NAME
-------------------- ------------------------------
DEPT_EXP TBS_
2.2
将表移动到新的表空间tbs_2.
https://www.cndba.cn/Expect-le/article/1765
SQL> ALTER TABLE dept_exp MOVE ONLINE
COMPRESS TABLESPACE tbs_2
UPDATE INDEXES
(i1_deptno TABLESPACE tbs_1,
i2_dname TABLESPACE tbs_2); 2 3 4 5
Table altered.
https://www.cndba.cn/Expect-le/article/1765
2.3
验证
2.3.1
查看表所属表空间
https://www.cndba.cn/Expect-le/article/1765
SQL> COL TABLE_NAME FOR A20;
SQL> COL TABLESPACE_NAME FOR A30
SQL> SELECT TABLE_NAME,TABLESPACE_NAME FROM DBA_TABLES WHERE TABLE_NAME ='DEPT_EXP';
TABLE_NAME TABLESPACE_NAME
-------------------- ------------------------------
DEPT_EXP TBS_2
2.3.2
查看索引状态
SQL> COL INDEX_NAME FOR A20
SQL> SELECT INDEX_NAME,TABLE_NAME,STATUS FROM DBA_INDEXES WHERE TABLE_NAME='DEPT_EXP';
INDEX_NAME TABLE_NAME STATUS
-------------------- -------------------- ----------------
I1_DEPTNO DEPT_EXP VALID
I2_DNAME DEPT_EXP VALID
版权声明:本文为博主原创文章,未经博主允许不得转载。
在线移动表