KingbaseES使用dblink查询报错:unsupported for database link

适用于:

KingbaseES所有版本。

问题现象:

KingbaseES创建kingbase_fdw、kdb_database_link扩展插件并创建dblink连接后,在当前的连接使用刚创建的dblink连接可以正常查询数据。关闭或退出当前连接后,新的连接使用dblink查询报错ERROR: Unsupported for database link。

kdb_database_link 是 KingbaseES 为了兼容oracle 语法而开发的跨数据库访问扩展,用于访问KingbaseES, Postgresql , Oracle 。

kdb_database_link 实际是在kingbase_fdw上层进行了包装,创建kdb_database_link同时需要kingbase_fdw。

具体原因:

  1. 数据库kingbase.conf配置文件shared_preload_libraries 没有添加kdb_database_link扩展插件。

  2. 创建kdb_database_link扩展插件后,在当前的连接可以使用dblink查询数据。主要是由于创建kdb_database_link扩展插件后扩展调用的kdb_database_link共享库文件在当前连接进程里面有加载。

  3. 退出或者建立新的连接后,新开的连接进程里面未加载kdb_database_link扩展插件,使用dblink查询就会报错。

# 通过pmap pid可以看到kdb_database_link.so共享库文件在当前的连接进程有加载
$ pmap 847
847: kingbase: system test [local] idle
0000000000400000 9216K r-x-- kingbase
0000000000eff000 108K rw--- kingbase
0000000000f1a000 328K rw--- [ anon ]
0000000001816000 1400K rw--- [ anon ]
0000000001974000 1140K rw--- [ anon ]
00007fc83ca61000 100K r-x-- kingbase_fdw.so
00007fc83ca7a000 2048K ----- kingbase_fdw.so
00007fc83cc7a000 4K rw--- kingbase_fdw.so
00007fc83cc7b000 48K r-x-- kdb_database_link.so
00007fc83cc87000 2044K ----- kdb_database_link.so
00007fc83ce86000 4K rw--- kdb_database_link.so # 退出连接后,新连接pmap信息里面无kdb_database_link.so共享库文件
# 由于信息太多这里不展示,感兴趣可以根据复现用例,进行观察。

解决方法:

在数据库kingbase.conf配置文件shared_preload_libraries添加 kdb_database_link扩展。

# 示例
shared_preload_libraries = 'kdb_database_link,...'

问题复现:

1.创建kdb_database_link扩展插件

create extension kingbase_fdw;
create extension kdb_database_link;

2.创建dblink连接

#	DriverName :      连接驱动名称(同kingbase用户家目录下.odbc.ini文件里面名称保持一致)
# Host : 远程数据库网络地址
# Port : 远程数据库服务端口
# Dbname : 远程数据库名称
# DbType : 远程数据库类型
# DbType : 支持Oracle,KingbaseES,Postgres三种数据库类型 # 语法格式 test=# \help create database link
Command: CREATE DATABASE LINK
Description: define a new database link
Syntax:
CREATE [ PUBLIC ] DATABASE LINK dblink CONNECT TO user IDENTIFIED BY
'password' USING { connect_string | config_tag } # 示例 create public database link link30 connect to 'system' identified by 'system' using(DriverName='KingbaseES V8R6 ODBC Driver',Host='192.168.57.30',Port=54321,Dbname='test',Dbtype='kingbase');

3.使用创建的dblink查询数据

# 创建kdb_database_link扩展插件、创建dblink连接后不退出连接,直接使用创建的dblink查询

test=# select * from emp@link30;
id | name
----+------
2 | name
3 | name
(2 行记录)

4.退出当前连接或者新开连接

test=# \q
[kingbase@postgres ~]$ ksql -Usystem -dtest
ksql (V8.0)
输入 "help" 来获取帮助信息. test=# select * from emp@link31;
ERROR: Unsupported for database link. # 完成问题复现

KingbaseES dblink异常unsupported for database link的更多相关文章

  1. database link远程链接数据库

    --授权创建.删除dblink GRANT CREATE [PUBLIC] DATABASE LINK,DROP [PUBLIC] DATABASE LINK TO canco; --查看数据库GLO ...

  2. Script: Who’s using a database link?(找出谁在使用dblink)

    Every once in awhile it is useful to find out which sessions are using a database link in an Oracle ...

  3. Oracle创建database link(dblink)和同义词(synonym)

    同一个数据库不同用户之间建立dblink和synonym 1.建立dblink 实现在A用户下通过dblink访问B用户下的数据库表,需要在A用户下创建访问B库的dblink连接 --创建远程连接db ...

  4. 建立dblink(database link)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/bisal/article/details/26730993 database linke是建立一个数 ...

  5. Oracle DATABASE LINK(DBLINK)创建

    数据库全局名称可以用以下命令查出: SELECT * FROM GLOBAL_NAME; 修改可以用以下语句来修改参数值: ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALS ...

  6. Oracle数据库如何创建DATABASE LINK?

    Oracle数据库如何创建DATABASE LINK? 2011-08-09 14:54 taowei20061122 CSDN博客  http://blog.csdn.net/taowei20061 ...

  7. oracle 创建database Link

    当两台不同的数据库服务器想要共享一部分数据的时候,可以通过创建database Link的方式实现. 创建全局database links ,则必须使用systm或sys用户,在database前加p ...

  8. DATABASE LINK 的查看、创建与删除

    1.查看dblink SELECT OWNER,OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_TYPE='DATABASE LINK'; 或者 SELECT * ...

  9. oracle Database Link

    1 Database Link 的创建: 有两个数据库服务器A/B, 其中A的IP地址为172.20.36.245, 服务器B为本机.服务器B上的数据库实例名为ORCL,在本机上的服务监听配置上有服务 ...

  10. Oracle database link中查询会开启事务吗?

    关于oracle database link,使用database link相关的查询语句是否会开启事务呢?我们知道,在数据库中一个简单的SELECT查询语句不会产生事务(select for upd ...

随机推荐

  1. Pycharm自定义实时模板

    pycharm添加模板 添加装饰器模板 # 1.file-->Setting-->Editor-->Code Style -->Live Templates# 2." ...

  2. jvm双亲委派机制详解

    双亲委派机制 ​ 记录一下JVM的双亲委派机制学习记录. 类加载器种类 ​ 当我们运行某一个java类的main方法时,首先需要由java虚拟机的类加载器将我们要执行的main方法所在的class文件 ...

  3. 统计Oracle数据库某个用户下面的对象个数

    统计某个用户下面的对象个数 包括表,视图,同义词,函数,存储过程,包,触发器,索引,约束,序列. 1. sql语句 SELECT (SELECT COUNT(*) FROM USER_TABLES) ...

  4. LoadRunner11使用代理录制脚本

    一.背景 电脑安装了LoadRunner11,在进行脚本录制时发现录制的脚本为空,即录制时事件为0,也没有自动调出对应的浏览器:如下图: 问了度娘,发现LR11要成功录制脚本,对各浏览器的版本有要求! ...

  5. 云实例初始化工具cloud-init简介

    项目简介 cloud-init是一款用于初始化云服务器的工具,它拥有丰富的模块,能够为云服务器提供的能力有:初始化密码.扩容根分区.设置主机名.注入公钥.执行自定义脚本等等,功能十分强大. 目前为止c ...

  6. 2022春每日一题:Day 32

    题目:[USACO12DEC]First! G 不太记得当时怎么想的了,但是显然,当一个字符串的前缀存在则他一定不是first,然后做法:对于每个字符串,把每个字符结尾跟他有相同前缀的单词的同元素建边 ...

  7. [排序算法] 直接/折半插入排序 (C++)

    插入排序解释 插入排序很好理解,其步骤是 :先将第一个数据元素看作是一个有序序列,后面的 n-1 个数据元素看作是未排序序列.对后面未排序序列中的第一个数据元素在这个有序序列中进行从后往前扫描,找到合 ...

  8. jmeter ORA-00911: invalid character报错解决方法

    今天通过jmeter进行Oracle数据库操作时,遇到一个小坑. 解决办法:去掉sql最后的分号.

  9. day18 批量查询与模糊查询 & 聚合函数与内置函数 & distinct关键字 & 分页查询limit & 排序order

    day18 两个表student和user student id s_name s_age s_sex user id u_name u_age u_sex 批量插入 insert into stud ...

  10. 【Spark】Day03-Spark SQL:DataFrame、DataSet、sql编程与转换、项目实战(区域热门商品)

    一.概述 1.介绍 将Spark SQL转换成RDD,然后提交到集群执行[对比hive] 提供2个编程抽象:DataFrame&DataSet 可以使用SQL和DatasetAPI与Spark ...