前言

用OCI编程时,OCIServerAttach连接的是用oracle客户端网络助手配置好的远端TNS服务名称.
可能不需要先配置好可用的数据源(未测试),但是可以用ODBC数据源中的测试功能,确定远端oracle数据库连接正常,才能继续OCI编程测试。

因为OCI编程时,需要连接的是远端的TNS服务名称,所以,oracle客户端工具是需要装的。然后配置监听器和远端网络服务名称。

实验环境

win10 + oracle client administrator tools + 一个在远端已经装好可用的oracle数据库.

实验

  • 安装win64_11gR2_client.zip中的setup.exe, 安装时,选择第二项,“管理员工具”
  • 找到客户端工具目录
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Oracle - OraClient11g_home1\配置和移植工具。
    配置oracle ODBC 数据源主要用到这个目录中的2个工具:

Net Configuration Assistant = D:\app\ls\product\11.2.0\client_1\BIN\launch.exe “D:\app\ls\product\11.2.0\client_1\bin” ..\bin\netca.cl

Microsoft ODBC 管理员 = C:\Windows\System32\odbcad32.exe
* 运行Net Configuration Assistant

**配置监听程序

执行完生成: D:\app\ls\product\11.2.0\client_1\network\admin\listener.ora

# listener.ora Network Configuration File: D:\app\ls\product\11.2.0\client_1\network\admin\listener.ora
# Generated by Oracle configuration tools.LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = MY_HOST_NAME)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))))ADR_BASE_LISTENER = D:\app\ls

如果在客户端用ODBC向导添加远端oracle动态数据源时,测试时,显示没有合适的监听程序。
需要将listener.ora的HOST=MY_HOST_NAME, 是本地的hostname,而不是远端的IP。
在卸载时(deinstall.bat),验证了,本地的oracle客户端确实开了监听。

**本地网络服务名配置

执行完生成:D:\app\ls\product\11.2.0\client_1\network\admin\tnsnames.ora

# tnsnames.ora Network Configuration File: D:\app\ls\product\11.2.0\client_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.ORCL =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.xx.xx)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))

这里的服务名orcl,就是ODBC管理器中要用到的服务名,在下拉列表中可以选择.
tnsnames.ora中的HOST和PORT都是远端oracle数据库的IP和PORT。

运行Microsoft ODBC 管理员

这里用的远端数据库的服务名称都是在上一步tnsnames.ora中配置好的。

只要知道远端oracle数据库的用户名和口令,填入,点击测试,成功。
在客户端使用的oracle远程ODBC数据源就配置好了,在OCI编程时,就使用这个做好的odbc数据源名称。

配置好后, 在客户端用 TNSPING ORCL 执行,会成功。

OCI测试代码

用OCIServerAttach连接远端TNS服务名称成功,说明OCI开发环境搭建成功。

// oci_test_on_vs2017.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <string>#include "oci.h"
// oci.lib is win64, win32编译不过.
#pragma comment(lib, "oci.lib")// 用oracle网络助手配置的远端网络服务名称, 不是ODBC助手配置出来的dsn名称
#define REMOTE_TNS_SERVICE_NAME "ORCL"void test_oci_a();int _tmain(int argc, _TCHAR* argv[])
{test_oci_a();printf("END\n");system("pause");return 0;
}void test_oci_a()
{sword sw_rc = 0;sword sw_tmp = 0;OCIEnv* myenvhp = NULL;OCIServer* mysrvhp = NULL;OCIError* myerrhp = NULL;OCISession* myusrhp = NULL;OCISvcCtx* mysvchp = NULL;sb4 errcode = 0;char sz_buf[4096] = {'\0'};do {sw_rc = OCIEnvCreate(&myenvhp, OCI_THREADED | OCI_OBJECT, (dvoid*)0, 0, 0, 0, (size_t)0, (dvoid**)0);if (OCI_SUCCESS != sw_rc) {break;}sw_rc = OCIHandleAlloc((dvoid*)myenvhp, (dvoid**)&mysrvhp, OCI_HTYPE_SERVER, 0, (dvoid**)0);if (OCI_SUCCESS != sw_rc) {break;}sw_rc = OCIHandleAlloc((dvoid*)myenvhp, (dvoid**)&myerrhp, OCI_HTYPE_ERROR, 0, (dvoid**)0);if (OCI_SUCCESS != sw_rc) {break;}// OCI连接的不是ODBC DSN名称// my_oracle_dsn// ORA-12154: TNS: 无法解析指定的连接标识符// OCI连接的是远端TNS服务名称// TNSPING ORCL// 成功sw_rc = OCIServerAttach(mysrvhp, myerrhp, (text*)REMOTE_TNS_SERVICE_NAME,(sb4)strlen(REMOTE_TNS_SERVICE_NAME),OCI_DEFAULT);if (OCI_SUCCESS != sw_rc) {printf("error : remote database connect\r\n");break;}printf("ok : remote database connect\r\n");} while (0);if ((OCI_SUCCESS != sw_rc) && (NULL != myerrhp)) {sw_tmp = OCIErrorGet(myerrhp, (ub4)1, (text*)NULL, &errcode,(OraText*)sz_buf, (ub4)sizeof(sz_buf), (b4)OCI_HTYPE_ERROR);if (OCI_SUCCESS == sw_tmp) {printf("%s\r\n", sz_buf);}}// @todo 资源释放}

create remote oracle odbc data source on win10相关推荐

  1. oracle10 64位odbc,图文教你64位win10添加oracle odbc驱动时提示无法加载oracle如何解决...

    现在电脑已成为我们工作生活的一部分,相信大家在操作电脑时一定会遇到这样那样的问题,64位win10添加oracle odbc驱动时提示无法加载oracle如何解决这个问题就是我们经常会遇到的,这样的问 ...

  2. Oracle 10g Data Pump Expdp/Impdp 详解

    本文转自David的Blog,原文链接http://blog.csdn.net/tianlesoftware/article/details/4674224 一. 官网说明 1.  Oracle 10 ...

  3. Steps to configure Oracle 11g Data Guard Physical Standby – Active Data Guard Part-I

    2019独角兽企业重金招聘Python工程师标准>>> Steps to configure Oracle 11g Data Guard Physical Standby – Act ...

  4. C# 连接SQL Server数据库的几种方式--server+data source等方式

    本文转载自忙碌的布谷鸟  如何使用Connection对象连接数据库? 对于不同的.NET数据提供者,ADO.NET采用不同的Connection对象连接数据库.这些Connection对象为我们屏蔽 ...

  5. Oracle DUL Data Unloader数据恢复工具信息汇总

    PRM-DUL是开放的ORACLE DUL 软件,点击下面的链接下载PRM-DUL DUL FOR LINUX平台(已更新为PRM-DUL) DUL FOR Windows平台 (已更新为PRM-DU ...

  6. Windows Oracle ODBC驱动数据源安装配置

    首先下载两个包 instantclient-basic 和 instantclient-odbc 在D盘新建一个目录,Oracle,解压两个包 之后从安装过Oracle客户端的机器拷贝一个networ ...

  7. 数据源(Data Source

    数据源(Data Source)顾名思义,数据的来源,是提供某种所需要数据的器件或原始媒体.在数据源中存储了所有建立数据库连接的信息.就像通过指定文件名称可以在文件系统中找到文件一样,通过提供正确的数 ...

  8. 在Windows 中配置Oracle ODBC驱动(不需要安装客户端)

    用于测试的操作系统:Win7 64X Oracle ODBC驱动版本:11.02.00.04 Oracle ODBC下载地址:https://download.csdn.net/download/qq ...

  9. Oracle DSI(Data Server Internals) 下载说明

    DSI是Data Server Internals的缩写,是Oracle公司内部用来培训Oracle售后工程师使用的教材. DSI3是Oracle 8系列的, DSI4是Oracle 9系列的. 这样 ...

最新文章

  1. 子元素超出父元素宽高是否会报错?
  2. EonerCMS——做一个仿桌面系统的CMS(二)
  3. [mybatis]全局配置文件标签顺序
  4. sysfs接口函数的建立_DEVICE_ATTR
  5. hadoop 单机伪分布式安装步骤
  6. 必背单词_初中英语:2000个必背单词(附音标)汇总,打印背完,3年考高分
  7. MySQL Pool
  8. 【OOM】GC overhead limit exceeded
  9. Spring Could+Ant Design Pro表格数据加载
  10. python无法定位到table_selenium3 + python - table定位
  11. 初步了解java虚拟机
  12. 计算机小知识140,140个电脑小知识,电脑知识-
  13. 印象笔记保存html,印象笔记怎么保存网页 印象笔记保存网页教程
  14. Provisional headers are shown axios 超时处理
  15. 2G、 3G、 4G、5G的区别
  16. android 电视怎么投屏,安卓手机怎么投屏到电视
  17. AI挖掘优质淘宝买家秀 再也不用担心辣眼睛了
  18. 一周速递|全球车联网产业动态(2022年10月16日)
  19. 说说各种手机输入法的体验
  20. 内存管理(五)——内存回收

热门文章

  1. 唐纳德先生与 .DOC
  2. IT行业对学历要求如何?
  3. 使用SASS修改iconic样式
  4. 企业如何选购防火墙?防火墙保护企业安全
  5. 天宇,snapseed,第四课,风光照片调整
  6. Hystrix服务降级、熔断-微服务(十)
  7. Oracle标准版和企业版
  8. docker安装nginx和php网页文件显示file not found
  9. RN 原生模块及组件入门
  10. Red Gate - SQL Source Control实现对SQL SERVER 的源代码控制