发布网友 发布时间:2023-05-27 01:49
共1个回答
热心网友 时间:2023-05-30 10:54
解决不同字符集数据库间的数据同步问题
首先在原数据库上做一个视图 对保存汉字的字段 加包函数utl_raw_cast_to_raw(保存汉字的字段)
在新数据库上 做个数据库连接 连接指向原数据库 之后对步骤 中的视图中 使用了
utl_raw_cast_to_raw的字段 再用utl_raw_cast_to_varchar 函数转换回来
具体测试环境和测试方法:
:testdb zhs gbk :gsweb us ascii
在 的testdb数据库中建一个表 itax city 其中有一列name中保存汉字
增加一个视图如:
CREATE VIEW V_CITY AS SELECT UTL_RAW CAST_TO_RAW(NAME) AS NAME FROM CITY; SELECT * FROM V_CITY;
在 机器上的tnsnames ora文件中增加到 的连接入口
在gsweb数据库中增加到 的数据库链路 如:
SQL> create public database link testdb connect to itax identified by itax using testdb ; Database link created
在gsweb数据库查询
select utl_raw cast_to_varchar (name) from V_city@testdb
不能基于视图来建立物化视图 所以只能先建一个缓冲表 然后每天使用存储过程来填充此表
以达到同步数据之目的
另外 如果仅做查询使用 则在目的数据库上增加一个视图即可
如下所示:
源数据库上的视图:
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 gs identified by htjs_ using gsweb ;
目的数据库上的视图:
lishixin/Article/program/Oracle/201311/17577