IQ 15通过ASE ODBC代理访问ASE的配置方法
我们可以在IQ 15中通过创建远程server,建立代理表或者INSERT LOCATION语句访问ASE数据库中的数据。在IQ 12.7和IQ 15.1、15.2等版本中,用户普遍使用asejdbc serve class访问ASE。从IQ 15.4开始,SAP Sybase建议用户不要再使用这种server class了,建议使用aseodbc访问ASE Server。在IQ 16版本中,asejdbc驱动方式甚至已经从软件中移除了。除了这些原因之外,使用aseodbc的性能也要比asejdbc高。
本文将向大家介绍IQ中通过aseodbc server class创建远程server访问ASE Server的配置步骤,它适用于IQ 15.2、15.4和16等版本。本文所介绍的配置方法基于如下环境:
* ASE Server 15.7 ESD#2 For Linux x86_64
* IQ 15.2 ESD#3.10 For Linux x86_64
* SAP Sybase SDK 15.7 For Linux x86_64(包含ASE ODBC Driver)
* 为了简单起见,假设ASE Server和IQ Server安装在相同的机器上,并且使用ASE 15.7中已带的ASE ODBC 64bit Drvier。
* ASE Server字符集iso_1,sort order是 bin_iso_1
* IQ Server的字符集是936ZHO
下面是配置步骤和相关注意事项:
1. 设置sybiq os用户的环境变量
编辑.bash_profile,修改或增加如下环境变量:
LANG=zh_CN
LD_LIBRARY_PATH= /opt/sybase/ase157/DataAccess64/ODBC/lib:/opt/sybase/ase157/OCS-15_0/lib:/opt/sybase/ase157/OCS-15_0/lib3p64:$LD_LIBRARY_PATH
export LANG LD_LIBRARY_PATH
说明:假设ASE安装在/opt/sybase/ase157目录下
2. 使用sybiq重新登录操作系统,启动iq demo数据库
cd $IQDIR15/demo
start_iq @iqdemo.cfg iqdemo.db
3. 使用ase157 os账户登陆操作系统, 在ASE Server中安装ASE ODBC Driver需要的存储过程
cd $SYBASE/DataAccess64/ODBC/sp
./install_odbc_sprocs server username password
说明:insall_odc_sprocs是sybase提供的一个shell脚本,安装ODBC Driver用到的存储过程。这里的Server是指$SYBASE/interfaces中的Severname
4. 使用dbisql以DBA用户连接到demo数据库
dbisql -c “uid=DBA;pwd=sql” -nogui
执行如下语句进行配置:
(1) create server myase class ‘aseodbc’ using ‘Driver=libsybdrvodb.so;Server=DBNode1;Port=5080;CharSet=cp936;Database=tpcdb’
说明:如果ASE Server的字符集是iso_1,那么需要制定CharSet=cp936,否则通过代理表访问ASE数据库时汉字会有乱码问题;此外还需要
把ASE Server中的 disable character set conversion选项值设置为1(修改设置后需要重启ASE Server)。
(2) CREATE EXTERNLOGIN DBA TO myase REMOTE LOGIN tpc_user IDENTIFIED BY tpc_pwd
(3) forward to myase {select @@version}
说明:如果这个语句能够返回ASE Server的版本,那么远程server配置成功。
(4) CREATE EXISTING TABLE p_test11 AT ‘myase.tpcdb.dbo.test11’
说明:这个语句创建代理表,IQ中的代理表名为p_test11,实际的表在ASE的tpcdb数据库中,表名为test11。
(5) 执行查询,访问代理表:
select * from p_test11
(6) 执行insert location
select * into t11 from p_test11 where 1=2
insert into t11 location ‘myase.tpcdb’ {select * from test11}
说明:insert location中的server名myase应该出现在$SYBASE/interfaces中,否则会报错。