金仓数据库使用dblink访问ORACLE

来源:这里教程网 时间:2026-03-03 20:08:11 作者:
微信公众号:**老杜随笔**




如有问题或建议,请公众号留言;




**[如果你觉得对你有帮助,欢迎关注

一、说明

kingbase到oracle数据库的DBLINK,基于ODBC协议连接。以下为创建DBLINK过程案例。

二、配置kingbase的ODBC

2.1 环境说明

目标数据库: ORACLE21

源数据库: KingbaseES V008R006C008B002

源(目标)主机ip:LINUX 192.168.137.101

2.2 配置unixODBC

2.2.1、下载unixODBC

https://www.unixodbc.org/

在右边导航选择Download 选项,即可下载unixODBC-2.3.12.tar.gz。

2.2.2配置kingbase odbc

[kingbase@pgdb ~]$ odbcinst -j




unixODBC 2.3.1




DRIVERS............: /etc/odbcinst.ini




SYSTEM DATA SOURCES: /etc/odbc.ini




FILE DATA SOURCES..: /etc/ODBCDataSources




USER DATA SOURCES..: /home/kingbase/.odbc.ini




[root@pgdb ~]# chmod 660 /etc/odbcinst.ini

[kingbase@pgdb ~]$ odbcinst -j




unixODBC 2.3.1




DRIVERS............: /etc/odbcinst.ini




SYSTEM DATA SOURCES: /etc/odbc.ini




FILE DATA SOURCES..: /etc/ODBCDataSources




USER DATA SOURCES..: /home/kingbase/.odbc.ini




[root@pgdb ~]# chmod 660 /etc/odbcinst.ini




```

2.2.3上传Oracle的ODBC驱动到KingbaseES服务器







[oracle@pgdb ~]$ cd $ORACLE_HOME/lib




[oracle@pgdb lib]$ ls -lt libsqora.so.21.1




-rw-r--r--. 1 oracle oinstall 1082576 Jul 27 2021 libsqora.so.21.1




[oracle@pgdb lib]$ cp libsqora.so.21.1 /home/kingbase/app/Server/lib/libsqora.so.21.1


[kingbase@pgdb ~]$ cat /etc/odbcinst.ini




cat: /etc/odbcinst.ini: Permission denied




[kingbase@pgdb ~]$ exit




logout




[root@pgdb ~]# chmod 775 /etc/odbcinst.ini




[root@pgdb ~]# su - kingbase




Last login: Sat Jun 29 14:08:43 CST 2024 on pts/2




[kingbase@pgdb ~]$ cat /etc/odbcinst.ini




[Oracle ODBC Driver]




Description = ODBC for Oracle




Driver = /home/kingbase/app/Server/lib/libsqora.so.21.1

三、KingbaseES数据库创建dblink

 3.1 修改KingbaseES数据库配置文件(data路径下kingbase.conf文件)

```




shared_preload_libraries = 'synonym, plsql, force_view, kdb_flashback,plugin_debugger, plsql_plugin_debugger, plsql_plprofiler, kdb_ora_expr, sepapower, dblink, sys_kwr, sys_spacequota, sys_stat_statements, backtrace, kdb_utils_function, auto_bmr, sys_squeeze, src_restrict,kdb_database_link'




ora_input_emptystr_isnull = on




ora_integer_div_returnfloat = on




[kingbase@pgdb data]$ pwd




/home/kingbase/app/data


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

 3.2 重启数据库

```




[kingbase@pgdb data]$ sys_ctl restart -D data/




sys_ctl: directory "data" does not exist




[kingbase@pgdb data]$ cd ..




[kingbase@pgdb app]$ sys_ctl restart -D data/




sys_ctl: PID file "data/kingbase.pid" does not exist




Is server running?




trying to start server anyway




waiting for server to start....2024-06-29 14:19:59.504 CST [26388] LOG: sepapower extension initialized




2024-06-29 14:19:59.542 CST [26388] LOG: starting KingbaseES V008R006C008B0020 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit




2024-06-29 14:19:59.544 CST [26388] LOG: listening on IPv4 address "0.0.0.0", port 54321




2024-06-29 14:19:59.544 CST [26388] LOG: listening on IPv6 address "::", port 54321




2024-06-29 14:19:59.547 CST [26388] LOG: listening on Unix socket "/tmp/.s.KINGBASE.54321"




2024-06-29 14:19:59.676 CST [26388] LOG: redirecting log output to logging collector process




2024-06-29 14:19:59.676 CST [26388] HINT: Future log output will appear in directory "sys_log".

3.3登录数据库创建插件

```




[kingbase@pgdb ~]$ ksql -p 54321 -U system test 




Password for user system: 




Type "help" for help.










test=# 




test=# create extension kdb_database_link ;




CREATE EXTENSION




test=# 




test=# create extension oracle_fdw ;




CREATE EXTENSION




test=# 

3.4创建DBLINK

```




test=# create public database link to_king_ora connect to 'system' identified by 'oracle'




<r' , Host = '192.168.137.101' , Port = 1521 , Dbname = 'orcl' , Dbtype = 'oracle');




CREATE DATABASE LINK




另一种方式可以配置




sys_database_link.conf文件




[kingbase@pgdb data]$ cat sys_database_link.conf




\#




\#Databaselink配置文件




\#databaselink是一组命名的连接参数。




\#可以在此文件中指定多个databaselinks。




\#每个从括号里的databaselink名开始。




\#随后的行有“param = value”模式的连接配置参数。




\#在此文件中包含了ORADB的示例配置。开始使用“#”的行是注释。




\#




[oradb]




dbtype=Oracle




dbname=orcl




DriverName="Oracle ODBC Driver"




host=192.168.137.101




port=1521

四、测试

test=# 




test=# 




test=# select * from tab@to_king_ora;





      tname      | tabtype | clusterid 




-----------------------------+---------+-----------




 LOGMNR_SESSION_EVOLVE$   | TABLE  |     




 LOGMNR_GLOBAL$       | TABLE  |     




 LOGMNR_GT_TAB_INCLUDE$   | TABLE  |     




 LOGMNR_GT_USER_INCLUDE$   | TABLE  |     




 LOGMNR_GT_XID_INCLUDE$   | TABLE  |     




 LOGMNR_PDB_INFO$      | TABLE  |     




 LOGMNR_DID$         | TABLE  |     




 LOGMNR_UID$         | TABLE  |     




 LOGMNRGGC_GTLO       | TABLE  |     




 LOGMNRGGC_GTCS       | TABLE  |     




 LOGMNRC_DBNAME_UID_MAP   | TABLE  |     




 LOGMNR_LOG$         | TABLE  |        

五、总结

5.1kingbase通过dblink访问oracle注意事项

1、版本兼容性:确认KingbaseES和Oracle数据库的版本是否支持相互之间的DBLink连接。通常较新的KingbaseES版本(如从V8R6C4B0021开始)开始支持与Oracle的DBLink交互,但仍需查阅最新的产品文档或联系技术支持确认兼容性。

2、网络连通性:确保KingbaseES服务器与Oracle服务器之间的网络是畅通的,包括端口开放、防火墙配置等,因为DBLink依赖于网络连接来传递SQL请求和结果集。

Oracle客户端库:KingbaseES可能需要Oracle客户端库(如OCI或Instant Client)来支持与Oracle的DBLink通讯。确保正确安装并配置这些库,且它们的版本与Oracle数据库兼容。

3、权限与角色:确保KingbaseES中的用户有足够的权限来创建和使用DBLink。可能需要在KingbaseES中使用具有相应权限的用户(如SYSDBA角色)来创建公共DBLink,或为普通用户授予CREATE DATABASE LINK权限。

4、数据类型映射:由于KingbaseES和Oracle数据库的数据类型可能不完全一致,注意在查询时处理数据类型映射问题,以避免数据不兼容导致的错误。

5、性能考量:通过DBLink执行的查询可能会比本地查询慢,因为它涉及网络通信。优化查询性能,尽量减少数据传输量,例如,仅选择需要的列,使用适当的过滤条件等。

6、字符集兼容性:确认两个数据库的字符集设置是否兼容,以免数据在传输过程中因字符编码问题而损坏或无法正确显示。

7、安全配置:出于安全考虑,避免在DBLink定义中明文存储密码。考虑使用外部密码文件或安全的密码管理机制。

相关推荐