我在SQL开发人员中具有以下混淆的连接字符串,可以正常工作:
jdbc:oracle:thin:@//xyz-scan.example.com:1521/mydb.example.com
如何在php oci_connect中使用它?
$db = 'xyz-scan.example.com:1521/mydb.example.com';
$con = oci_connect('scott', 'tiger', $db, 'AL32UTF8');
错误提示:
ORA-12545: Connect failed because target host or object does not exist
我可以成功ping服务器。
我也尝试过
$db = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST = xyz-scan.example.com)(PORT=1521))
(CONNECT_DATA=(SERVER=DEDICATED)
(SID=mydb.example.com)';
,而不是带有service_name的SID。什么都没有。 上面给出了这个错误:
ORA-12154: TNS:could not resolve the connect identifier specified
如何转换此连接字符串以与php oci一起使用? (有一种独特的方法吗?对于另一个数据库,我有一个@ldap://...
,我将如何转换它?
答案 0 :(得分:0)
使用扫描地址解决第一期问题的方法很简单:
$db = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST = xyz-scan.example.com)(PORT=1521))
(CONNECT_DATA=(SERVER=DEDICATED)
(SID=<sid>)';
使用ldap的第二个并不是那么简单。据我了解,oracle有它自己的ldap东西,您在其中存储了数据库TNS条目。这意味着您可以像查询任何ldap系统一样查询它:
<?php
$ds=ldap_connect("oid.mydomain.com", myport); // Connect to oracle ldap
$r=ldap_bind($ds); // Bind to ldap
$sr = ldap_search($ds, "cn=OracleContext,dc=xyz,dc=abc,dc=com", "cn=dbname"); // Run query xyz.abc.com
$info = ldap_get_entries($ds, $sr); // Get entries
ldap_close($ds);
$dbconnectstring = $info[0]["orclnetdescstring"][0]; // Extract db connect string from ldap search result array
$con = oci_connect('scott', 'tiger', $dbconnectstring);
?>
此脚本将获取完整的TNS连接字符串,然后可与oci_connect一起使用。