首页 > 数据库 >oracle使用dblink连接postgresql

oracle使用dblink连接postgresql

时间:2023-10-22 10:31:34浏览次数:36  
标签:postgresql ## 192.168 t1 dblink PG SQL oracle pg

环境:

oracle        数据库: 192.168.22.201 端口号6666 操作系统:RHEL 7.6
postgresql 数据库: 192.168.22.20   端口号5432 操作系统:RHEL 7.6

pg数据库配置

  • 1、修改 pg_hba.conf 文件
host all lanmc 192.168.22.201/24 md5
  • 2、重新加载服务
systemctl reload postgresql-15.service

oracle数据库配置

  • 1、安装unixODBC,unixODBC相当于Linux中管理所有数据库ODBC驱动的管理器。可以使用isql --v查询获取安装unixODBC版本
yum install -y unixODBC.x86_64
	
[root@t11g2 ~]# isql --version
unixODBC 2.3.1
  • 2、安装postgresql的odbc驱动,默认安装位置在/usr/pgsql-11/lib
rpm -ivh postgresql11-libs-11.9-1PGDG.rhel7.x86_64.rpm 
rpm -ivh postgresql11-odbc-13.02.0000-1PGDG.rhel7.x86_64.rpm

###############################   如果不使用新的odbc驱动会出现一下报错   ################
## SQL> create database link PG_LINK connect to "lanmc" identified by "lanmc123" using 'PG';
## 
## Database link created.
## 
## SQL> select * from t1@PG_LINK;
## select * from t1@PG_LINK
##                  *
## ERROR at line 1:
## ORA-28545: error diagnosed by Net8 when connecting to an agent
## Unable to retrieve text of NETWORK/NCR message 65535
## ORA-02063: preceding 2 lines from PG_LINK
## 
## 
## 
## SQL> select * from "t1"@pg ;
## select * from "t1"@pg
##                    *
## ERROR at line 1:
## ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
## ORA-02063: preceding line from PG
## 
## SQL> select * from "t1"@pg;
## select * from "t1"@pg
##               *
## ERROR at line 1:
## ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
## No query has been executed with that handle;
## Could not send Query(connection dead) {HY000,NativeErr = 1}
## ORA-02063: preceding 3 lines from PG
## 
## 
## 
## SQL> select * from "t1"@pg;
## select * from "t1"@pg
##                    *
## ERROR at line 1:
## ORA-28545: error diagnosed by Net8 when connecting to an agent
## Unable to retrieve text of NETWORK/NCR message 65535
## ORA-02063: preceding 2 lines from PG
########################################################################################################
  • 3、root用户新建/etc/odbc.ini
vi /etc/odbc.ini

[PG]
Description        = PostgreSQL connection to lanmc
Driver             = /usr/pgsql-11/lib/psqlodbcw.so	
Setup              = /usr/pgsql-11/lib/psqlodbcw.so
Database           = lanmc
Servername         = 192.168.22.20
UserName           = lanmc
Password           = lanmc123
Port               = 5432
SocketBufferSize   = 4096
FetchBufferSize    = 500
ReadOnly           = Yes
RowVersioning      = No
ShowSystemTables   = No
ConnSettings       = set client_encoding to UTF8


测试:
[root@t11g2 lib]# isql pg
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> quit()

############################  如果测试连接失败,则需要检查网络连接是否正常  ###################
## [root@t11g1 opt]# isql pg
## [ISQL]ERROR: Could not SQLConnect
## 
## [root@t11g1 opt]# telnet 192.168.22.20 5432
## Trying 192.168.22.20...
## telnet: connect to address 192.168.22.20: Connection refused
###########################################################
  • 4、配置透明网关
    在$ORACLE_HOME/hs/admin目录下创建initPG.ora
su - oracle
vi $ORACLE_HOME/hs/admin/initPG.ora

# HS init parameters
#
HS_FDS_CONNECT_INFO = PG
HS_FDS_TRACE_LEVEL = 255
HS_FDS_SHAREABLE_NAME = /usr/pgsql-11/lib/psqlodbcw.so   ## 这里应该写unixodbc的lib包/usr/lib64/libodbc.so
HS_FDS_TRACE_LEVEL=ON
HS_NLS_NCHAR=UCS2
#HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P1
HS_LANGUAGE=AMERICAN_AMERICA.AL32UTF8

#set ODBCINI=/home/oracle/.odbc.ini
set ODBCINI=/etc/odbc.ini
  • 5、配置tnsnames.ora文件
vi $ORACLE_HOME/network/admin/tnsnames.ora

PG =
 (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.202)(PORT = 6666))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.203)(PORT = 6666))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.204)(PORT = 6666))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.205)(PORT = 6666))
  (CONNECT_DATA =
  (SID = PG)
  )
 (HS = OK)
 )
  • 6、配置监听文件,由于是rac环境在grid用户下
su - grid

vi $ORACLE_HOME/network/admin/listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
      (SID_DESC=
      (SID_NAME=PG)
      (ORACLE_HOME=/u01/app/oracle/product/11.2.0/db)
      (PROGRAM=dg4odbc)
      (ENVS=LD_LIBRARY_PATH="/usr/pgsq-11/lib:/u01/app/oracle/product/11.2.0/db/lib")
      )
   )
   
## 重启监听
lsnrctl reload


## 创建dblink

SQL> create database link pg_test connect to "lanmc" identified by "lanmc123" using 'PG';

Database link created.

SQL> 
SQL> 
SQL> select * from "t1"@pg_test;

        id
----------
         1
         2

标签:postgresql,##,192.168,t1,dblink,PG,SQL,oracle,pg
From: https://blog.51cto.com/u_13482808/7974520

相关文章

  • oracle使用dblink连接mysql
    在oracle数据库访问mysql数据库数据环境Oracle 数据库:192.168.22.6端口1521操作系统:RHEL7.6MYSQL数据库:192.168.22.9端口3306操作系统:RHEL7.6 用户:lanmc,密码:lanmc123,数据库lanmcORACLE数据库配置1、oracle服务端安装mysqlodbcmysqlodbc下载地址:https://dev.mysql......
  • Postgresql数据库之Python连接数据库&查询练习
    Task1.基于finalshell建立的SSH隧道,实现Python代码连接天翼云数据库(1)给出finalshell的配置如下图:为了登录安全起见,将ssh登录端口和数据库监听端口进行了修改。(2)给出Python连接天翼云数据库的代码Python代码如下:importpsycopg2conn=psycopg2.connect(dbname='a2513210112',......
  • Oracle数据编纂(脱敏)
    OracleDatabase-EnterpriseEdition-Version12.1.0.2andlater1.问题描述客户需求:Oracle数据库里面能不能实现这么一个功能,让符合条件的用户可以看到表里面的所有数据,而另外一些人(比如权限低的用户)虽然能查询表,但是对某些敏感数据全部用星号加密了。效果如下图所示:=>2.问题......
  • Oracle获取执行计划的七种方法以及使用场景
    一.explainplanforselect*fromt1,t2 wheret1.id=t2.id andt1.idin(5,6);select*fromtable(dbms_xplan.display());优点无需真正执行,快捷方便缺点1.没有输出运行时的相关统计信息(产生多少逻辑读,多少次物理读,多少次递归调用等);2.无法判断是处理了多少行;3.无法判断表被......
  • 在Postgresql中,为表中的所有点提供100m缓冲区,其中有50M个条目
    我有一个表,有50米的纬度和经度条目,geom是我从QGIS导入时创建的。我试图通过调用jupyter笔记本中的表来为表中的所有点创建一个100m的缓冲区。我还尝试使用SRID:25832转换坐标系,以米为单位表示缓冲区,但在postgresql视图中看不到投影到正确位置的点。SELECT*FROMpublic."opera......
  • PgSql - PostGIS 在 PostgreSQL 中使用
    首先来介绍一下PostGIS是什么?PostGIS是PostgreSQL对象关系数据库的一个空间数据库扩展。它增加了对地理对象的支持,允许在SQL中运行位置查询。官方介绍:PostGIS:SpatialandGeographicobjectsforPostgreSQLPostGISisaspatialdatabaseextenderforPostgreSQLobject......
  • oracle怎样分批查询
    在Oracle中,分批查询通常是通过使用"分页"的方式来实现的。可以使用ROWNUM伪列、OFFSET关键字和FETCHFIRST关键字来完成分页查询。具体地,可以使用如下的SQL语句进行分页查询:SELECT*FROM(SELECTA.*,ROWNUMRNFROM(SELECT*FROMyour_tableWH......
  • Oracle数据库中文显示乱码
    问题sql脚本导入到Oracle数据库,中文数据显示乱码。原因本地环境没有配置数据库编码格式,需要跟服务器上数据库编码格式统一。解决方法1.查询数据库编码格式,使用Selectuserenv('language')fromdual语句查询数据库编码格式。2.在**系统环境变量**配置:N......
  • typeorm oracle 表大小写问题
    oracle对于表名的定义包含了是否包含双引号的问题,但是默认typeorm创建的是包含了双引号的,造成数据查询会有问题(typeorm自身没有问题,但是外部查询会有问题)解决方法自定义命名策略参考 classOracleNameStrategyextendstypeorm.DefaultNamingStrategy{......
  • postgresql【JSONB用法】
    //userNametypecode是我拿到数据结构出来的可以写固定值来测试;code字段为上面设置的唯一约束。如果code值没有变就是修改,否则就是新增INSERTINTO表名(username,type,code)VALUES('${userName}','${type}','${code}')ONCONFLICT9.6语法支持(code)DOUPDATE......