帶有LOB欄位的表遷移

oracle_ace發表於2008-06-13
    在建立含有lob欄位的表時,oracle會自動為lob欄位建立兩個單獨的segment,一個用來存放lob資料,另一個用來存放lob索引,並且它們都會儲存在對應表指定的表空間中。但是當我們用alter table tb_name move tablespace tbs_name; 對錶做表空間之間遷移時只能遷移非lob欄位以外的segment,而如果要在移動表資料同時移動lob相關欄位,就必需用如下的含有特殊引數據的文句來完成:alter table tb_name move tablespace tbs_name lob (column_lob1,column_lob2) store as(tablesapce tbs_name);

實驗如下:

C:\>set ORACLE_SID=icmnlsdb

C:\>sqlplus /nolog

SQL*Plus: Release 9.2.0.8.0 - Production on 星期五 6月 13 16:52:08 2008

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

SQL> conn / as sysdba;
已連線。
SQL> select file_name from dba_data_files;

FILE_NAME
-----------------------------------------------------------------------
D:\ORACLE\ORA92\ICMNLSDB\SYSTEM01.DBF
D:\ORACLE\ORA92\ICMNLSDB\UNDOTBS01.DBF
D:\ORACLE\ORA92\ICMNLSDB\INDX01.DBF
D:\ORACLE\ORA92\ICMNLSDB\TOOLS01.DBF
D:\ORACLE\ORA92\ICMNLSDB\USERS01.DBF
D:\ORACLE\ORA92\ICMNLSDB\ALAN.DBF
D:\ORACLE\ORA92\ICMNLSDB\MYCR.DBF
D:\ORACLE\ORA92\ICMNLSDB\LMT.DBF
D:\ORACLE\ORA92\ICMNLSDB\PERFSTAT.DBF
D:\ORACLE\ORA92\ICMNLSDB\MYTEXT01.DBF

已選擇10行。

SQL> create tablespace HJP
  2  datafile 'D:\ORACLE\ORA92\ICMNLSDB\hjp.dbf' size 100M
  3  autoextend on
  4  next 10M
  5  maxsize unlimited;

表空間已建立。

SQL> conn alan/passw0rd@abc
已連線。

SQL> select segment_name,segment_type
  2  from dba_segments
  3  where wner='ALAN';

未選定行

SQL> create table test_lob
  2  (id blob,
  3   name clob);

表已建立。

SQL> select segment_name,segment_type,tablespace_name
  2  from dba_segments
  3  where wner='ALAN';

SEGMENT_NAME                   SEGMENT_TYPE       TABLESPACE_NAME
------------------------------ ------------------ --------------------
TEST_LOB                       TABLE              USERS
SYS_IL0000026875C00001$$       LOBINDEX           USERS
SYS_IL0000026875C00002$$       LOBINDEX           USERS
SYS_LOB0000026875C00001$$      LOBSEGMENT         USERS
SYS_LOB0000026875C00002$$      LOBSEGMENT         USERS

SQL> alter table test_lob move tablespace hjp;

表已更改。

SQL> select segment_name,segment_type,tablespace_name
  2  from dba_segments
  3  where wner='ALAN';

SEGMENT_NAME                   SEGMENT_TYPE       TABLESPACE_NAME
------------------------------ ------------------ ------------------
TEST_LOB                       TABLE              HJP
SYS_IL0000026875C00001$$       LOBINDEX           USERS
SYS_IL0000026875C00002$$       LOBINDEX           USERS
SYS_LOB0000026875C00001$$      LOBSEGMENT         USERS
SYS_LOB0000026875C00002$$      LOBSEGMENT         USERS

這裡lob段並沒有移動到指定的tablespace去。因此需要額外的命令進行移動

SQL> alter table test_lob move tablespace hjp lob(id,name) store as(tablespace hjp);

表已更改。

SQL> select segment_name,segment_type,tablespace_name
  2  from dba_segments
  3  where wner='ALAN';

SEGMENT_NAME                   SEGMENT_TYPE       TABLESPACE_NAME
------------------------------ ------------------ ------------------------------
TEST_LOB                       TABLE              HJP
SYS_IL0000026875C00001$$       LOBINDEX           HJP
SYS_IL0000026875C00002$$       LOBINDEX           HJP
SYS_LOB0000026875C00001$$      LOBSEGMENT         HJP
SYS_LOB0000026875C00002$$      LOBSEGMENT         HJP

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12361284/viewspace-345706/,如需轉載,請註明出處,否則將追究法律責任。

相關文章