解决不同字符集数据库间的数据同步问题
首先在原数据库上做一个视图对保存汉字的字段加包函数utl_raw_cast_to_raw(保存汉字的字段)
在新数据库上做个数据库连接连接指向原数据库之后对步骤中的视图中使用了
utl_raw_cast_to_raw的字段再用utl_raw_cast_to_varchar函数转换回来
具体测试环境和测试方法:
:testdb zhsgbk:gsweb usascii
在的testdb数据库中建一个表 itaxcity 其中有一列name中保存汉字
增加一个视图如:
CREATE VIEW V_CITY AS SELECT UTL_RAWCAST_TO_RAW(NAME) AS NAME FROM CITY;SELECT * FROM V_CITY;
在机器上的tnsnamesora文件中增加到的连接入口
在gsweb数据库中增加到的数据库链路如:
SQL> create public database link testdb connect to itax identified by itax using testdb;Database link created
在gsweb数据库查询
select utl_rawcast_to_varchar(name) from V_city@testdb
不能基于视图来建立物化视图所以只能先建一个缓沖表然后每天使用存储过程来填充此表
以达到同步数据之目的
另外如果仅做查询使用则在目的数据库上增加一个视图即可
如下所示:
源数据库上的视图:
CREATE VIEW V_fg_wh AS SELECT UTL_RAWCAST_TO_RAW(fg_wh) AS fgwh FROM fg_wh;
目的数据库上的数据链路:
create public database link gsweb connect to gs identified by htjs_ using gsweb;
目的数据库上的视图:
create view fg_wh as select utl_rawcast_to_varchar(fgwh) fgwh from v_fg_wh@gsweb