工作随记:long类型数据迁移问题小记
2023-12-13 11:26:11
概要
工作随记:在做技术方案发现客户数据库的表存在与系统表空间,为了实现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;
文章来源:https://blog.csdn.net/weixin_41607523/article/details/134964246
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!