【发布时间】:2020-07-17 14:07:52
【问题描述】:
我从来没有在oracle数据库上工作过,但是现在我需要使用php(在不同的服务器上执行)来登录oracle数据库,但是似乎缺少一些数据。
我有什么:
- 服务器的IP地址和端口 1521(从运行我的php的服务器ping OK)
- 数据库名称
- 用户拥有所有权限
- 服务器运行良好(另一个完全依赖 oracle 服务器的应用程序运行良好)
我没有的东西:
- 服务名称
- 使用的 Oracle 版本(很可能是 11g,但不确定)
- 对服务器系统的任何访问
我尝试了一些猜测的服务名称,但我得到了:
ORA-12514: TNS:listener 目前不知道连接描述符中请求的服务
我尝试了其他一些替代方法,例如使用 SID,但这次使用 SID 而不是服务仍然出现相同的错误:
ORA-12505: TNS:listener 目前不知道连接描述符中给出的 SID
我发现的所有其他解决方案都需要访问服务器才能运行一些脚本或命令,但这对我来说是不可能的。
我使用的代码:
$user = 'myUser';
$password = 'myPassword';
$database = 'MY_DB';
$conn=oci_connect($user,$password,
'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.l.l00)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = someName)
)
)');
if ($conn) {
echo "connected";
}
else
{
echo "not connected";
}
在我的浏览器上显示错误消息后跟“未连接”。 那么,是否有可能以某种方式登录数据库?还是不可能?
【问题讨论】:
-
这可能是 DBA 或负责数据库的人的问题。
-
感谢 @NigelRen 的评论,问题是 DBA 很遗憾无法联系。但我仍然希望能找到一些技巧。
-
没有“技巧”。您的错误清楚地表明您正在访问侦听器,但侦听器不知道您正在请求的数据库(sid 或服务名称)。你需要知道听众确实知道什么。为此,您需要联系 DBA。
-
当您说您尝试了 SID 时,您是否将连接字符串中的
SERVICE_NAME关键字替换为SID:(SID = someName)? (但如果您确实使用服务名称,那么让生活更轻松并将整个字符串简化为 Easy Connect 表单"192.168.l.l00/someName")。您确实需要一些数据库访问权限才能对其进行询问并找到要使用的连接字符串。 -
感谢@EdStevens 的回复,我正在运行一个脚本,该脚本试图通过生成所有可能的情况并将 oci_connect 置于 while(!$conn) 循环中来查找服务名称,希望能有所收获.
标签: php oracle oracle-call-interface