使用PHP 5.4和OCI8检查多个Oracle DB连接

问题描述 投票:1回答:1

我想创建一个简单的网页,使用PHP 5.4和OCI 8检查我实验室中几个Oracle实例的可用性。

一般情况下,它适用于所有已启动的实例,但如果我有一个实例,该实例是脚本退出并且其他实例未被检查!

让我告诉你我的小代码:

<?php
$c1_ORCL11 = oci_connect("system", "mypassword", 'ORCL11');
$c2_ORCL21 = oci_connect("system", "mypassword", 'ORCL21');
$c3_ORCL23 = oci_connect("system", "mypassword", 'ORCL23');

function check_connect ($conn, $sid)
{
  if (!$conn) {
     $m = oci_error();
     echo $m['message'], "\n";
     break;
 }
 else {
    print "$sid: Connected to Oracle!<BR>";
 }
 // Close the Oracle connection
 oci_close($conn);
}

check_connect($c1_ORCL11,'ORCL11');
check_connect($c3_ORCL23,'ORCL23');
check_connect($c2_ORCL21,'ORCL22');
?>

实例ORCL11和ORCL21为UP,ORCL23为DOWN。如果我执行代码,我得到以下输出:

ORCL11: Connected to Oracle!
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

我的想法是获得“ORCL21:连接到Oracle!”,但如果我无法连接到实例,代码将退出。如果我将订单更改为:

check_connect($c1_ORCL11,'ORCL11');
check_connect($c2_ORCL21,'ORCL21');
check_connect($c3_ORCL23,'ORCL23');

我得到以下输出:

ORCL11: Connected to Oracle!
ORCL21: Connected to Oracle!
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

如果我将订单更改为:

check_connect($c3_ORCL23,'ORCL23');
check_connect($c1_ORCL11,'ORCL11');
check_connect($c2_ORCL21,'ORCL21');

ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

所以,如果我有一堆实例并且列表中的第一个是DOWN,那么即使有UP并且正在运行,其他实例也不会显示在我的网页上:-(

任何想法如何解决这一问题?

在此先感谢您的帮助!

问候,

拉尔夫

php oracle oci8
1个回答
0
投票

在发布问题之后,我看到了我的错误...很奇怪,在几个小时之前看了一眼并没有找到它......无论如何......在删除“休息”之后它工作得很好if案例中的命令。我的假设只是突破if的情况并继续,但看起来这个阶段退出整个代码!

这是完整的代码和结果:

<?php
$c1_ORCL11 = oci_connect("system", "<mypasswd>", 'ORCL11');
$c2_ORCL21 = oci_connect("system", "<mypasswd>", 'ORCL21');
$c3_ORCL23 = oci_connect("system", "<mypasswd>", 'ORCL23');

function check_connect ($conn, $sid)
{
  if (!$conn) {
     $m = oci_error();
     echo "$sid: ", $m['message'], "<BR>";
     //break;
 }
 else {
    print "$sid: Connected to Oracle!<BR>";
 }
 // Close the Oracle connection
 oci_close($conn);
}

check_connect($c3_ORCL23,'ORCL23');
check_connect($c1_ORCL11,'ORCL11');
check_connect($c2_ORCL21,'ORCL21');
?>

输出:

ORCL23: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
ORCL11: Connected to Oracle!
ORCL21: Connected to Oracle!

问候,

拉尔夫

© www.soinside.com 2019 - 2024. All rights reserved.