Re: Bug #12431 [NEW]: ping functionality is broken
| From: | Christopher Jones | Date: | Mon, 12 Nov 2007 17:31:06 +0000 |
| Subject: | Re: Bug #12431 [NEW]: ping functionality is broken | ||
| References: | 1 | Groups: | php.pecl.dev |
| Request: | Send a blank email to pecl-dev+get-4926@lists.php.net to get a copy of this message | ||
We can probably move oci8 to use ociping at some stage. It caused
some compat problems so using ociserverversion was the best alternative
at the time.
Chris
david at acz dot org wrote:
-- Christopher Jones, Oracle Email: christopher.jones@oracle.com Tel: +1 650 506 8630 Blog: http://blogs.oracle.com/opal/ Free PHP Book: http://tinyurl.com/f8jadFrom: david at acz dot orgOperating system: SuSE Linux Package version: 1.2.4PHP version: 5.2.1 Package: oci8 Bug Type: BugBug description: ping functionality is broken Description: ------------ This is a follow-up to PHP #43050 (http://bugs.php.net/43050). The ping functionality is broken because OCIServerVersion() succeeds even though the server has terminated the connection. You can verify this by calling oci_server_version() after the "reconnected" line in the test script. It works but the following query returns ORA-01012. I wrote a patch that adds a new flag, use_ociping: http://david.acz.org/tmp/php-5.2.4-oci8.patch This patch uses OCIPing() instead of OCIServerVersion(). Reproduce code: --------------- <? $o = oci_pconnect(DB_USER, DB_PASS, DB_NAME); var_dump($o); if ($o === false) {$err = oci_error(); print_r($err);} $sql = "ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'"; query($o, $sql); echo "sleeping\n"; sleep(60); if (!query($o, $sql)) {echo "query failed, closing connection\n"; var_dump(oci_close($o)); $o = oci_pconnect(DB_USER, DB_PASS, DB_NAME); var_dump($o); if ($o === false) { $err = oci_error(); print_r($err); } echo "reconnected\n"; var_dump(query($o, $sql));} function query($o, $sql) {$s = @oci_parse($o, $sql); if ($s === false) { $err = oci_error($o); print_r($err); return false; } if (!@oci_execute($s, OCI_COMMIT_ON_SUCCESS)) { $err = oci_error($s); print_r($err); return false; } oci_free_statement($s); return true;} ?> Actual result: -------------- resource(4) of type (oci8 persistent connection) sleeping Array ([code] => 28 [message] => ORA-00028: your session has been killed [offset] => 0 [sqltext] => ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DDHH24:MI:SS' ) query failed, closing connection bool(true) resource(8) of type (oci8 persistent connection) reconnected Array ([code] => 1012 [message] => ORA-01012: not logged on [offset] => 0 [sqltext] => ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DDHH24:MI:SS' ) bool(false)