Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103563761
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-03-30 23:01:58

来源:赛迪网    作者:林夕

解决不同字符集数据库间的数据同步问题:

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';

目的数据库上的视图:

create view fg_wh as 
select utl_raw.cast_to_varchar2(fgwh) fgwh from v_fg_wh@gsweb
阅读(311) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~