kdb_database_link 是 KingbaseES 为了兼容oracle 语法而开发的跨数据库访问扩展,可用于访问KingbaseES, Postgresql , Oracle 。以下分别介绍跨数据库访问KingbaseES 与Oracle 的配置过程。

注意:database link 支持DML 操作 是从V8R6C4B0021 版本开始的,对于两端都是KingbaseES 数据库的,只需要源端是V8R6C4B0021 版本,目标端版本无要求(但必须保证ODBC 版本能够连接)。

一、配置ODBC

1、安装

  1. [root@dbhost02 etc]# yum install unixODBC.x86_64
  2.  
  3. [kb86@dbhost02 data86]$ isql --version
  4. unixODBC 2.3.1
  5.  
  6. [kb86@dbhost02 data86]$ odbcinst -j
  7. unixODBC 2.3.1
  8. DRIVERS............: /usr/local/etc/odbcinst.ini
  9. SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
  10. FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
  11. USER DATA SOURCES..: /home/kingbase/.odbc.ini
  12. SQLULEN Size.......: 8
  13. SQLLEN Size........: 8
  14. SQLSETPOSIROW Size.: 8

如果设置了LD_LIBRARY_PATH环境变量,则实际生效的是/usr/local/etc/odbcinst.ini ,否则可能是 /etc/odbcinst.ini。

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

2、配置

根据odbcinst -j 显示的路径,配置 odbcinst.ini 和 odbc.ini 文件。

odbcinst.ini 文件内容如下:

  1. [root@dbhost03 etc]# cat /usr/local/etc/odbcinst.ini
  2. # Example driver definitions
  3.  
  4. # Driver from the postgresql-odbc package
  5. # Setup from the unixODBC package
  6. [PostgreSQL]
  7. Description = ODBC for PostgreSQL
  8. Driver = /usr/lib/psqlodbcw.so
  9. Setup = /usr/lib/libodbcpsqlS.so
  10. Driver64 = /usr/lib64/psqlodbcw.so
  11. Setup64 = /usr/lib64/libodbcpsqlS.so
  12. FileUsage = 1
  13.  
  14. # Driver from the mysql-connector-odbc package
  15. # Setup from the unixODBC package
  16. [MySQL]
  17. Description = ODBC for MySQL
  18. Driver = /usr/lib/libmyodbc5.so
  19. Setup = /usr/lib/libodbcmyS.so
  20. Driver64 = /usr/lib64/libmyodbc5.so
  21. Setup64 = /usr/lib64/libodbcmyS.so
  22. FileUsage = 1
  23.  
  24. [KingbaseES V8R6 ODBC Driver]
  25. Description = ODBC for KingbaseES
  26. Driver = /opt/kb86/ES/V8/Interface/odbc/kdbodbcw.so
  27. Debug = 1
  28. CommLog = 1

odbc.ini 文件内容如下(可选配置,主要用于isql 验证):

  1. [v8r6]
  2. Description=KingbaseES
  3. Driver=KingbaseES V8R6 ODBC Driver
  4. Servername=localhost
  5. Database=test02
  6. Username=user02
  7. Password=user02
  8. Port=54321

3、isql 验证 (可选)

必须配置了 odbc.ini ,才能进行此步骤

  1. [kb86@dbhost02 data86]$ isql v8r6
  2. +---------------------------------------+
  3. | Connected! |
  4. | |
  5. | sql-statement |
  6. | help [tablename] |
  7. | quit |
  8. | |
  9. +---------------------------------------+
  10.  
  11. SQL>

4、验证驱动

验证kingbase自带的驱动 kdbodbcw.so,确保没有"not found"

  1. ldd /opt/kb86/ES/V8/Interface/odbc/kdbodbcw.so

二、连接kingbase

1、修改 shared_preload_libraries 参数

需将kdb_database_link 加入 shared_preload_libraries 中,注意 kdb_database_link 必须放在最后,因为,与其他项间有依赖关系。

2、创建扩展

  1. kdb_database_link 实际是在kingbase_fdw上层进行了包装,需要kingbase_fdw扩展。以system用户连接,创建组件:
  1. create extension kdb_database_link
  2. create extension kingbase_fdw

kdb_database_link 扩展创建后,会生成 $KINGBASE_DATA/sys_database_link.conf文件,类似于oracle 的tnsnames.ora 文件,用于配置服务名,在创建database link时使用。模板内容如下:

  1. #[oradb]
  2. #dbtype=Oracle
  3. #dbname=orcl
  4. #DriverName="Oracle12C ODBC Driver"
  5. #host=127.0.0.1
  6. #port=1521
  7.  
  8. [svr42]
  9. dbtype=Kingbase
  10. dbname=test02
  11. DriverName="KingbaseES V8R6 ODBC Driver"
  12. host=192.168.237.42
  13. port=54321
  14.  
  15. #[PostgreSQL]
  16. #dbtype=Postgres
  17. #dbname=postgres
  18. #DriverName="PostgreSQL ODBC Driver"
  19. #host=127.0.0.1
  20. #port=5432

3、创建数据链

  1. create public database link to_svr42 connect to 'user_remote' identified by 'user_remote' using ( DriverName = 'KingbaseES V8R6 ODBC Driver' , Host = '192.168.237.42' , Port = 54321 , Dbname = 'test' , Dbtype = 'kingbase')
  2.  
  3. create public database link to_svr42 connect to 'user02' identified by 'user02' using 'svr42' --或者修改sys_database_link.conf,配置正确的连接串。

数据链创建完后,会在pg_foreign_server 和 pg_user_mappings 增加相关条目

  1. test=# select * from pg_user_mappings;
  2. umid | srvid | srvname | umuser | usename | umoptions
  3. -------+-------+-----------------------------+--------+------------+-----------------------------------------
  4. 16535 | 16534 | dblink_server_to_svr42_2200 | 0 | public | {user=user_remote,password=user_remote}
  5. (2 rows)
  6.  
  7. test=# select * from pg_foreign_server;
  8. oid | srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions
  9. -------+-----------------------------+----------+--------+---------+------------+---------------------------------------+----------------------------------------------
  10. 16534 | dblink_server_to_svr42_2200 | 10 | 16495 | | | | {dbname=test,host=192.168.237.42,port=54321}

4、验证数据链

  1. test=# select * from user02.t1@to_svr42;
  2. id
  3. ----
  4. (0 rows)
  5.  
  6. test=# insert into user02.t1@to_svr42 values(1);
  7. INSERT 0 1
  8. test=# update user02.t1@to_svr42 set id=2;
  9. UPDATE 1
  10. test=# select * from user02.t1@to_svr42;
  11. id
  12. ----
  13. 2
  14. (1 row)
  15.  
  16. test=# delete from user02.t1@to_svr42;
  17. DELETE 1

5、删除数据链

  1. drop database link public.to_svr42;

三、连接oracle

1、创建扩展

如果要通过database link 连接访问oracle数据库,除了kdb_database_link外,还需要 oracle_fdw 插件。

  1. create extension oracle_fdw;
  2. create extension kdb_database_link

2、配置sys_database_link.conf

  1. [oradb]
  2. dbtype=Oracle
  3. dbname=SOGG
  4. DriverName="Oracle ODBC Driver"
  5. host=192.168.237.41
  6. port=1521

3、配置odbc

修改 /usr/local/etc/odbcinst.ini , 增加:

  1. [Oracle ODBC Driver]
  2. Description = ODBC for Oracle
  3. Driver = /opt/kb86/ES/V8/Server/lib/libsqora.so.19.1

Note:具体配置ODBC 连接oracle 过程见:https://www.cnblogs.com/kingbase/p/14921071.html

4、创建database link

  1. create public database link to_ora42 connect to 'USER02' identified by 'user02' using 'oradb'
  2.  
  3. create public database link to_ora42 connect to 'USER02' identified by 'user02' using
  4. ( DriverName = 'Oracle ODBC Driver' , Host = '192.168.237.41' , Port = 1521 , Dbname = 'SOGG' , Dbtype = 'oracle')

数据链创建后,可以在 字典表sys_database_link 与 pg_foreign_server 看到相关信息。

5、验证数据访问

KDB_Database_Link 使用介绍的更多相关文章

  1. KingbaseES DBLink 扩展介绍

    DBLink 扩展插件功能与 Kingbase_FDW 类似,用于远程访问KingbaseES 数据库.相比于Kingbase_FDW,DBLink 功能更强大,可以执行DML,还可以通过 begin ...

  2. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

  3. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  4. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  5. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  6. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  7. HTML DOM 介绍

    本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...

  8. HTML 事件(一) 事件的介绍

    本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...

  9. HTML5 介绍

    本篇主要介绍HTML5规范的内容和页面上的架构变动. 目录 1. HTML5介绍 1.1 介绍 1.2 内容 1.3 浏览器支持情况 2. 创建HTML5页面 2.1 <!DOCTYPE> ...

随机推荐

  1. rhel挂载本地光盘为yum源

    挂载光盘 mount /dev/sr0 /mnt/cdrom mkdir /mnt/cdrom 临时挂载 mount /dev/sr0 /mnt/cdrom 永久挂载光盘 mount -a 执行挂载 ...

  2. Python爬取某短视频热点

    写在前面的一些话: 随着短视频的大火,不仅可以给人们带来娱乐,还有热点新闻时事以及各种知识,刷短视频也逐渐成为了日常生活的一部分.本文以一个简单的小例子,简述如何通过Pyhton依托Selenium来 ...

  3. Python之枚举法解数学题

    作为初二的学生,数学题总是令我苦恼的问题.尤其是我们这里的预备班考试(即我们这里最好的两所高中提前一年招生,选拔尖子生的考试)将近,我所面对的数学题越发令人头疼. 这不,麻烦来了: 如图,在正方形AB ...

  4. 强化学习-学习笔记4 | Actor-Critic

    Actor-Critic 是价值学习和策略学习的结合.Actor 是策略网络,用来控制agent运动,可以看做是运动员.Critic 是价值网络,用来给动作打分,像是裁判. 4. Actor-Crit ...

  5. 论文解读(ValidUtil)《Rethinking the Setting of Semi-supervised Learning on Graphs》

    论文信息 论文标题:Rethinking the Setting of Semi-supervised Learning on Graphs论文作者:Ziang Li, Ming Ding, Weik ...

  6. Java中运算符和方法的区别

    1.多数情况下,运算符是程序语言里固有的.比如+,-,*,/.可以直接被编译为机器语言而无需再调用其它方法编译. 2.运算符在被定义时会被规定运算的优先级.如4+3*3,会得到13.而不是21. 3. ...

  7. 【黄啊码】MySQL入门—3、我用select *,老板直接赶我坐火车回家去,买的还是站票

    大家好!我是黄啊码,学会了DDL语句了吗?那我们今天就来学习一下基本的查询语法,我见过很多外包机构的程序员都是万物皆可select *,然后项目跑了一段时间就基本跑不动了,问就回答:服务器配置不够,加 ...

  8. 破坏正方形UVA1603

    题目大意 有一个由火柴棍组成的边长为n的正方形网格,每条边有n根火柴,共2n(n+1)根火柴.从上至下,从左到右给每个火柴编号,现在拿走一些火柴,问在剩下的后拆当中ongoing,至少还要拿走多少根火 ...

  9. BootStrapBlazor 安装教程--Server模式

    使用模板 使用模板是最简单的办法.因为项目模板里已经包含了BootStrapBlazor的所有需要配置的内容. 首先我们安装项目模板: dotnet new -i Bootstrap.Blazor.T ...

  10. 2022-7-11第五组 pan小堂 js基础

    ##为何学习 JavaScript? ###JavaScript 是 web 开发者必学的三种语言之一: HTML 定义网页的内容 CSS 规定网页的布局 JavaScript 对网页行为进行编程 在 ...