引言

和第三方公司进行接口对接时,发现某一个模块第三方只提供一个视图,还让我们直接调用他们数据库😂😂😂;下面我就开始了Sql Server服务器远程链接Oracle服务器的旅程。

安装Oracle数据访问组件ODAC

Oracle数据访问组件ODAC(Oracle Data Access Components)顾名思义就是用来访问Oracle数据库的小程序

1. ODAC包下载地址

  • ODAC官方下载地址
  • 必须选择Oracle对应的版本号,我这边是64-bit ODAC 12.2c Release 1 (12.2.0.1.0) Xcopy for Windows x64
  • 下载的安装包名:ODAC122010Xcopy_x64.zip
    下载地址

2. ODAC包解压缩

  • 在Sql Server服务器上创建一个目录,将工具压缩包解压到该目录下;然后打开目录;
  • 目录下一共有8个文件夹,分别是:
    1. instantclient_11_2:这是Oracle客户端,所有组件的运行都依赖于这个客户端;基础包
    2. oledb:这是OLE DB组件
    3. asp.net:这是ASP.NET2组件
    4. asp.net4:这是ASP.NET4组件
    5. odp.net4:这是.NET4组件
    6. odp.net20:这是.NET2组件
    7. oramts:这是Oracle的MTS服务
    8. network:这个文件夹不用管,它是用来存放tnsnames.ora文件的,要安装后才能用。
    解压目录

3. ODAC包安装

  • 使用"管理员"打开CMD,并进入到ODAC包的解压目录下,执行命令:install.bat all D:\ERP_Oracle Oracle true
  • 下面是对执行命令的参数介绍:
    1. 第一个参数:all。all代表安装解压目录下文件夹下所有的组件和客户端。如果你不需要这么多组件,只用到其中一个,比如只用到了OLE DB组件,就可以像下面这样只安装客户端和这一个OLE DB组件:install.bat oledb D:\ERP_Oracle Oracle
    2. 第二个参数:D:\ERP_Oracle。这是安装路径,根据自己的实际情况指定,路径中尽量不要有空格、圆括号、汉字;
    3. 第三个参数:Oracle。这个叫ORACLE HOME NAME,这个参数可以自定义一个字符串,不一定非得是"Oracle"。这个参数是用来写入注册表的。比如,上面这条语句执行后,会在注册表的以下位置写入(HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_Oracle),这"KEY_“后面的Oracle就是你在参数中传入的那个"Oracle”;
    4. 第四个参数: true。一般只用前三个参数就够了,在安装组件的时候会自动把它依赖的组件都安装上,但如果你只想安装指定的组件,不想装它所依赖的组件,这时才会用到第四个参数。比如:当你安装asp.net时,如果只用前三个参数,会自动把它所依赖的odp.net20和instantclient_11_2也安装上,但如果你再传入第四个参数"false",如下:install.bat asp.net D:\ERP_Oracle Oracle false 这时就只会安装asp.net,而不会把odp.net20和instantclient_11_2也装上。
    安装目录

4. 设置环境变量

  1. 添加环境变量:ORACLE_HOME=D:\OracleClient
  2. 将环境变量添加到Path中PATH=%ORACLE_HOME%;%ORACLE_HOME%\bin
    环境变量

5. 配置tnsnames.ora文件

  • 如果要用组件访问Oracle数据库,那么就要根据需要配置tnsnames.ora文件,并存放于D:\ERP_Oracle\network\admin目录下
  • 在D:\ERP_Oracle\network\admin\sample目录下复制tnsnames.ora文件到D:\ERP_Oracle\network\admin
  • 打开tnsnames.ora文件并修改,请参考下面:
    配置信息

6. 注意事项

  • 用cmd进入到ODAC的安装路径下,然后运行该路径下的uninstall.bat批处理文件:uninstall.bat all D:\ERP_Oracle
  • install.bat和uninstall.bat两个批处理文件会在安装目录下分别产生install.log和uninstall.log两个日志文件

7. 遇到的问题

  • 第一个问题
    • 产生原因:按照1-6步完成,重启服务器后,服务(OracleOracleMTSRecoveryService)没有启动成功,原因是执行D:\ERP_Oracle\bin\omtsreco.exe报错:错误信息
    • 解决方法:查询安装程序中是否安装了Microsoft Visual C++ 2015 Redistributable(x64);不限于2015版本
      解决方法
  • 第二个问题
    • 产生原因:多次打开Sql Server的链接服务器不会出现“Oracle Provider for OLE DB”
    • 解决办法:重新安装ODAC工具包

Sql Server 远程连接Oracle

Sql Server 版本:2019(15.0.2000.5)
Oracle 版本:12c(12.2.0.1.0)
Windows Server版本:2016

1. 图形界面创建Oracle链接服务器

  • 1.1 打开SSMS以sa身份登录,在左侧的“对象资源管理器”窗口中展开“服务器对象”节点,在其下的“链接服务器”节点上右键选择“新建链接服务器…”,如图:
    新建链接服务器

  • 1.2 在弹出的“新建链接服务器”对话框中,按照图示填写,具体说明如下:

    • 链接服务器:链接服务器的别名
    • 其他数据源(服务器类型):选择“其他数据源”
    • 提供程序:(64位系统)选择Oracle Provider for OLE DB
    • 产品名称:一定是“Oracle”,这是固定写法,只要是链接Oracle数据库都得这么写
    • 数据源:需要链接的Oracle数据库名称
    • 访问接口字符串:可以不填写,也可以填写:MSDASQL
      图示说明
  • 1.3 在弹出的“新建链接服务器”对话框中,按照图示填写,具体说明如下:在“安全性”栏的右边选择最下面的“使用此安全上下文建立连接”,然后在下面输入连接到ora(根据自己的实际情况来更改)数据库的用户名和密码
    安全性

  • 1.4 将服务器选项中的RPC、RPC Out 置为True
    RPC

  • 1.5 待上述步骤全部完成后,点击确定按钮,如果正常的话,就可以成功链接服务器到Oracle数据库了。

2. 命令创建Oracle的链接服务器

下面两条命令语句补全,然后在SQL Server中执行即可创建成功:

-- 创建链接服务器
EXEC master.dbo.sp_addlinkedserver @server = N'别名', @srvproduct=N'库名',@provider=N'MSDAORA', @datasrc=N'TNS名'
-- 链接数据库及登录
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'别名', @locallogin = NULL ,@useself = N'False', @rmtuser = N'模式名', @rmtpassword = N'密码'

3. 遇到的问题:

  • 第一个问题
    • 产生原因:在创建链接服务器,填写完最后确定时,报“无法创建链接服务器 “ORA” 的 OLE DB 访问接口 “OraOLEDB.Oracle” 的实例”错误
      报错信息1
    • 解决方法:在SSMS->链接服务器->访问接口->OraOLEDB.Oracle的地方右击“属性”出现下面的框,选中“允许进程内”
      Oracle
  • 第二个问题
    • 产生原因:在创建链接服务器,填写完最后确定时,报“ORA-12154: TNS:could not resolve the connect identifier specified”错误

    • 解决方法:重新检查tnsnames.ora文件中的配置是否正确。

总结

  • 世上无难事,只怕有心人
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐