KingbaseES数据库使用kdb_database_link扩展常见问题

kdb_database_link主要功能是为了满足@link语法的适配,让用户应用的代码能够适用于更宽泛的产品而无需在移植时大量修改。

  • 支持连接管理,在适当的时候关闭连接减少远程数据库的资源开销。
  • 支持远程表(视图、物化视图)的查询,并且支持下推查询条件减少数据传输的网络开销。
  • 支持远程表的插入。
  • 支持远程序列的访问。
  • 支持远程用户自定义函数(存储过程)的访问。目前仅支持KingbaseES数据库。

一、环境要求:

1.配置好ODBC,并且通过isql可以正常访问远程数据库。

ODBC连接配置请参考:https://www.cnblogs.com/kingbase/p/14921071.html

[kes_v8r6c7b12@node2 ~]$ isql -v kes
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select count(1) from t1;
+---------------------+
| COUNT |
+---------------------+
| 24 |
+---------------------+
SQLRowCount returns 1
1 rows fetched

2.数据库有kdb_database_link扩展插件:

--登录数据库查询是否有kdb_database_link扩展插件
[kes_v8r6c7b12@node2 ~]$ ksql -Usystem -dtest -p5432
ksql (V8.0)
Type "help" for help. test=# \dx
List of installed extensions
Name | Version | Schema | Description
--------------------------+---------+--------------+---------------------------------------------------------------------------------------------------------------------
btree_gin | 1.3 | public | support for indexing common datatypes in GIN
btree_gist | 1.5 | public | support for indexing common datatypes in GiST
dbms_ddl | 1.0 | sys | DBMS_DDL system package
dbms_lob | 1.1 | public | dbms_lob package
dbms_metadata | 1.0 | public | DBMS_METADATA system package
dbms_obfuscation_toolkit | 1.0 | sys | dbms_obfuscation_toolkit system package
dbms_output | 1.0 | sys | DBMS_OUTPUT system package
dbms_utility | 1.0 | sys | dbms_utility extension package
kbcrypto | 1.3 | public | cryptographic functions
kdb_cast | 1.0 | sys | kdb_cast extension
kdb_database_link | 1.0 | public | connect to other databases with a database link object
kdb_license | 1.0 | pg_catalog | kdb_license extension
kdb_oracle_datatype | 1.5 | sys | kdb_oracle_datatype extension
kdb_orafce | 3.9 | public | Functions and operators that emulate a subset of functions and packages from the Oracle RDBMS
kdb_raw | 1.0 | public | support RAW data and functions in KDB
kdb_schedule | 1.0 | sys | A KingbaseES job scheduler
kdb_tinyint | 1.0 | pg_catalog | Create a new data type tinyint and its functions operators and indexes
kdb_utils_function | 1.3 | public | Functions and operators that emulate a subset of functions and packages from the Oracle RDBMS
kingbase_version | 1.0 | pg_catalog | This is a utility that provides function related to version number, it is used to get the Kingbase version number.
owa_util | 1.0 | sys | owa_util system package
pageinspect | 1.8 | public | inspect the contents of database pages at a low level
pldbgapi | 1.2 | public | server-side support for debugging PL/pgSQL functions
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
plsql | 1.0 | pg_catalog | PL/SQL procedural language
plsql_json | 1.0 | public | KingbaseES plsql_json
plsql_pldbgapi | 1.2 | public | server-side support for debugging PL/SQL functions
plsql_plprofiler | 4.2 | public | server-side support for profiling PL/SQL functions
sys_anon | 1.0 | anon | provides data masking functionality
sys_bulkload | 2.0 | public | sys_bulkload is a high speed data loading utility for KingbaseES
sys_freespacemap | 1.2 | sys | examine the free space map (FSM)
sys_stat_statements | 1.10 | public | track parsing, planning and execution statistics of all SQL statements executed
sys_trgm | 1.4 | public | text similarity measurement and index searching based on trigrams
sysaudit | 1.0 | sysaudit | provides auditing functionality
sysmac | 1.0 | sysmac | Mac for Kingbase
uuid-ossp | 1.1 | public | generate universally unique identifiers (UUIDs)
xlog_record_read | 1.0 | pg_catalog | xlog_record_read functions
zhparser | 1.0 | public | a parser for full-text search of Chinese
(38 rows) --如果数据库没有kdb_database_link扩展插件,使用以下命令创建
test=# create extension kdb_database_link ;
CREATE EXTENSION

二、适用于:

KingbaseES所有版本。

二、问题现象:

场景1:创建dblink连接提示 ERROR: foreign-data wrapper "kingbase_fdw" does not exist

--使用以下语句创建dblink报错
test=# create public database link kes_link connect to 'system' identified by 'system' using(DriverName='KES ODBC Driver',Host='192.168.10.40',Port=5432,Dbname='test',Dbtype='kingbase');
ERROR: foreign-data wrapper "kingbase_fdw" does not exist

场景2:使用dblink查询提示 ERROR: Unsupported for database link.

--创建dblink后重新登录数据库使用dblink查询报错

[kes_v8r6c7b12@node2 ~]$ ksql -Usystem -dtest -p5432
ksql (V8.0)
Type "help" for help. test=# select * from t1@kes_link;
ERROR: Unsupported for database link. --查询dblink是否存在
test=# select * from user_db_links ;
OWNER | DB_LINK | USERNAME | HOST | CREATED
--------+----------+----------+---------------+-------------------------------
system | kes_link | system | 192.168.10.40 | 2023-07-21 17:06:23.387985+08
(1 row) test=# select * from all_db_links ;
OWNER | DB_LINK | USERNAME | HOST | CREATED
--------+----------+----------+---------------+-------------------------------
system | kes_link | system | 192.168.10.40 | 2023-07-21 17:06:23.387985+08
(1 row)

场景3:删除dblink提示 ERROR: unrecognized class ID: 8070

test=# drop database link kes_link;
ERROR: unrecognized class ID: 8070

场景4:删除dblink提示 ERROR: database link "kes_link" does not exist

test=# drop database link kes_link;
ERROR: database link "kes_link" does not exist

场景5:创建dblink提示:ERROR: unrecognized node type: 360

test=# create public database link kes_link connect to 'system' identified by 'system' using(DriverName='KES ODBC Driver',Host='192.168.10.40',Port=5432,Dbname='test',Dbtype='kingbase');
ERROR: unrecognized node type: 360

三、解决方法:

场景1:

问题原因

  • kdb_database_link主要功能是为了兼容Oracle数据库@link语法的适配,实际是在kingbase_fdw上层进行了包装,所以还需要安装kingbase_fdw扩展。

问题解决:

--创建kingbase_fdw扩展插件
test=# create extension kingbase_fdw;
CREATE EXTENSION
--创建dblink
test=# create public database link kes_link connect to 'system' identified by 'system' using(DriverName='KES ODBC Driver',Host='192.168.10.40',Port=5432,Dbname='test',Dbtype='kingbase');
CREATE DATABASE LINK --使用dblink查询数据
test=# select * from t1@kes_link;
ID | NAME
----+------
1 | tx
2 | llx
(2 rows)

场景2:

问题原因

  • 数据库kingbase.conf配置文件shared_preload_libraries 没有添加kdb_database_link扩展插件。
  • 创建kdb_database_link扩展插件后,在当前的连接可以使用dblink查询数据。主要是由于创建kdb_database_link扩展插件后扩展调用的kdb_database_link共享库文件在当前连接进程里面有加载。
  • 退出或者建立新的连接后,新开的连接进程里面未加载kdb_database_link扩展插件,使用dblink查询就会报错。

问题解决:

  • 在数据库kingbase.conf配置文件shared_preload_libraries添加 kdb_database_link扩展。
--在kingbase.conf文件shared_preload_libraries添加kdb_database_link
shared_preload_libraries = 'kdb_database_link,...' --添加后重启数据库
[kes_v8r6c7b12@node2 ~]$ sys_ctl -D ora_data/ restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2023-07-21 17:29:07.986 CST [20547] LOG: sepapower extension initialized
2023-07-21 17:29:07.993 CST [20547] LOG: starting KingbaseES V008R006C007B0012 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
2023-07-21 17:29:07.993 CST [20547] LOG: listening on IPv4 address "0.0.0.0", port 5432
2023-07-21 17:29:07.993 CST [20547] LOG: listening on IPv6 address "::", port 5432
2023-07-21 17:29:07.999 CST [20547] LOG: listening on Unix socket "/tmp/.s.KINGBASE.5432"
2023-07-21 17:29:08.046 CST [20547] LOG: redirecting log output to logging collector process
2023-07-21 17:29:08.046 CST [20547] HINT: Future log output will appear in directory "sys_log".
done
server started --再次登录数据库进行查询
[kes_v8r6c7b12@node2 ~]$ ksql -Usystem -dtest -p5432
ksql (V8.0)
Type "help" for help. test=# select * from user_db_links ;
OWNER | DB_LINK | USERNAME | HOST | CREATED
--------+----------+----------+---------------+-------------------------------
system | kes_link | system | 192.168.10.40 | 2023-07-21 17:06:23.387985+08
(1 row) test=# select * from t1@kes_link;
ID | NAME
----+------
1 | tx
2 | llx
(2 rows)

场景3:

问题原因:

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

问题解决:

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

场景4:

问题原因:

  • 删除dblink时未指定dblink所在的schema。

问题解决:

  • 删除dblink时指定dblink所在schema。
--删除成功
test=# drop database link public.kes_link;
DROP DATABASE LINK

场景5:

问题原因:

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

问题解决:

  • 在数据库kingbase.conf配置文件shared_preload_libraries添加 kdb_database_link扩展。
--kingbase.conf配置文件shared_preload_libraries添加 kdb_database_link扩展后重启数据库
--再次登录创建成功
[kes_v8r6c7b12@node2 ~]$ ksql -Usystem -dtest -p5432
ksql (V8.0)
Type "help" for help. test=# create public database link kes_link connect to 'system' identified by 'system' using(DriverName='KES ODBC Driver',Host='192.168.10.40',Port=5432,Dbname='test',Dbtype='kingbase');
CREATE DATABASE LINK
test=# select * from t1@kes_link;
ID | NAME
----+------
1 | tx
2 | llx
(2 rows)

四、总结:

  • shared_preload_libraries是配置参数,用来指定在数据库服务器启动过程中应加载到内存中的共享库。共享库是KingbaseES扩展功能模块。
  • shared_preload_libraries参数的值是一个以逗号分隔的共享库名称列表,如果名称中包含空格或逗号,需要用双引号括起来。例如:"my library"
  • 此参数只能在服务器启动时设置,共享库需要在启动时加载才能正常工作,不能在运行时修改。如果修改了这个参数的值,需要重启服务器才能生效。

KingbaseES数据库使用kdb_database_link扩展常见问题的更多相关文章

  1. CentOS7安装redis数据库及php-redis扩展

    redis 首先把redis安装到服务器中 1.wget http://download.redis.io/redis-stable.tar.gz 下载redis源码 2. tar xvzf redi ...

  2. LinUX系统ThinkPHP5链接MsSQL数据库的pdo_dblib扩展

    LinUX(centOS6.8)系统ThinkPHP5链接MsSQL数据库的pdo_dblib扩展第一步 下载并安装freetds-current.tar.gz下载地址如下ftp://ftp.free ...

  3. KingbaseES 数据库Windows环境下注册数据库服务

    关键字: KingbaseES.Java.Register.服务注册 一.安装前准备 1.1 软件环境要求 金仓数据库管理系统KingbaseES V8.0支持微软Windows 7.Windows ...

  4. KingbaseES 数据库软件卸载

    关键字: KingbaseES.卸载   一.安装后检查 在安装完成后,可以通过以下几种方式进行安装正确性验证: 1. 查看安装日志,确认没有错误记录; 2. 查看开始菜单: 查看应用程序菜单中是否安 ...

  5. KingbaseES 数据库删除功能组件

      关键字: KingbaseES.卸载.删除功能   一.安装后检查 在安装完成后,可以通过以下几种方式进行安装正确性验证: 1. 查看安装日志,确认没有错误记录; 2. 查看开始菜单: 查看应用程 ...

  6. Linux安装KingbaseES数据库 Unsupported major.minor version错误处理

    Linux系统安装V008R006C007B0012版本KingbaseES数据库报错:Unsupported major.minor version 52.0 系统版本: [root@vm-10-3 ...

  7. KStudio-Java程序连接KingbaseES数据库异常

    错误信息: --KStudio客户端工具错误信息 The conncetion attempt failed.Reason:connect time out --Java应用程序控制台日志 Cause ...

  8. KingbaseES数据库目录结构

    KingbaseES数据库目录结构 [kingbase@postgres V8]$ tree -LP 2 data/ . ├── data │ ├── base # 存储用户创建的数据库文件及隶属于用 ...

  9. jdbc访问KingbaseES数据库SocketTimeoutException Read timed out

    jdbc访问KingbaseES数据库发生异常:SocketTimeoutException Read timed out 一.异常现象: 应用显示ERROR信息: Caused By: java.n ...

  10. CentOS安装Oracle数据库详细介绍及常见问题汇总

    一.安装前准备 1.软件硬件要求 操作系统:CentOS 6.4(32bit)Oracle数据库版本:Oracle 10g(10201_database_linux32.zip)最小内存:1G(检查命 ...

随机推荐

  1. 【Unity3D】地面网格特效

    1 前言 ​ 本文实现了地面网格特效,包含以下两种模式: 实时模式:网格线宽度和间距随相机的高度实时变化: 分段模式:将相机高度分段,网格线宽度和间距在每段中对应一个值. ​ 本文完整资源见→Unit ...

  2. Java中的Try with Resources语句介绍

    1.介绍 从Java7诞生了try-with-resources,这家伙可以在资源使用完后实现自动关闭回收.想想我们之前打开一个文件或流对象用完咋整的,是不是finally语句块中手动close的. ...

  3. Mysql错误消息 语言设置

    今天操作数据库的时候,mysql错误返回语句 ,一直报的是非英语的语言 ,百般纠结 ,简单的还大致能猜出意思 , 复杂了就会实在看不懂的 ,举个简单的如下: [Err] 1064 - Erreur d ...

  4. win32-如何识别哪个静态控件被点击

    创建多个具体SS_NOTIFY样式的static controls 根据文档显示,当用户单击具有SS_NOTIFY样式的静态控件时,将发送STN_CLICKED通知代码.控件的父窗口通过WM_COMM ...

  5. Golang gRPC学习(05): retry重试

    什么是重试 如果服务出现了错误,主要是网络,服务器出现了短暂异常的时候,该怎么办? 我们都会人工或者自动的重新连接服务试试,看服务是否恢复可用了. 这种重新进行连接服务的一种方式就是重试.如果是在微服 ...

  6. gorm入门学习

    文档 https://learnku.com/docs/gorm/v2/v2_release_note/9756 https://gorm.cn/zh_CN/docs/ 下载安装 go get -u ...

  7. 【Azure Spring Cloud】Java Spring Cloud 应用部署到Azure上后,发现大量的 java.lang.NullPointerException: null at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:426) at ... 异常

    Azure Spring Cloud 是什么? 借助 Azure Spring Cloud,可以轻松地将 Spring Boot 微服务应用程序部署到 Azure,不需更改任何代码. 该服务管理 Sp ...

  8. 【转载】大数据OLAP系统--开源组件方案对比

    开源大数据OLAP组件,可以分为MOLAP和ROLAP两类.ROLAP中又可细分为MPP数据库和SQL引擎两类.对于SQL引擎又可以再细分为基于MPP架构的SQL引擎和基于通用计算框架的SQL引擎: ...

  9. Android---Android 开发四大组件

    Android 应用程序组件 应用程序组件是一个Android应用程序的基本构建块.这些组件由应用清单文件松耦合的组织.AndroidManifest.xml描述了应用程序的每个组件,以及他们如何交互 ...

  10. Java 设计模式简介

    设计模式简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软 ...