实验long raw 和 blob两种数据类型遇到dblink的表现
2018-11-08 18:50 AlfredZhao 阅读(1257) 评论(0) 收藏 举报首先long raw从Oracle 10g开始就不再被建议使用,建议用blob代替。同理,long建议用clob代替。
本文从运维角度实验long raw 和 blob两种数据类型在遇到dblink时的一些差异。
1.构造实验环境
在A库jingyu用户下创建两张表:--LONG RAW
create table T_TEST_LONGRAW(
id number,
text long raw
);
--BLOB
create table T_TEST_BLOB(
id number,
text BLOB
);
然后使用plsql工具在两张表分别插入一条相同的数据:id=1;text=某个二进制小程序。
2.通过dblink查询
在B库通过dblink访问A库的两张表:SELECT * FROM jingyu.T_TEST_LONGRAW@ttslink;
可以正常查询。
SELECT * FROM jingyu.T_TEST_BLOB@ttslink;
ERROR:
ORA-22992: cannot use LOB locators selected from remote tables
可以看到,long raw数据类型的表可以正常查询,blob数据类型的却会报错:ORA-22992。
3.通过dblink建表
如果想在B库依据A库的两张表创建测试表:create table T_TEST_LONGRAW as select * from jingyu.T_TEST_LONGRAW@ttslink;
ORA-00997: illegal use of LONG datatype
create table T_TEST_BLOB as SELECT * FROM jingyu.T_TEST_BLOB@ttslink;
Table created.
可以看到,和步骤2中的测试不同,long raw数据类型的表无法被创建,报错:ORA-00997。
而blob数据类型的表却可以正常创建。
4.通过导出导入方式迁移
可以通过exp/imp或者expdp/impdp来导出导入对应的表:--exp / imp
exp \'/ as sysdba\' file=longraw.dmp tables=jingyu.t_test_longraw log=longraw.log
imp \'/ as sysdba\' file=longraw.dmp full=y log=imp_longraw.log
exp \'/ as sysdba\' file=blob.dmp tables=jingyu.t_test_blob log=blob.log
imp \'/ as sysdba\' file=blob.dmp full=y log=imp_blob.log
--expdp / impdp
expdp \'/ as sysdba\' directory=XTTS dumpfile=longraw.dmp tables=jingyu.t_test_longraw,jingyu.t_test_blob logfile=longraw.log
impdp \'/ as sysdba\' directory=XTTS dumpfile=longraw.dmp full=y logfile=impdp_longraw.log
测试两种方式都可以正常导出导入。
总结:很简单的一个小实验,只是发现二者在dblink查询和依据dblink建表时,表现完全相反,蛮有趣的,特此记录一下。
另外,如果将实验中long raw和blob分别替换为long和clob去构造实验(插入的数据就是字符型),现象一样就不再赘述。
AlfredZhao©版权所有「从Oracle起航,领略精彩的IT技术。」
浙公网安备 33010602011771号