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

概要

工作随记:在做技术方案发现客户数据库的表存在与系统表空间,为了实现XTTS表空间迁移,要挪走此表并完成一次表空间自包含检查,在挪表时候发现无法直接move,果然现场干活没有顺利情况。。。。。。
在这里插入图片描述
提示表中存在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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DBA狗剩儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值