دستور ALTER SESSION ADVISE COMMIT
قبل از هر چیز به تعریف دو اصطلاح می پردازیم:
Distributed Transaction:تراکنشی که در سطح شبکه بین دو دیتابیس انجام می شود.
In-Doubt Transaction: تراکنش نیمه تمامی از نوع Distributed که وضعیت commit یا rollback آن مشخص نیست.
اگر چنین تراکنشی در دیتابیس انجام شود و به دلایلی نیمه تمام باقی بماند پس از اجرای مجدد آن هنگام COMMIT با سه خطای پی در پی به شرح زیر مواجه می شویم:
ora-02050: transaction 21.534654 rolled back,some remote DBs may be in-doubt
ora-02056: bad two phase command number rdonly from coord
ora-02063: preceding line from BANK
برای رفع مشکل می توانیم از دستورات ALTER SESSION ADVISE COMMIT یا ALTER SESSION ADVISE ROLLBACK قبل از کوئری خود استفاده کنیم.
مثال :
insert into SUPERIORCUSTS
SELECT B.BRANCH_CODE BR,trunc(INSERT_SYSDATE) as INSERT_DATE,COUNT(*) as cnt
FROM VC.ORGANIZATION A JOIN RP.VW_CLIENT_INFO_BANK@REMOTE B ON A.CIF = B.EXTERNAL_REF
WHERE B.CLIENT_TYPE = 1 and trunc(INSERT_SYSDATE) = trunc(sysdate - 1)
GROUP BY B.BRANCH_CODE, trunc(INSERT_SYSDATE);
commit;
insert انجام می شود ولی بعد از commit خطاهای مذکور را دریافت می کنیم.کافیست قبل از اجرای مجدد کوئری فوق، یک یا دو بار دستور ALTER SESSION ADVISE COMMIT را اجرا کنیم.(یا چنانچه بخواهیم تغییرات حاصل از کوئری قبل را cancel کنیم بجای commit از rollback استفاده می کنیم)
- ۹۷/۰۱/۲۸
- ۷۲۴ نمایش