暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle 将表移动到另一个表空间

原创 小小亮 2022-10-27
4114

将表移动到另一个表空间

基本上,移动 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论