将表移动到另一个表空间
基本上,移动 Oracle 表可以对数据进行碎片整理并使其紧凑,从而在执行查询时获得一些好处。其次,我们将它移动到另一个表空间,以便在拥挤的表空间中腾出空间。
1. 改变表移动
传统上,我们使用ALTER TABLE MOVE子句来移动没有任何修饰符的表。也就是说,它会在原表空间中移动表,你应该有足够的空间来执行转换。
SQL> alter table hr.employees move;
Table altered.
SQL> select tablespace_name from all_tables where owner = 'HR' and table_name = 'EMPLOYEES';
TABLESPACE_NAME
------------------------------
EXAMPLE如果在移动表时可能会出现ORA-14511 错误,则表示该表是分区表,不能像普通表一样移动它。您应该使用另一种方式来移动您的分区表( Oracle:Alter Table 将分区移动到另一个表空间)。
2. ALTER TABLE 移动表空间
要将表移动到另一个地方并为原始表空间腾出一些空间,您可以指定表空间。
SQL> alter table hr.employees move tablespace users;
Table altered.
SQL> select tablespace_name from all_tables where owner = 'HR' and table_name = 'EMPLOYEES';
TABLESPACE_NAME
------------------------------
USERS该表已从表空间EXAMPLE 移至USERS。
3. ALTER TABLE 在线移动
从 12.2 版本开始,我们可以使用ONLINE修饰符来让我们移动表而不会阻塞事务,如数据操作语言 (DML)。这个特性就像我们在网上重建索引时所做的一样。
SQL> alter table hr.employees move tablespace users online;
Table altered.4. ALTER TABLE 平行移动
此外,我们可以并行移动桌子。
SQL> alter table hr.employees move tablespace users online parallel 16;
Table altered.最好的是,这张表的并行度(DOP)不受这条语句的影响。
SQL> column degree format a10;
SQL> select degree from all_tables where owner = 'HR' and table_name = 'EMPLOYEES';
DEGREE
----------
1属性没有改变。
请注意,移动整个表会使所有行移动到不同的数据块,这会改变每一行的ROWID。因此,所有相关索引都变为UNUSABLE。您必须重建所有从属索引以使它们再次有效。
原文标题:Alter Table Move to Another Tablespace
原文作者: Ed Chen
原文链接:https://logic.edchen.org/how-oracle-move-table/
最后修改时间:2022-10-27 14:36:42
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




