首页 > 数据库 >Oracle通过数据库链连接KingbaseES

Oracle通过数据库链连接KingbaseES

时间:2023-01-12 14:00:30浏览次数:42  
标签:数据库 odbc oracle ini SID Oracle KingbaseES ora

测试环境:

ip 数据库版本
192.168.254.135 oracle 11g
192.168.254.137 V008R006C005B0023

通过oracle官网得知,Oracle使用DG4ODBC作为连接到其他非Oracle数据库的数据网关。其原理图如下:

所以我们需要在Oracle服务器安装unixODBC和KingbaseES的ODBC驱动。

1.root用户登录到oracle数据库服务器。
2.安装unixODBC

yum install unixODBC.x86_64 注:unixODBC可能默认装系统的时候就已经安装上了。

[root@oracledb ~]# odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

注意:由于不同版本之间存在差异,为了保证能读取正确的配置,强烈建议统一使用用户主目录下 .odbc.ini 文件。

3.安装KingbaseES的ODBC驱动
KingbaseES 安装完成后在数据库安装目录下的 Interface/odbc 中就有odbc驱动,所以这里只要将文件拷贝到oracle主机上即可。
scp 192.168.254.137://home/kingbase/kdb/Interface/odbc/* /usr/local/lib/
设置文件权限为755。chmod 755 /usr/local/lib/* 我的/usr/local/lib/目录原来是空目录,这里直接用*了。

4.配置ODBC

[root@oracledb lib]# cat /etc/odbcinst.ini 
# Example driver definitions

# Driver from the postgresql-odbc package
# Setup from the unixODBC package
[kdb]
Description     = ODBC for kingbase
Driver64        = /usr/local/lib/kdbodbcw.so
Setup64         = /usr/lib64/libodbcpsqlS.so
FileUsage       = 1

kdbodbcw.so是KingbaseES ODBC驱动的库。
libodbcpsqlS.so 是unixODBC的库。

[root@oracledb ~]# cat .odbc.ini 
[V8]
Description = kdb test
Driver = kdb
Database = test
Servername = 192.168.254.137
UserName = system
Password = system
Port = 54321
ReadOnly = 0
ConnSettings = set client_encoding to UTF8

这里Driver与odbcinst.ini中的[kdb]对应,可以取任何名字,但两者需要相同。
[V8]是一个自定义的连接数据库的配置名称,其它应用程序就是引用这个名称访问数据库。

5.验证ODBC连接

[root@oracledb ~]# isql -v V8                      
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select version();
+--------------------------------------------------------------------------------------------------------------------------+
| version                                                                                                                                                                                                                                                                                                     |
+--------------------------------------------------------------------------------------------------------------------------+
| KingbaseES V008R006C005B0023 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit                                                                                                                                                                                        |
+--------------------------------------------------------------------------------------------------------------------------+
SQLRowCount returns 1
1 rows fetched

测试能够正常连接数据库并查询。
将.odbc.ini 配置文件拷贝一份到oracle用户的home目录下,确认文件属性是否正确。
下面来配置 oracle 透明网关部分,使用oracle用户来操作,共涉及3个文件。
$ORACLE_HOME/network/admin/listener.ora
$ORACLE_HOME/hs/admin/init<SID_NAME>.ora
$ORACLE_HOME/network/admin/tnsnames.ora
在 cd $ORACLE_HOME/hs/admin 目录下有 监听和tns配置的示例文件。
1.配置listener.ora

SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (SID_NAME=KINGBASE)
         (ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1)
         (PROGRAM=dg4odbc)
      )
  )
在listener.ora文件中添加上面这段内容。
其中SID_LIST_LISTENER后面的这个LISTENER是监听器的名字,默认的都是这个。
SID_NAME=KINGBASE KINGBASE为自定义名称。这个名称将决定init<SID_NAME>.ora这个文件的名称(大小写要一致)

2.创建init<SID_NAME>.ora

cd $ORACLE_HOME/hs/admin/initKINGBASE.ora
根据监听的配置,这里创建initKINGBASE.ora
[oracle@oracledb admin]$ cat initKINGBASE.ora
HS_FDS_CONNECT_INFO = V8
HS_FDS_TRACE_LEVEL = 0
HS_FDS_SHAREABLE_NAME = /usr/local/lib/kdbodbcw.so
HS_NLS_NCHAR=UCS2
HS_LANGUAGE=AMERICAN_AMERICA.AL32UTF8
set ODBCINI= /home/oracle/.odbc.ini

3.配置 tnsnames.ora

KINGBASE  =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
    (CONNECT_DATA=(SID=KINGBASE))
    (HS=OK)
  ) 

SID=KINGBASE 这个listener.ora文件中的sid设置一样。
第一行的KINGBASE = 可设置为任意名称,供后续创建数据库链时使用。

4.重启或者重载监听。
5.连接oracle创建数据库链,测试。
create database link to_kingbase connect to "system" identified by "system" using 'KINGBASE';

在KingbaseES数据库中创建表并插入数据

在oracle数据库中进行查询

标签:数据库,odbc,oracle,ini,SID,Oracle,KingbaseES,ora
From: https://www.cnblogs.com/kingbase/p/16881530.html

相关文章

  • KingbaseES 等待事件之LWLock lock_manager
    背景相信我们不止一次遇到过一个等待事件:LWLocklock_manager。下面我们聊聊这个等待事件的含义,产生原因,以及解决方法。等待事件含义当数据库维护共享锁的内存区域以在......
  • Oracle使用append对表insert会阻塞表的其他会话DML操作
     Oracle使用append对表insert会阻塞其他会话DML操作 快春节了,抽点时间把NNNNNNN久之前的东西整理记录。insert/*+append*/into会对表持有LOCKED_MODE=6的TM锁,导......
  • Redis-多机数据库-Sentinel
    SentinelSentinel(哨岗、哨兵)是Redis的高可用性(highavailability)解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主......
  • 用jmeter实现不同请求同时发送测试MySQL数据库的锁表和死锁问题【杭州多测师_王sir】
    一、第一种方法:通过创建不同线程组实现1、创建不同的线程组,然后把不同的请求放在不同的线程组里面,每个线程组里面加入SynchronizingTimer集合点,然后添加一个用表格察看结......
  • ORACLE 去重
    -----------------------------------------------------------------------------模拟数据--------------------------------------------------------------------------......
  • MySQL数据库技术实战
    MySQL数据库技术实战 一,安装mysql很早之前就知道mysql提供了一套数据库样本(github地址),用于测试你的应用程序和数据库服务器。今天分享下使用过程并......
  • SpringBoot+Mybatis-plus整合easyExcel批量导入Excel到数据库+导出Excel
    SpringBoot+Mybatis-plus整合easyExcel批量导入Excel到数据库+导出Excel 一、前言今天小编带大家一起整合一下easyExcel,之所以用这个,是因为easyExcel性能比较好,不会......
  • 企业应用架构研究系列二十四:SQL Server 数据库调优之XEvent 探查器
    如果入职一些中小型公司,往往需要接手一些很“坑”的项目,到底多坑就不牢骚了,只讲一下,如果破解这些历史遗留的项目问题。项目代码可能短时间无法进行通读研究,我们就需要......
  • 数据库基本操作
    https://www.cnblogs.com/python-django-spid/p/11641830.html 1、首先打开命令行cmd2、打开页面后输入命令:mysql-uroot-p 然后点击回车3、输入自己数据库的......
  • 数据库服务器CPU不能全部利用原因分析
    背景客户凌晨把HIS数据库迁移到配置更高的新服务器,上午业务高峰时应用非常缓慢。现象通过SQL专家云实时可视化界面看到大量的绿点,绿点表示会话在等待某项资源,绿点越大说明等......