ITPub博客

首页 > Linux操作系统 > Linux操作系统 > LONG类型迁移到LOB类型(三)

LONG类型迁移到LOB类型(三)

原创 Linux操作系统 作者:yangtingkun 时间:2010-06-20 23:56:59 0 删除 编辑

LONG类型由于过多的限制,Oracle很早就推荐使用LOB类型进行替代,在Oracle的官方文档中给出了几种将LONG类型迁移到LOB类型的方法,这里简单讨论一下。

这一篇讨论在线重定义功能。

LONG类型迁移到LOB类型(一):http://yangtingkun.itpub.net/post/468/501065

LONG类型迁移到LOB类型(二):http://yangtingkun.itpub.net/post/468/501094

 

 

如果对并发要求很高,那么还可以选择在线重定义的方式来转换LONG列:

SQL> CREATE TABLE T
  2  (ID NUMBER,
  3  CONTENTS LONG);

Table created.

SQL> INSERT INTO T
  2  SELECT ROWNUM, OWNER || OBJECT_NAME || OBJECT_TYPE
  3  FROM ALL_OBJECTS;

75338 rows created.

SQL> COMMIT;

Commit complete.

SQL> ALTER TABLE T ADD PRIMARY KEY (ID);

Table altered.

下面建立中间表,并利用在线重定义的方式来转换LONG到CLOB类型:

SQL> CREATE TABLE T_INTER
  2  (ID NUMBER,
  3  CONTENTS CLOB);

Table created.

SQL> SET SERVEROUT ON SIZE 100000
SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'T')

PL/SQL procedure successfully completed.

SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'T', 'T_INTER', 'ID ID, TO_LOB(CONTENTS) CONTENTS')

PL/SQL procedure successfully completed.

SQL> DECLARE
  2  V_NUM NUMBER;
  3  BEGIN
  4  DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(USER, 'T', 'T_INTER', DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, V_NUM, TRUE);
  5  DBMS_OUTPUT.PUT_LINE(V_NUM);
  6  END;
  7  /
0

PL/SQL procedure successfully completed.

SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'T', 'T_INTER')

PL/SQL procedure successfully completed.

SQL> DESC T
 Name                                          Null?    Type
 --------------------------------------------- -------- ------------------------
 ID                                                     NUMBER
 CONTENTS                                               CLOB

SQL> DESC T_INTER
 Name                                          Null?    Type
 --------------------------------------------- -------- -------------------------
 ID                                            NOT NULL NUMBER
 CONTENTS                                               LONG

这种方式也不复杂,而且锁表的时间更断,更适合7*24的环境。

Oracle给出的方法还包括EXP/EXPDB的方式,不过这种方式借助导出、导入工具,而且在删除表后还要手工创建表,再执行导入,并没有性能和操作简单度上的优势,这里就不讨论了。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-665749/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11077260