人大金仓 Oracle数据库通过透明网关访问KingbaseES

114 阅读4分钟

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查询的处理流程如下:

file

【名词解释】

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;

更多信息,参见help.kingbase.com.cn/v8/index.ht…