Sybase IQ 不同数据库实例间数据互访.
Mutiplex 是用于读写分理,此处讲的是不同实例间数据的互访。
建立远程服务器的方式:
( 本方法,可以对远程server的表的数据,进行更改)
1、用jdbc/odbc 来连接远程server.
使用ODBC 举例
Driver=libdbodbc9.sl;Commlinks=tcpip(host=192.168.0.11;PORT=7238);ENG=dataserver11
--建立链接服务器, 使用中文字符集CharSet=cp936,否则会出现乱码
CREATE SERVER "dataserver12" CLASS 'ASAODBC' USING 'Driver=libdbodbc9.sl;Commlinks=tcpip(host=192.168.0.12;PORT=7260);ENG=dataserver12;CharSet=cp936';
2、建立外部login (指定本地的用户,与远程server的哪个用户相对应)
(显式对应)
CREATE EXTERNLOGIN DBA
TO dataserver12
REMOTE LOGIN DBA
IDENTIFIED BY SQL;
3、建立代理表
CREATE EXISTING TABLE pt_sync_source_table_12
AT 'dataserver12.database.DBA.SYNC_TABLE_SOURCE';
4、从代理表中读取数据,抽入到本地
insert into ST_MESS
( select * from pt_sync_source_table_12);
commit;
----------------------------------------------------------------------------
以下这种方式,是采用的ct_library 方式来连接
(本方法,只能从远程server 读取数据过来,不能回写远程server)
1、必须两边配置好 server ( 与ase 相同);
2、本地连接到iq 的用户,必须在远程server 上存在,并且口令必须一致。(隐式对应)
在Sybase IQ目录建立interfaces文件
内容如下:
dataserver12
master tcp ether 192.168.0.12 7260
query tcp ether 192.168.0.12 7260
----------------------------------------------------------------------------
INSERT INTO DBA.ST_MESS
(MESSAD01, MESSAD02,MESSAD03,MESSAD04,MESSAD05,MESSAD06,MESSAD07,MESSAD08,MESSAD09)
LOCATION 'dataserver12.database' ---( servername.databasename)
--PACKETSIZE 16384
{ SELECT MESSAD01, MESSAD02,MESSAD03,MESSAD04,MESSAD05,MESSAD06,MESSAD07,MESSAD08,MESSAD09
FROM s_messagedataall};
commit;
----------------------------------------------------------------------
关于本地windows IQ ,远程 solaris IQ , 采用location 方式, 有关汉字乱码问题,
需要在本地windows 下,设置环境变量:
ASCHARSET=eucgb
ASLANG=EUC_CN
然后,重启iq 数据库,应该就可以了
--------------------------------------------------------------------
insert into DBA.authors
( au_id,au_lname,au_fname,phone,"address",city,state,country,postalcode)
location 'YULAN.pubs2'
{ select au_id ,au_lname ,au_fname ,phone ,"address" ,city ,state ,country ,postalcode from authors };
commit;