Standby Database Multiple DBLINK connection Error

Өдрийн мэнд
Standby Database дээр DBLINK давхар холболт хэрхэн үүсгэх вэ
Ээлжилж Read Only гэсэн мессеж гарж ирж байгаа юм. 1 нь ажиллахаар нөгөөх нь Read Only гээд.

Энэ юу гэсэн үг вэ?

Standby баазаас 2 өөр баазруу DBLINK ээр холболт хийж болохгүй байгаа юм. Зураг дээр байгаа SPLINK олон GBLINK өөр өөр баазууд юмаа. Дээрх Script ээлжлээд ажиллаад байгаа.

Dblink on Physical standby - ORA-16000 (Doc ID 1296288.1) бололтой. Physical Standby нь read only горимоор нээгддэгийг санах хэрэгтэй.

APPLIES TO:

Oracle Database - Enterprise Edition - Version 10.2.0.4 to 11.2.0.1 [Release 10.2 to 11.2]
Oracle Database - Enterprise Edition - Version 12.1.0.2 to 12.1.0.2 [Release 12.1]
Information in this document applies to any platform.

GOAL

Steps to access data via dblink on physical standby in dataguard environment.

From 11g MRP will run when physical standby in opened in read only. We the problem will come when we access the data via dblink. The below note will give the solution to overcome the issue.

NOTE : For 10g standby open the database in read only first to use dblink.

SQL> select * from <table>@link_<DBLINK_NAME>;
select * from <table>@link_<DBLINK_NAME>
*
ERROR at line 1:
ORA-16000: database open for read-only access

SOLUTION

SQL> select open_mode,database_role from v$database;

OPEN_MODE DATABASE_ROLE
---------- ----------------
READ ONLY PHYSICAL STANDBY

SQL> select owner,db_link from all_db_links;

OWNER
------------------------------
DB_LINK

PUBLIC
LINK_<DBLINK_NAME>

SQL> select * from <table>@link_<DBLINK_NAME>;
select * from <table>@link_<DBLINK_NAME>
*
ERROR at line 1:
ORA-16000: database open for read-only access

SQL> set transaction read only;

Transaction set.

SQL> select * from <table>@link_<DBLINK_NAME>;

<table>NO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
<RETURN DATA>

Reason,

Limitations of a Read-only Database

When executing on a read-only database, you MUST commit or roll back any
in-progress transaction that involves one database link before you use
another database link.
This is true even if you execute a generic SELECT statement on the first
database link and the transaction is currently read-only.

we shall expect such error having two select statements in a row using dblink
without a commit or roll back statements.

Дээр хангалттай тайлбар оруулсан байна. Хэрэв наад ажиллуулж буй select statement чинь нэг dblink ашигладаг бол commit эсвэл rollback-р төгсгөөд тухайн session дээр дараагийн select statement явж болно. Open READ-ONLY standby db - н хувьд select statement - г transaction гэж үзээд тухайн transaction - н хойноос commit болон rollback үйлдэл хийгдээгүй бол уг үйлдлийг дуусаагүйд тооцоод байгаа юм. Хэрэв нэг select statement - д хэд хэдэн өөр баазруу хандсан DB Link ашиглаж байвал харин ч нэг худлаа санагдсан :joy::joy::joy: Зүгээр дээрх зурган дээрх шиг select болон хойно нь commit хийж өгөөд л асуудалгүй.