在分区表上移动LOB表空间

时间:2017-10-24 14:18:41

标签: oracle blob partitioning tablespace

考虑以下表格:

CREATE TABLE TAB_ONE
(
  <irrelevant columns>
  MESSAGE CLOB,
  REC_DATE DATE,
  <irrelevant columns>
) TABLESPACE DATA_TS;

CREATE TABLE TAB_TWO
(
  <irrelevant columns>
  RESPONSE CLOB,
  PART_ID NUMBER,
  <irrelevant columns>
  CONSTRAINT "FK_01"
    FOREIGN KEY ("PART_ID") REFERENCES  <IRRELEVANT_TABLE> ("SEQ_ID")
) TABLESPACE DATA_TS PARTITION BY REFERENCE (FK_01) ENABLE ROW MOVEMENT;

现在,任务是将所有(C)LOB从DATA_TS移动到新分配的名为LOB_TS的表空间。

对于第一个表格,这很容易:

ALTER TABLE TAB_ONE MOVE LOB ("MESSAGE") store as (tablespace LOB_TS compress low);

对于另一个,分区会造成所有麻烦。上述命令由于显而易见的原因不起作用,所以我设法找到了另一个:

ALTER TABLE TAB_TWO MOVE PARTITION SYS_P18485 LOB (RESPONSE) STORE AS ( TABLESPACE LOB_TS COMPRESS LOW );
ALTER TABLE TAB_TWO MOVE PARTITION SYS_P18299 LOB (RESPONSE) STORE AS ( TABLESPACE LOB_TS COMPRESS LOW );

(表TAB_TWO拥有的每个分区都有一个)

这些ALTER TABLES本身并没有失败。 SQL Developer自豪地声明&#34;表TAB_TWO被改变了。&#34;

但后来我跑SELECT * FROM USER_LOBS WHERE TABLE_NAME = 'TAB_TWO'并发现,CLOB停留在上一个表空间中并且没有移动。

当然,通过Create Table as Select复制数据,删除表,创建新表并恢复数据的想法发生在我身上,但我更喜欢更清洁的解决方案,而无需复制大量数据不同的表。

0 个答案:

没有答案