تجربیات کاری چند دوست

در این وبلاگ تجربیاتی که در حین کار بدست آورده ایم را به اشتراک خواهیم گذاشت

تجربیات کاری چند دوست

در این وبلاگ تجربیاتی که در حین کار بدست آورده ایم را به اشتراک خواهیم گذاشت

تجربیات کاری چند دوست
آخرین نظرات
  • ۱۶ مرداد ۹۸، ۰۱:۰۰ - علی جهان نما
    عالی بود

قبل از هر چیز به تعریف دو اصطلاح می پردازیم:

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 استفاده می کنیم)


  • موافقین ۱ مخالفین ۰
  • ۹۷/۰۱/۲۸
  • ۶۲۶ نمایش
  • حسین مومنی

نظرات (۰)

هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی