18824582472
论坛版主
论坛版主
  • 发帖数76
  • QQ
  • 金币2652两
  • 威望2560点
  • 钻石0枚
  • 注册日期2017-08-17
  • 最后登录2024-04-08
  • 社区居民
  • 忠实会员
阅读:12391回复:8

[资源分享]ORACLE使用DBLINK连接其他数据库步骤

楼主#
更多 发布于:2019-04-10 20:59
  做ERP的时候,经常遇到需要操作其他系统数据库的情况,ORACLE连接ORACLE的时候比较简单,直接创建DBLINK就可以了
create public database link LINK名称 connect to 数据库用户名  identified by "密码"
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xx-----数据库IP)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = xxx----要连接的数据库的SID)
)
)';

但是ORACLE连接SQLSERVER的时候,就比较麻烦了,需要利用Oracle Gateway来作为一个桥梁搭建中间的连接关系,本文主要详细的列一下利用网关的方式来创建DBLINK连接sqlserver数据库的方式。
一:所需服务器
1:oracle数据库服务器
2:sqlserver数据库服务器
3:透明网关服务器(可以安装在sqlserver服务器一起)
二:软件
win64_11gR2_gateways,下载地址ORACLE geteway
三:环境
本文使用服务器环境
ORACLE :192.168.10.10     根目录:/u01/oracle/app/product/11.2.0/dbhome_1  默认端口:1521
sqlserver:  192.168.10.20     数据库名:PTS1  账号:sa  密码:123
GATEWAY:192.168.10.20    根目录:D:\product\11.1.0\tg_1   SID:dg4msql
四:gateway安装




这里录入sqlserver的数据库IP和数据库名称,当然也可以先不录,后面再去手动配置

图片:AA.jpg


安装完成后,会弹出监听配置,选择配置监听,一直下一步,完成后关闭,这一步会帮我们生成一个listener文件,
待会要去修改里面的信息

图片:bb.jpg



五:环境配置
1:进入D:\product\11.2.0\tg_1\dg4msql\admin,找到initdg4msql文件打开修改信息,这里只要把端口加上就行了,
注意端口和IP用‘,‘号连接,不是一般的“:”,这个我当时采坑了,没注意,导致怎么也不通,修改完保存即可

# This is a customized agent init file that contains the HS parameters
# that are needed for the Database Gateway for Microsoft SQL Server
        
#
# HS init parameters
#
HS_FDS_CONNECT_INFO=[192.168.10.20,1433]//PTS1
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
2:配置gateway监听
打开D:\Oracle\product\11.2.0\tg_1\NETWORK\ADMIN\listener.ora 文件,这里需要添加SID_LIST_LISTENER的信息,最好不要改dg4msql,这个就是对应initdg4msql的名字,没改的话配置起来比较简单,不然要改这里的名字
# listener.ora Network Configuration File: E:\product\11.2.0\tg_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
        
SID_LIST_LISTENER=
   (SID_LIST=
    (SID_DESC=
          (GLOBAL_DBNAME=dg4msql)
          (PROGRAM = dg4msql)
          (SID_NAME=dg4msql)            
          (ORACLE_HOME=D:\product\11.2.0\tg_1)
         (PRESPAWN_MAX=20)
      (PRESPAWN_LIST=
           (PRESPAWN_DESC=(PROTOCOL=tcp)(POOL_SIZE=2)(TIMEOUT=1))
         )
        )
       )
        
        
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.15.2.70)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
        
ADR_BASE_LISTENER = E:\product\11.2.0\tg_1
3:修改完后,启动监听,这里注意服务器的监听端口要在防火墙打开,不然oracle数据库会连不上网关

使用cmd,打开控制器,输入lsnrctl start,出现下图说明启动成功,失败的话注意看配置文件是不是有问题
lsnrctl stop是停止监听。

图片:cc.jpg



4:最后一步,其实就和oracle和oracle连接的DBLINK是一样的,只是现在将连接段换成了oracle gateway
直接执行以下sql命令,(要注意当前用户是否具有创建DBLINK的权限)

create public database link PDLINK connect to sa identified by "123" using 
'(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.20)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID=dg4msql))
      (HS=OK)
  )'
5:测试
以上配置全部完成后,就可以进行测试了,执行以下查询,能正常查询说明创建DBLINK成功,成功后,就可以对sqlserver数据库的表增删改查了!
select 1 from dual@PDLINK;


六:操作过程遇到的问题
1:sqlserver的数据库字段是区分大小写的,而oracle不区分,这会导致查询字段有小写的情况是会提示字段不存在,
需要将字段用双引号括起来才行,这样在写4gl程序的时候很不方便,建议遇到这种的情况,把表建立一个视图,替换掉字段名,改成大写就行了
2:sqlserver喜欢用GUID来做为表的唯一值,这个在ORACLE可以用SYS_GUID()函数达成,只想oracle的函数和sqlserver生成的数据有一点差异,使用下面自己做的一个函数,可以转换成sqlserver的GUID
create or replace function NEWGID return VARCHAR2 is
  GUID VARCHAR2(32);
begin
      GUID:=SYS_GUID();
    RETURN SUBSTR(GUID,1,8)
        ||'-'||SUBSTR(GUID,9,4)
        ||'-'||SUBSTR(GUID,13,4)
        ||'-'||SUBSTR(GUID,17,4)
        ||'-'||SUBSTR(GUID,21,12);
end NEWGID;



喜欢3 评分0

最新喜欢:

kmswenkmswen lgh0929lgh092... PerryPerry
Perry
管理员
管理员
  • 发帖数213
  • QQ396572376
  • 金币41385两
  • 威望11340点
  • 钻石8888枚
  • 注册日期2016-11-09
  • 最后登录2024-01-30
  • VIP会员
  • 荣誉会员
  • 优秀斑竹
  • 最爱沙发
  • 原创写手
  • 社区居民
沙发#
发布于:2019-05-10 10:42
这个不错
官方QQ群:556775727  
回复(0) 喜欢(0)     评分
chloewq
高级会员
高级会员
  • 发帖数46
  • QQ95700482
  • 金币278两
  • 威望124点
  • 钻石0枚
  • 注册日期2016-11-11
  • 最后登录2023-07-27
  • 社区居民
板凳#
发布于:2019-05-10 16:58
学习学习
回复(0) 喜欢(0)     评分
牛牛牛牛牛牛
高级会员
高级会员
  • 发帖数66
  • QQ502838931
  • 金币124两
  • 威望172点
  • 钻石0枚
  • 注册日期2019-03-22
  • 最后登录2024-01-23
地板#
发布于:2019-06-13 11:52
nice
回复(0) 喜欢(0)     评分
cxa0713
超级会员
超级会员
  • 发帖数46
  • QQ289457602
  • 金币194两
  • 威望353点
  • 钻石0枚
  • 注册日期2017-12-16
  • 最后登录2024-04-15
  • 社区居民
  • 忠实会员
4楼#
发布于:2019-06-14 13:24
按这个过程创建完了要在oracle  DB 服务器上添加监听信息,否则无法创建DBLINK!
回复(0) 喜欢(0)     评分
GP001_IIC
新人上路
新人上路
  • 发帖数16
  • QQ346929240
  • 金币9两
  • 威望17点
  • 钻石0枚
  • 注册日期2022-03-03
  • 最后登录2022-03-03
5楼#
发布于:2022-03-03 14:25
很好的帖子,支持
回复(0) 喜欢(0)     评分
alexandeson
初级会员
初级会员
  • 发帖数22
  • QQ8522491
  • 金币0两
  • 威望35点
  • 钻石0枚
  • 注册日期2022-05-28
  • 最后登录2022-07-03
  • 社区居民
6楼#
发布于:2022-05-28 08:35
好帖支持
回复(0) 喜欢(0)     评分
cnwchan
初级会员
初级会员
  • 发帖数16
  • QQ31345951
  • 金币36两
  • 威望24点
  • 钻石0枚
  • 注册日期2023-04-04
  • 最后登录2023-04-17
7楼#
发布于:2023-04-11 08:46
好帖支持
回复(0) 喜欢(0)     评分
三都与丙_.
高级会员
高级会员
  • 发帖数66
  • QQ1610871480
  • 金币131两
  • 威望91点
  • 钻石0枚
  • 注册日期2021-09-13
  • 最后登录2023-12-05
  • 社区居民
8楼#
发布于:2023-04-14 14:22
厉害,有用
回复(0) 喜欢(0)     评分
游客

返回顶部