过着简单,真实的生活,喜欢收藏变形金刚(TFE,G1,SL系列),研究金融股市,KOF98,篮球,学习研究Oracle技术,我并不是一个全职的Oracle DBA,但是对于Oracle技术的热爱和研究,是一个不争的事实,愿意结交广大Oracle技术爱好者!MSN:oracle_kof_tf@hotmail.com

带有LOB字段的表迁移

上一篇 / 下一篇  2008-06-13 17:11:27 / 个人分类:Oracle数据库技术-数据库管理

    在建立含有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


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar