启迪网站开发,想学网站建设优化去哪,网建管理是干嘛的,画家网站建设KingbaseES数据库使用kdb_database_link扩展常见问题 kdb_database_link主要功能是为了满足link语法的适配#xff0c;让用户应用的代码能够适用于更宽泛的产品而无需在移植时大量修改。 支持连接管理#xff0c;在适当的时候关闭连接减少远程数据库的资源开销。支持远程表(视… KingbaseES数据库使用kdb_database_link扩展常见问题 kdb_database_link主要功能是为了满足link语法的适配让用户应用的代码能够适用于更宽泛的产品而无需在移植时大量修改。 支持连接管理在适当的时候关闭连接减少远程数据库的资源开销。支持远程表(视图、物化视图)的查询并且支持下推查询条件减少数据传输的网络开销。支持远程表的插入。支持远程序列的访问。支持远程用户自定义函数(存储过程)的访问。目前仅支持KingbaseES数据库。 一、环境要求 1.配置好ODBC并且通过isql可以正常访问远程数据库。 ODBC连接配置请参考https://www.cnblogs.com/kingbase/p/14921071.html [kes_v8r6c7b12node2 ~]$ 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_v8r6c7b12node2 ~]$ ksql -Usystem -dtest -p5432
ksql (V8.0)
Type help for help.test# \dxList of installed extensionsName | Version | Schema | Description
----------------------------------------------------------------------------------------------------------------------------------------------------------------------btree_gin | 1.3 | public | support for indexing common datatypes in GINbtree_gist | 1.5 | public | support for indexing common datatypes in GiSTdbms_ddl | 1.0 | sys | DBMS_DDL system packagedbms_lob | 1.1 | public | dbms_lob packagedbms_metadata | 1.0 | public | DBMS_METADATA system packagedbms_obfuscation_toolkit | 1.0 | sys | dbms_obfuscation_toolkit system packagedbms_output | 1.0 | sys | DBMS_OUTPUT system packagedbms_utility | 1.0 | sys | dbms_utility extension packagekbcrypto | 1.3 | public | cryptographic functionskdb_cast | 1.0 | sys | kdb_cast extensionkdb_database_link | 1.0 | public | connect to other databases with a database link objectkdb_license | 1.0 | pg_catalog | kdb_license extensionkdb_oracle_datatype | 1.5 | sys | kdb_oracle_datatype extensionkdb_orafce | 3.9 | public | Functions and operators that emulate a subset of functions and packages from the Oracle RDBMSkdb_raw | 1.0 | public | support RAW data and functions in KDBkdb_schedule | 1.0 | sys | A KingbaseES job schedulerkdb_tinyint | 1.0 | pg_catalog | Create a new data type tinyint and its functions operators and indexeskdb_utils_function | 1.3 | public | Functions and operators that emulate a subset of functions and packages from the Oracle RDBMSkingbase_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 packagepageinspect | 1.8 | public | inspect the contents of database pages at a low levelpldbgapi | 1.2 | public | server-side support for debugging PL/pgSQL functionsplpgsql | 1.0 | pg_catalog | PL/pgSQL procedural languageplsql | 1.0 | pg_catalog | PL/SQL procedural languageplsql_json | 1.0 | public | KingbaseES plsql_jsonplsql_pldbgapi | 1.2 | public | server-side support for debugging PL/SQL functionsplsql_plprofiler | 4.2 | public | server-side support for profiling PL/SQL functionssys_anon | 1.0 | anon | provides data masking functionalitysys_bulkload | 2.0 | public | sys_bulkload is a high speed data loading utility for KingbaseESsys_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 executedsys_trgm | 1.4 | public | text similarity measurement and index searching based on trigramssysaudit | 1.0 | sysaudit | provides auditing functionalitysysmac | 1.0 | sysmac | Mac for Kingbaseuuid-ossp | 1.1 | public | generate universally unique identifiers (UUIDs)xlog_record_read | 1.0 | pg_catalog | xlog_record_read functionszhparser | 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(DriverNameKES ODBC Driver,Host192.168.10.40,Port5432,Dbnametest,Dbtypekingbase);
ERROR: foreign-data wrapper kingbase_fdw does not exist 场景2使用dblink查询提示 ERROR: Unsupported for database link. --创建dblink后重新登录数据库使用dblink查询报错[kes_v8r6c7b12node2 ~]$ ksql -Usystem -dtest -p5432
ksql (V8.0)
Type help for help.test# select * from t1kes_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.38798508
(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.38798508
(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(DriverNameKES ODBC Driver,Host192.168.10.40,Port5432,Dbnametest,Dbtypekingbase);
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(DriverNameKES ODBC Driver,Host192.168.10.40,Port5432,Dbnametest,Dbtypekingbase);
CREATE DATABASE LINK--使用dblink查询数据
test# select * from t1kes_link;ID | NAME
----------1 | tx2 | 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_v8r6c7b12node2 ~]$ 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_v8r6c7b12node2 ~]$ 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.38798508
(1 row)test# select * from t1kes_link; ID | NAME
----------1 | tx2 | 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_v8r6c7b12node2 ~]$ 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(DriverNameKES ODBC Driver,Host192.168.10.40,Port5432,Dbnametest,Dbtypekingbase);
CREATE DATABASE LINK
test# select * from t1kes_link; ID | NAME
----------1 | tx2 | llx
(2 rows) 四、总结 shared_preload_libraries是配置参数用来指定在数据库服务器启动过程中应加载到内存中的共享库。共享库是KingbaseES扩展功能模块。shared_preload_libraries参数的值是一个以逗号分隔的共享库名称列表如果名称中包含空格或逗号需要用双引号括起来。例如my library此参数只能在服务器启动时设置共享库需要在启动时加载才能正常工作,不能在运行时修改。如果修改了这个参数的值需要重启服务器才能生效。