PHP.mk документација

OCI8 Поддршка за транспарентно откажување на апликација (TAF)

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

oci8.taf.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека oci8.taf.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
OCI8 Поддршка за транспарентно откажување на апликација (TAF)

Референца за `oci8.taf.php` со подобрена типографија и навигација.

oci8.taf.php

OCI8 Поддршка за транспарентно откажување на апликација (TAF)

TAF е функција на Oracle базата на податоци што обезбедува висока достапност. Овозможува PHP OCI8 апликациите автоматски да се поврзат со претходно конфигурирана база на податоци кога конективноста на базата на податоци ќе откаже поради неуспех на инстанцата или мрежата.

Во конфигуриран систем на Oracle база на податоци, TAF се случува кога PHP апликацијата открива дека инстанцата на базата на податоци е неактивна или недостапна. Воспоставува врска со друг јазол во Oracle » RAC конфигурација, резервна база на податоци во живо или самата инстанца на базата на податоци. Погледнете » Oracle Call Interface Programmer's Guide за повеќе информации за OCI TAF.

Повикот на апликацијата може да се регистрира со oci_register_taf_callback(). За време на префрлањето, нормалното обработување на апликацијата престанува и се повикува регистрираниот повик. Повикот ја известува апликацијата за настаните од префрлањето. Ако префрлањето успее, нормалното обработување ќе продолжи. Ако префрлањето откаже, сите последователни операции на базата на податоци во апликацијата ќе откажат поради недостапност на врска.

Кога врската ќе се префрли на друга база на податоци, повикот може да ја ресетира секоја потребна состојба на врската, на пример, повторно да ги изврши сите потребни команди ALTER SESSION ако услугата на базата на податоци немала овозможено -failover_restore.

Повикот на апликацијата може да се отстрани со повикување oci_unregister_taf_callback().

Конфигурирање на транспарентно префрлање на апликации

TAF може да се конфигурира на страната на PHP OCI8 или во конфигурацијата на базата на податоци. Ако и двете се конфигурирани, поставките од страната на базата на податоци имаат предност.

Конфигурирајте TAF во PHP OCI8 (страната на клиентот) со вклучување на параметарот FAILOVER_MODE во делот CONNECT_DATA на дескрипторот за поврзување. Погледнете Конфигурирање на транспарентно префрлање на апликации во » Oracle Database Net Services Administrator's Guide за повеќе информации за конфигурацијата на TAF од страната на клиентот.

Пример tnsnames.ora за конфигурирање на TAF повторно поврзување со истата инстанца на базата на податоци:

    ORCL =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        (CONNECT_DATA =
          (SERVICE_NAME = orclpdb1)
          (FAILOVER_MODE =
            (TYPE = SELECT)
            (METHOD = BASIC)
            (RETRIES = 20)
            (DELAY = 15))))
 

Алтернативно, конфигурирајте TAF на страната на базата на податоци со измена на целната услуга со » srvctl (за RAC) или » DBMS_SERVICE.MODIFY_SERVICE packaged procedure (for single instance databases).

пакувана процедура (за бази на податоци со една инстанца).

Користење TAF повици во OCI8

TAF повикот е функција на апликацијата што може да се регистрира за да биде повикана за време на префрлањето. Се повикува неколку пати додека се воспоставува повторно поврзувањето на апликацијата.

Корисничка функција за враќање на повици за регистрација за Oracle TAF. Може да биде стринг со името на функцијата или Затворање (анонимна функција).

userCallbackFn(resource $connection, int $event, int $type): int

connection

Повикот прво се случува кога ќе се открие губење на врската. Ова му овозможува на апликацијата да постапи соодветно за претстојното одложување на префрлањето. Ако префрлањето е успешно, повикот се активира откако врската ќе се воспостави повторно и ќе биде употреблива. Во овој момент, апликацијата може да ги синхронизира поставките на сесијата и да преземе дејства како што е информирање на корисникот дека се случило префрлање. Ако префрлањето не е успешно, се случува повикот за да ја информира апликацијата дека префрлањето не се случило и врската е неупотреблива. oci_register_taf_callback()Oracle врската на која е регистриран TAF повикот преку

event

. Врската не е валидна додека префрлањето не заврши успешно.

  • OCI_FO_BEGIN Настанот на префрлање го означува тековниот статус на префрлањето.

  • OCI_FO_END означува дека префрлањето открило изгубена врска и префрлањето започнува.

  • OCI_FO_ABORT означува успешно завршување на префрлањето.

  • OCI_FO_ERROR означува дека префрлањето било неуспешно и нема опција за повторен обид.

  • OCI_FO_REAUTH исто така означува дека префрлањето било неуспешно, но му дава можност на апликацијата да ја обработи грешката и да врати OCI_FO_RETRY за да го повтори префрлањето.

type

означува дека Oracle корисникот е повторно автентициран.

  • OCI_FO_SESSION типот на префрлање. Ова му овозможува на повикот да знае каков тип на префрлање побарала апликацијата. Обичните вредности се следниве:

  • OCI_FO_SELECT означува дека корисникот побарал само префрлање на сесијата. На пример, ако врската на корисникот е изгубена, тогаш автоматски се создава нова сесија за корисникот на резервната копија. Овој тип на префрлање не се обидува да ги обнови SELECT-ите.

return value

  • 0 означува дека корисникот побарал и SELECT префрлање. Им овозможува на корисниците со отворени курсори да продолжат да преземаат податоци од нив по неуспехот.

  • OCI_FO_RETRY означува дека чекорите на префрлање треба да продолжат нормално.

означува дека Oracle треба да го обиде префрлањето повторно. Во случај на грешка при префрлање на нова врска, TAF може да го повтори префрлањето. Типично, кодот на апликацијата треба да спие некое време пред да врати OCI_FO_RETRY.

<?php

// Define userspace callback
class MyClass {
public static
$retry_count;
public static function
TAFCallback($conn, $event, $type)
{
switch (
$event) {
case
OCI_FO_BEGIN:
printf(" Failing Over ... Please stand by\n");
printf(" Failover type was found to be %s \n",
((
$type==OCI_FO_SESSION) ? "SESSION"
:(($type==OCI_FO_SELECT) ? "SELECT" : "UNKNOWN!")));
self::$retry_count = 0;
break;
case
OCI_FO_ABORT:
// The application cannot continue using the database
printf(" Failover aborted. Failover will not take place.\n");
break;
case
OCI_FO_END:
// Failover completes successfully. Inform users a failover occurs.
printf(" Failover ended ... resuming services\n");
break;
case
OCI_FO_REAUTH:
printf(" Failed over user ... resuming services\n");
// Replay any ALTER SESSION commands associated with this connection
// eg. oci_parse($conn, ‘ALTER SESSION …’) ;
break;
case
OCI_FO_ERROR:
// Stop retrying if we have already attempted for 20 times.
if (self::$retry_count >= 20)
return
0;
printf(" Failover error received. Sleeping...\n");
sleep(10);
self::$retry_count++;
return
OCI_FO_RETRY; // retry failover
break;
default:
printf("Bad Failover Event: %d.\n", $event);
break;
}
return
0;
}
}

$fn_name = 'MyClass::TAFCallback';

$conn = oci_connect('hr', 'welcome', 'orcl');
$sysconn = oci_connect('system', 'oracle', 'orcl');

// Use a privileged connection to construct a SQL statement that will initiate failover
$sql = <<< 'END'
select unique 'alter system disconnect session '''||sid||','||serial#||''''
from v$session_connect_info
where sid = sys_context('USERENV', 'SID')
END;

$s = oci_parse($conn, $sql);
oci_execute($s);
$r = oci_fetch_array($s);
$disconnectssql = $r[0];

oci_register_taf_callback($conn, $fn_name); // Register TAFCallback to Oracle TAF

print "Parsing user query\n";
$sql = "select systimestamp from dual";
$stmt = oci_parse($conn, $sql);

// For example, if a connection loss occurs at this point, oci_execute() will
// detect the loss and failover begins. During failover, oci_execute() will
// invoke the TAF callback function several times. If the failover is successful,
// a new connection is transparently created and oci_execute() will continue as
// usual. The connection session settings can be reset in the TAF callback
// function. If the failover is aborted, oci_execute() will return an error
// because a valid connection is not available.

// Disconnect the user, which initiates failover
print "Disconnecting the user\n";
$discsql = oci_parse($sysconn, $disconnectssql);
oci_execute($discsql);

print
"Executing user query\n";
$e = oci_execute($stmt);
if (!
$e) {
$m = oci_error($stmt);
trigger_error("Could not execute statement: ". $m['message'], E_USER_ERROR);
}
$row = oci_fetch_array($stmt);
print
$row[0] . "\n";

// do other SQL statements with the new connection, if it is valid
// $stmt = oci_parse($conn, . . .);

?>

Белешки од корисници

Нема белешки од корисници за оваа страница.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.