工作随记:long类型数据迁移问题小记

文章目录

    • 概要
    • 整体解决方法
      • 方法一:用COPY的方法:
      • 方法二:PL/SQL(如上)
      • 方法三:直接就把LONG转换成CLOB类型
      • 方法四:exp/imp
    • 技术过程

概要

工作随记:在做技术方案发现客户数据库的表存在与系统表空间,为了实现XTTS表空间迁移,要挪走此表并完成一次表空间自包含检查,在挪表时候发现无法直接move,果然现场干活没有顺利情况。。。。。。
工作随记:long类型数据迁移问题小记_第1张图片
提示表中存在long数据类型字段!查看此表还有索引!
那么这时候要考虑将此表数据备份后,新建表再将数据插入新表了(常用的create as表方式是不可以的哦)。
LONG类型不能通过MOVE来传输特别提示,尽量不要用LONG类型,特难管理。

#LONG不能使用insert into … select …等带select的模式。如

create table t123 (id int,en long);insert into t123(id,en) select * from t123;报告错误,可以用pl/sql来帮助解决,如:

declare

cursor cur_t123 is select * from t123;

use_t123 cur_t123%rowtype;

begin

open cur_t123;

loop

fetch cur_t123 into use_t123;

exit when cur_t123%notfound;

insert into t123(id,en) values (use_t123.id,use_t123.en);

end loop;

close cur_t123;

end;

整体解决方法

对有LONG类型字段的表的转移,可以使用:

create新表的方法。

  • create一个新的表,存储在需要转移的表空间。

  • 创建新的索引(使用tablespace 子句指定新的表空间)。

  • 把数据转移过来

方法一:用COPY的方法:

copy from bigboar/bigboar@bigboar_sid insert t123(id,en) using select id,en from t123;

方法二:PL/SQL(如上)

方法三:直接就把LONG转换成CLOB类型

create table t321(id int,en clob) tablespace users;

insert into t321(id,en) select id,to_lob(en) from t123;

方法四:exp/imp

exp bigboar/bigboar file=a.dat tables=t123

imp bigboar/bigboar file=a.dat full=y IGNORE =y

  • drop掉旧表。

  • rename 新表为旧表表名。

技术过程

本人更推荐方法三,将long类型改为clob类型
1、获取原有建表语句
2、创建新表,将long类型改为clob类型
3、如下sql:

#将数据插入新表中,注意to_lob
insert into SETTING_TMP1208(id,name,xml,memo) select id,name, to_lob(xml),memo from SETTING_TMP1;
#删除旧表
drop table SETTING_TMP1:
#将表名重命名为旧表名
rename SETTING_TMP1208 to SETTING_TMP1;
#重建索引
alter index PK EMR SETTING rebuild;

你可能感兴趣的:(工作随记,oracle,数据库)