移动 LOB 段
每当表空间拥挤时,我首先想到的就是将 INDEX 移到另一个表空间,因为在另一个地方重建索引非常灵活,副作用很小。
如果情况持续,我们会考虑将表移动到另一个表空间,但要注意,该表中的大对象(LOB)包括二进制大对象(BLOB)和字符大对象(CLOB)不会被移动,我们必须分别移动它们。
一般来说,像 BLOB 或 CLOB 这样的数据大多是冷数据。应该将它们移出基于 SSD 或 NVMe 磁盘的表空间,以便更有效地使用存储。所以我向你推荐的一个更好的做法是你应该先移动 LOB,然后移动 TABLE。
首先,我们连接到数据库。
SQL> conn system/welcome1@orcl
Connected.1.检查当前表空间
我们应该首先检查表定义。
SQL> desc pm.print_media;
Name Null? Type
----------------------------------------- -------- ----------------------------
PRODUCT_ID NOT NULL NUMBER(6)
AD_ID NOT NULL NUMBER(6)
AD_COMPOSITE BLOB
AD_SOURCETEXT CLOB
AD_FINALTEXT CLOB
AD_FLTEXTN NCLOB
AD_TEXTDOCS_NTAB PM.TEXTDOC_TAB
AD_PHOTO BLOB
AD_GRAPHIC BINARY FILE LOB
AD_HEADER PM.ADHEADER_TYP我们想将AD_PHOTO列(一个 BLOB 列)移动到另一个表空间。让我们检查列的当前表空间。
SQL> select tablespace_name from dba_lobs where owner = 'PM' and table_name = 'PRINT_MEDIA' and column_name = 'AD_PHOTO';
TABLESPACE_NAME
------------------------------
EXAMPLE2.移动LOB
为了移动一个大对象,我们结合了ALTER TABLE语法的move_table_clause和LOB_storage_clause 。
正常移动
SQL> alter table PM.PRINT_MEDIA move lob(AD_PHOTO) store as (tablespace USERS);
Table altered.平行移动
我们使用某种程度的并行性 (DOP) 来移动段。
SQL> alter table PM.PRINT_MEDIA move lob(AD_PHOTO) store as (tablespace USERS) parallel 16;
Table altered.与并行移动索引不同,将parallel_clause与 move_table_clause 一起指定会使并行性仅适用于此移动,而不适用于表。
在线移动?
在线更改表移动 lob 是不可能的,这会引发ORA-14808: table does not support ONLINE MOVE TABLE。
3.检查结果
SQL> select tablespace_name from dba_lobs where owner = 'PM' and table_name = 'PRINT_MEDIA' and column_name = 'AD_PHOTO';
TABLESPACE_NAME
------------------------------
USERS我们已经移动了 LOB。
原文标题:Alter Table Move LOB to Another Tablespace
原文作者:Ed Chen
原文链接:https://logic.edchen.org/how-oracle-move-lob-column/
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




