该如何解决不同字符集数据库间的数据同步问题呢?
1、首先在原数据库上做一个视图,对保存汉字的字段,加包函数utl_raw_cast_to_raw(保存汉字的字段)
2、在新数据库上,做个数据库连接,连接指向原数据库,之后对步骤1中的视图中,使用了
utl_raw_cast_to_raw的字段,再用utl_raw_cast_to_varchar2函数转换回来,
具体测试环境和测试方法:
10。 0。10。108:testdb zhs16gbk
10。10。10。166:gsweb us7ascii
1。在108的testdb数据库中建一个表 itax。city 其中有一列name中保存汉字
2。 增加一个视图如:
CREATE VI...全部
1、首先在原数据库上做一个视图,对保存汉字的字段,加包函数utl_raw_cast_to_raw(保存汉字的字段)
2、在新数据库上,做个数据库连接,连接指向原数据库,之后对步骤1中的视图中,使用了
utl_raw_cast_to_raw的字段,再用utl_raw_cast_to_varchar2函数转换回来,
具体测试环境和测试方法:
10。
0。10。108:testdb zhs16gbk
10。10。10。166:gsweb us7ascii
1。在108的testdb数据库中建一个表 itax。city 其中有一列name中保存汉字
2。
增加一个视图如:
CREATE VIEW V_CITY AS SELECT UTL_RAW。CAST_TO_RAW(NAME) AS NAME FROM CITY;
SELECT * FROM V_CITY;
3。
在167机器上的tnsnames。ora文件中增加到108的连接入口
在gsweb数据库中增加到108的数据库链路,如:
SQL>
create public database link testdb connect to itax
identified by itax using 'testdb';
Database link created。
4。在gsweb数据库查询
select utl_raw。cast_to_varchar2(name) from V_city@testdb
5。不能基于视图来建立物化视图,所以只能先建一个缓冲表,然后每天使用存储过程来填充此表,
以达到同步数据之目的
另外,如果仅做查询使用,则在目的数据库上增加一个视图即可。
如下所示:
源数据库上的视图:
CREATE VIEW V_fg_wh AS SELECT UTL_RAW。
CAST_TO_RAW(fg_wh) AS fgwh FROM fg_wh;
目的数据库上的数据链路:
create public database link gsweb connect to gs12366
identified by htjs_12366 using 'gsweb';。收起