ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 带有LOB字段的表迁移

带有LOB字段的表迁移

原创 Linux操作系统 作者:oracle_ace 时间:2008-06-13 17:11:27 0 删除 编辑
    在建立含有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博客 ” ,链接:https://blog.itpub.net/12361284/viewspace-345706/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-10

  • 博文量
    284
  • 访问量
    865721