最近由于业务需要,想通过.net直连sap的后台数据库,我们用的是oracle,对oracle的连接之前没有接触过,特别是由于sap实施basis时的文档不全,对于oracle的数据库用户,监听端口等信息的缺失,造成不少障碍,在此将一些问题和解决方法记录一下。

1.对于 .net 连接 oracle 请参考 : ​​ http://www.oracle.com/technology/global/cn/pub/articles/cook_dotnet.html​

 

2.当我装完oracle客户端(一定要和服务器版本一致)后想连接后台数据库时,碰到了问题,我现有的信息是我只知道我的数据库主机IP 192.168.1.11,试了几次失败后,我发现要连接 oracle 至少有几个关键数据:SID 数据库实例 ,PORT 数据库实例的监听端口 , 数据库用户名, 这些都是 在安装 SAP 时指定的,但由于实施方没有留下相应文档,都无从得之.

找到 basis 让他远程登入到 sap 主机(Aix系统),此时他可以通过 sqlplus 连接到 oracle ,应该是当初安装时指定了验证方式,本机连接时不需要用户.

OK ,能连上数据库就好办了:

命令: show user  .

    获得SID ,数据库实列名              :  select instance_name, * from v$instance

 剩下就是监听端口的问题了,退出 sqlplus 到 aix 命令模式.这个可以通过监听程序管理工具lsnrctl获得

  命令行输入  lsnrctl

  再输入      status

 此时便显示监听程序的相关信息了.

 至此几个关键信息已获得,重试 oracle 客户端连接,成功登入

 

.net 连接 SAP后台数据库(AIX+oracle)_数据库

 

测试用 sqlplus 连接:

 

oracle客户端安装位置下面的network/admin目录下会有一个配置tnsnames.ora文件,此文件记录了所有注册过的连接字串。格式如下:


PRD_192.168.1.12=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS= (PROTOCOL = TCP)(HOST = 192.168.1.12)(PORT = 1522))
)
(CONNECT_DATA=(SID= PRD)
(SERVER= DEDICATED)
)
)

 

因此我们用 sqlplus 连接时可以采用两种方式,一种是直接用连接串,一种是用 连接串名 (就是文件中各个字串的名称).分别如下:

sqlplussys/password@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.12)(PORT=1522)))(CONNECT_DATA=(SID=PRD)(SERVER=DEDICATED))) AS SYSDBA

 

sqlplussys/password@PRD_192.168.1.12 AS SYSDBA

 

 附加:

 后续发现:  (CONNECT_DATA=(SID= PRD)   除了使用 sid 还可以使用 servcie_name (新版本的oracle支持) 方式如: (CONNECT_DATA=(SERVICE_NAME= hsoa.hs-db)   , sid 和 servcie_name 都可以通过 

lsnrctl status 命令取得