Oracle数据库通过透明网关访问KingbaseES
【说明】
以下操作均在oracle的服务器上面进行操作。在应用现场中,通常可能有多种数据源,并且它们是异构的。所谓异构就是说它们是不同的产品,例如:oracle database,ms sql server,IMB db2,kingbaseES,Mysql,Postgre SQL,XML,Txt或者CSV等用于存放数据的产品或者文件。
Oracle透明网关(Transparent getways)是Oracle连接异构数据库提供的一种技术,Oracle通过dblinker透明的访问其他不同的数据库,如SQL Server、KingbaseES等,就像远程Oracle数据库一样。因此透明网关也是Oracle数据仓库和数据迁移的一个重要组成部分,透明网关的体系结构也很简单,在ORACLE和SQL SERVER之间使用ORACLE透明网关服务器实现互联互通,其中透明网关服务器可以与ORACLE或KINGBASE数据库在同一台主机上,也可以是在独立的一台主机上。
配置后的sql查询的处理流程如下:
【名词解释】
dg4odbc:透明网关插件,为Oracle数据库安装后自带。
关键字:
KingbaseES、异构数据库、Oracle
1.环境准备,检查是否安装unixodbc
执行odbcinst –j命令:
[oracle@localhost ~]$ odbcinst -j
unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/oracle/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
2.配置DSN
切换用户,编写odbcinst.ini和odbc.ini这两个文件。 操作这两个文件需要引用到kes的odbc库文件。该文件在“/数据库安装目录/Interface/odbc”下。将整个odbc文件夹内容拷贝到oracle服务器上。 同时也需要金仓的数据库用户,如下面示例,用户名是SYSTEM,密码是***。
[oracle@localhost ~]$ su - root
[root@localhost ~]# vi /etc/odbcinst.ini
[KingbaseES 8 ODBC Driver]
Description = KingbaseES 8 ODBC Driver for Linux
Driver = /data/oracle/odbc/kdbodbcw.so
Debug = 1
CommLog = 1
[root@localhost ~]# vi /etc/odbc.ini
[kes]
Description = KingbaseES
Driver = KingbaseES 8 ODBC Driver
Database = TEST
Servername = 192.168.124.139
Username = SYSTEM
Password = ***
Port = 54321
[oracle@localhost ~]$ /usr/bin/isql -v kes
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select * from t1;
+------------+-----------------------------------------------------------------------------------------------------+
| id | a |
+------------+-----------------------------------------------------------------------------------------------------+
| 1 | aaaaaa啊啊啊 |
+------------+-----------------------------------------------------------------------------------------------------+
SQLRowCount returns 1
1 rows fetched
SQL>
[oracle@localhost log]$ dg4odbc
Oracle Corporation --- MONDAY APR 25 2022 23:10:16.787
Heterogeneous Agent Release 11.2.0.4.0 - 64bit Production
Built with Oracle Database Gateway for ODBC
备注:此处配置的DSN名称,会在下面的配置文件listener.ora和tnsnames.ora中使用。
3.关于配置oracle的配置文件
在数据文件目录下配置以下内容:
1>配置监听器,在listener.ora中配置服务名和透明网关工具,listener.ora的配置如下(红色字体部分为添加的内容):
cat /data/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.124.128)(PORT = 1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=ORCL)
(ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1)
)
(SID_DESC =
(SID_NAME=kes) #实例名,需与odbc.ini中配置的dsn名一致
(ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1) #Oracle数据库路径
(PROGRAM=dg4odbc) #使用扩展程序dg4odbc
)
)
ADR_BASE_LISTENER = /home/oracle/app/oracle
2>配置tnsnames.ora文件,红色字体部分指定连接使用的DSN, tnsnames.ora的配置如下:
cat /data/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.124.128)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
KINGBASE= #服务器别名
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.124.128)(PORT=1521)) #Oracle数据库地址
(CONNECT_DATA=(SID=kes)) #odbc.ini中配置的dsn名
(HS=OK) #代表实用异构服务
)
3>配置透明网关,initkes.ora的配置如下:(透明网关配置文件命名规则:init+sid+.ora)
cat /data/oracle/product/11.2.0/dbhome_1/hs/ admin/initkes.ora
HS_FDS_CONNECT_INFO = kes # 配置实例名
HS_FDS_TRACE_LEVEL = Debug # 配置日志级别
HS_FDS_SHAREABLE_NAME = /data/oracle/odbc/kdbodbcw.so # 连接使用的kes驱动
HS_NLS_NCHAR=UCS2 # 配置编码字符集
HS_LANGUAGE=AMERICAN_AMERICA.AL32UTF8 # 配置字符集
set ODBCINI=/etc/odbc.ini #通过odbc连接使用的dsn配置文件
set ODBCINSTINI=/etc/odbc.ini #通过odbc连接使用的dsn配置文件
set ODBCSYSINI=/etc
set LD_LIBRARY_PATH=/usr/lib64;/usr/lib;/home/oracle/app/oracle/product/11.2.0/dbhome_1/lib
set ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1
4.重载lsnrctl
执行”Isnrctl reload”命令,重新加载配置使之生效:
[oracle@localhost admin]$ lsnrctl reload
执行”lsnrctl status”命令查看状态,如果配置生效,则可以看到配置的kes的连接信息。
[oracle@localhost admin]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 26-APR-2022 23:53:10
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 26-APR-2022 22:58:17
Uptime 0 days 0 hr. 54 min. 52 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /home/oracle/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.124.128)(PORT=1521)))
Services Summary...
Service "ORCL" has 1 instance(s).
Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...
Service "kes" has 1 instance(s).
Instance "kes", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
5.使用SQLPLUS验证“透明网关” 远程连接到KES做登陆和查询
[oracle@localhost admin]$
[oracle@localhost admin]$ sqlplus
SQL> create database link keslink connect to "kes" identified by "***" using KINGBASE;
# connect to "kes":kes为odbc.ini中设置的服务名;identified by “***”:***为odbc.ini中设置的密码;using KINIGBASE: KINGBASE为tnsnames.ora中配置的服务别名
Database link created.
SQL> select * from t1@keslink;