برنامه نویسی

pragma thousonous_transaction در Oracle PLSQL – از مورد استفاده کنید

در سیستم مدیریت باری صنعت هواپیمایی ، معاملات خودمختار می تواند نقش مهمی در تضمین یکپارچگی و سازگاری عملیات بدون تأثیرگذاری بر جریان اصلی معامله داشته باشد. یک سیستم مدیریت بار به طور معمول فرآیندهایی مانند رزرو ، ردیابی ، به روزرسانی وضعیت بار و مدیریت موجودی در مراحل مختلف حمل و نقل را کنترل می کند. در طی این عملیات ، کارهای کمکی متعددی مانند ورود به سیستم ، ممیزی یا به روزرسانی سیستم های خارجی وجود دارد که باید به طور مستقل از معامله اصلی که به روزرسانی های بار را انجام می دهد ، اتفاق بیفتد.

سناریو: استفاده از pragma theonomous_transaction در سیستم مدیریت بار

از مورد استفاده کنید: ردیابی بار و رویدادهای ورود به سیستم

بیایید سناریویی را در نظر بگیریم که در آن یک محموله محموله در سیستم رزرو ، به روز شده یا پردازش می شود. علاوه بر به روزرسانی وضعیت بار در سیستم اصلی (به عنوان مثال ، تأیید اینکه بار در پرواز بارگذاری شده است) ، ما همچنین می خواهیم یک پرونده حسابرسی از هر تغییر وضعیت را حفظ کنیم. این ورود به سیستم نباید در فرآیند اصلی مانند رزرو محموله یا به روزرسانی وضعیت تداخل داشته باشد.

فرآیند:

  1. معامله اصلی (رزرو یا به روزرسانی وضعیت):

یک محموله باری رزرو می شود ، یا وضعیت آن به روز می شود (به عنوان مثال “باربری که روی پرواز بارگذاری شده است”).

معامله اصلی شامل به روزرسانی وضعیت محموله در پایگاه داده است.

  1. معامله خودمختار (رویدادهای ورود به سیستم):

به طور همزمان ، سیستم باید این تغییر را در یک جدول CARGO_EVENTS_LOG وارد کند تا هر مرحله از روند حسابرسی یا عیب یابی را پیگیری کند.

نکته مهم این است که ورود به سیستم نباید در بروزرسانی اصلی بار دخالت کند ، و حتی اگر خطایی در طی فرآیند ورود به سیستم رخ دهد (مانند نقض محدودیت بانک اطلاعاتی) ، نباید بر بروزرسانی موفقیت آمیز وضعیت بار تأثیر بگذارد.

مثال PL/SQL با استفاده از pragma theonomous_transaction:

– یک جدول برای ورود به سیستم باری ایجاد کنید
ایجاد جدول Cargo_Events_log (
کلید اصلی شماره log_id ،
شماره Cargo_id ،
event_description varchar2 (255) ،
تاریخ timestamp event_timestamp ،
شماره اپراتور_
) ؛

– روش اصلی برای به روزرسانی وضعیت بار و ورود به سیستم
ایجاد یا جایگزین کردن روش update_cargo_status (
p_cargo_id در تعداد ،
p_new_status در varchar2 ،
p_operator_id در تعداد) است

-- Variable to store the old status of the cargo
v_old_status VARCHAR2(255);

-- Autonomous transaction procedure to log cargo event
PROCEDURE log_cargo_event(p_cargo_id IN NUMBER, p_event_description IN VARCHAR2, p_operator_id IN NUMBER) IS
PRAGMA AUTONOMOUS_TRANSACTION;  -- Marks this procedure as an autonomous transaction
BEGIN
    -- Insert event description into the cargo_events_log table
    INSERT INTO cargo_events_log (log_id, cargo_id, event_description, event_timestamp, operator_id)
    VALUES (cargo_events_log_seq.NEXTVAL, p_cargo_id, p_event_description, SYSDATE, p_operator_id);

    -- Commit the autonomous transaction to make the log permanent
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        -- Handle any errors during the logging (e.g., database issue in the log insertion)
        DBMS_OUTPUT.PUT_LINE('Error logging cargo event: ' || SQLERRM);
END log_cargo_event;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

شروع کردن
– وضعیت قدیمی بار را واگذار کنید
وضعیت را به v_old_status انتخاب کنید
از حمل و نقل Cargo_shipments
جایی که CARGO_ID = P_CARGO_ID برای به روزرسانی ؛

-- Update the cargo status in the main system
UPDATE cargo_shipments
SET status = p_new_status
WHERE cargo_id = p_cargo_id;

-- Commit the main transaction (cargo status update)
COMMIT;

-- Log the cargo event asynchronously using an autonomous transaction
log_cargo_event(p_cargo_id, 'Status updated from ' || v_old_status || ' to ' || p_new_status, p_operator_id);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

استثناء
وقتی دیگران پس از آن
– خطاها را در معامله اصلی انجام دهید (به عنوان مثال ، خرابی به روزرسانی وضعیت)
بازگشت
dbms_output.put_line ('خطای به روزرسانی وضعیت بار:' || sqlerrm) ؛
پایان update_cargo_status ؛

توضیح:

  1. معامله اصلی:

واکشی وضعیت باری: وضعیت قدیمی محموله با استفاده از یک عبارت SELECT (قفل کردن رکورد برای اطمینان از به روز بودن آن برای تغییر وضعیت) بدست می آید.

به روزرسانی وضعیت بار: سپس وضعیت بار با وضعیت جدید به روز می شود (به عنوان مثال “بارگذاری شده در پرواز”).

ارتکاب معامله اصلی: پس از به روزرسانی وضعیت ، معامله اصلی انجام می شود.

  1. معامله خودمختار (ورود به رویداد):

ورود به سیستم: روش log_cargo_event نامیده می شود ، که ورود ورود به سیستم را به جدول Cargo_events_log وارد می کند ، این رویداد را ضبط می کند (به عنوان مثال ، “وضعیت به روز شده از انتظار تا پرواز در پرواز”).

تعهد خودمختار: از آنجا که این روش با pragma theonomous_transaction مشخص شده است ، مستقل از معامله اصلی عمل می کند. حتی اگر بروزرسانی وضعیت اصلی انجام نشود یا به عقب برگردد ، ورود ورود به سیستم همچنان انجام می شود و حفظ می شود.

  1. رسیدگی به خطا:

اگر در طی فرآیند ورود به سیستم خطایی وجود داشته باشد (به عنوان مثال ، نقض محدودیت یا مسئله پایگاه داده در درج ورود به سیستم) ، سایر موارد استثناء کننده تضمین می کند که این خطا با استفاده از DBMS_OUTPUT وارد شده است ، اما بر معامله اصلی تأثیر نمی گذارد.

اگر معامله اصلی با مسئله روبرو شود ، بازپرداخت تضمین می کند که به روزرسانی وضعیت بار معکوس می شود ، اما ورود به سیستم مستقل هنوز وجود خواهد داشت.

چرا در این مورد از Pragma Adoonomous_Transaction استفاده کنید:

جدایی نگرانی ها: معامله اصلی بر به روزرسانی وضعیت بار متمرکز است ، در حالی که معامله خودمختار وظیفه ورود به این رویداد را بر عهده دارد. این دو عمل مستقل هستند و اطمینان حاصل می کنند که ورود به سیستم در کار مهم به روزرسانی وضعیت بار دخالت نمی کند.

یکپارچگی معاملات: عمل ورود به سیستم نباید مسدود شود یا باعث بروزرسانی اصلی بار شود. به عنوان مثال ، اگر هنگام ورود به سیستم خطایی وجود داشته باشد (به دلیل مسئله بانک اطلاعاتی یا نقض محدودیت) ، به روزرسانی وضعیت بار باید با موفقیت انجام شود.

حسابرسی و انطباق: در صنایعی مانند صنعت هواپیمایی ، ورود به سیستم باری برای حسابرسی و انطباق بسیار مهم است. استفاده از یک معامله خودمختار تضمین می کند که حتی اگر به روزرسانی اصلی از بین نرود ، ورود به سیستم هنوز ذخیره شده است ، که برای ردیابی حرکات باری ضروری است.

طبیعت ناهمزمان: ورود به سیستم به طور معمول یک عمل کمکی است و نیازی به همگام سازی با چرخه اصلی معامله اصلی ندارد و آن را به عنوان کاندیدای خوبی برای معاملات خودمختار تبدیل می کند.

از خلاصه مورد استفاده کنید:

در این سیستم مدیریت باری ، Pragma Atonomous_Transaction تضمین می کند که روند ورود به سیستم (به عنوان مثال ، تغییر وضعیت باری) به طور مستقل از عملیات اصلی مانند به روزرسانی وضعیت بار انجام می شود. این الگوی طراحی تضمین می کند که ورود به سیستم حتی اگر فرآیند اصلی با مسائل روبرو شود ، همچنان به کار خود ادامه می دهد ، امکان مسیرهای حسابرسی دقیق و به حداقل رساندن اختلال در عملکرد اصلی سیستم را فراهم می کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا