最近由于业务需要,想通过.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 客户端连接,成功登入
测试用 sqlplus 连接:
oracle客户端安装位置下面的network/admin目录下会有一个配置tnsnames.ora文件,此文件记录了所有注册过的连接字串。格式如下:
因此我们用 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 命令取得