در این قسمت از آموزش اوراکل در بخش تکمیلی قصد داریم آموزش کار با Chains در اوراکل را یاد بگیریم لذا قبل از شروع این آموزش باید آشنایی لازم و کافی در مورد دیتابیس اوراکل داشته باشید.

یک chain به مجموعه ای از وظایف و عملیات های می باشد که این عملیات ها برای انجام یک هدف مشترک با هم ارتباط دارند . Chains در واقع به منظور اجرای عملیات های به هم وابسته و مرتبط براساس یک زمانبند اجرا خواهد شد که این عملیات می تواند jobs باشد که این jobs براساس زمان اجرا پشت و بعد اجرای موفق چاب قبلی اجرا شود.

تمامی دستورات Chains در پکیج built-in به نام DBMS_SCHEDULER می باشد.

برای ایجاد و استفاده از chain باید مراحل زیر کامل انجام شود :

  • ایجاد یک آبجکت Chain (chain object)
  • تعریف مراحل steps در chain
  • اضافه کردن قوانین rules
  • فعال کردن chain
  • ایجاد یک job برای chain

ایجاد Chains

شما می توایند یک chain را با استفاده از پروسیجری به نام CREATE_CHAIN در پکیج DBMS_SCHEDULER ایجاد کرد و پس از ایجاد chain object با استفاده از پروسیجر CREATE_CHAIN می توانید steps مراحل chain و rules قوانین chain را به صورت جداگانه تعریف کنید .

آموزش اوراکل

آرگومان و پارامترهای rule_set_name و evaluation_interval بصورت کلی می توانید مقدار NULL را مقدار دهی کنید . پارامتر evaluation_interval به منظورتکرار کردن فاصله در chain می باشد و پارامتر rule_set_name اشاره دارد به rule قوانینی که در chain تعریف می شود می تواند نامی به قوانین اضافه شود.

تعریف Chain Steps

بعد از اینکه chain object ایجاد کرده اید شما می توانید یک یا بیش از یک chain steps را ایجاد کنید که هر مرحله step می تواند شامل یکی مورد و اهداف زیر باشد :

  • یک برنامه اجرایی زمان بندی شده – Scheduler program object
  • می تواند یک chain دیگری باشد (که به این مورد اصطلاحا nested chain می نامند)
  • می تواند یک رویداد event زمان بندی شده یا داخلی باشد.

برای تعریف یک مرحله step از chain برای اجرای یک program یا nested chain از پروسیجری به نام DEFINE_CHAIN_STEP در پکیج DBMS_SCHEDULER استفاده می کنیم.

با توحه به مثال زیر ما دو مرحله step به یک chain به نام my_chain1 استفاده می کنیم.

آموزش اوراکل

زمانی که یک مرحله step ایجاد میکنید یک برنامه اجرایی یا chain می تواند وجود نداشته باشد اما تا زمانی که مرحله اجرا نشود و در زمان اجرا اگر برنامه اجرایی یا chain وجود نداشته باشد به شما خطا خواهد داد.

مراحلی Steps که می تواند از بیرون و خارج از برنامه قابل اجرا باشد

پس از این که مراحل step تعریف و ایجاد گردید می تواند از خارج و بیرون از برنامه قابل اجرا external executable باشد و برای انجام این کار شما می توانید از پروسیجر ALTER_CHAIN برای دادن گواهی و اعتبار credentials برای انجام استفاده کنید.

مراحلی Steps که تا زمان اجرای یک Events منتظر می مانند.

شما می توانید مراحل steps تعریف و ایجاد کنید که تا زمانی که یک event اجرا نشده باشد منتظر بماند و تا زمان اجرا شدن کامل event بماند برای انجام این نوع مرحله step از پروسیجری به نام DEFINE_CHAIN_EVENT_STEP استفاده کنید این پروسیجر یک سری arguments ورودی می پذیرد که یکی از آن ها نام event می باشد که این event می تواند یک event زمان بندی شده یا event شرطی باشد.

مثال زیر ایجاد یک مرحله step بصورت تا زمان اجرا یک event منتظر می ماند.

آموزش اوراکل

ایجاد مراحل Steps قابل راه اندازی مجدد

بعد از این که دیتابیس عملیات recovery انجام شد یصورت پیش فرض مراحل steps وضعیت آن ها به STOPPED تغییر میکند و بایستی chain ادامه داده شود . شما می توانید امکانی را فراهم کنید بعد از اینکه دیتابیس عملیات recovery انجام شد بصورت خودکار chain steps اجرا شود توسط ویژگی attribute به نام RESTART_ON_RECOVERY در ALTER_CHAIN را برابر true قرار دهید و در نتیجه مراحل Steps بصورت خودکار اجرا خواهد شد.

اضافه کردن Rules به Chain

شما می توانید rule را به chain از طریق پروسیجر DEFINE_CHAIN_RULE اضافه کنید . شما با صدا زدن و فراخوانی procedure به نام DEFINE_CHAIN_RULE میتوانید هر تعداد rule را به chain اضافه کنید.

Chain rules زمانی که مراحل steps اجرا می شود تعریف می شود و در واقع rules تعریف روابط و وابستگی بین steps مراحل می باشد. هر rule میتواند یک شرط یا condition باشد. هر زمان که rules ارزیابی شوند اگر شرط rule در ارزیابی برایر true باشد به این معنی که action با موفقیت انجام شده است .

همه chain rules با هم کار می کنند برای تعریف action کلی در یک chain می باشد. زمانی که یک chain job اجرا و به پایان می رسد در واقع یک step مرحله به پایان رسیده است و همه rules تمامی action ها بررسی کرده و یکی پس از دیگری اجرا خواهند شد. اگر بیش از یک rule شرط آن برابر TRUE شود چندین actions می تواند اجرا شود. تمامی rule از طریق attribute ویژگی به نام evaluation_interval مورد ارزیابی قرار می گیرد.

شرط ها معمولا براساس خروجی steps مراحل قبلی پایه ریزی می شود به عنوان مثال اگر شما بخواهید یک مرحله step را اجرا کنید در صورتی اجرا می شود که دو مرحله steps قبلی با موفقیت اجرا شده باشد و مرحله step دیگری اجرا خواهد شد اگر دو مرحله steps قبلی اجرا نشود و failed شود.

syntax و ساختار برنامه ریزی شرط های chain به شکل زیر می باشد.

stepname [NOT] {SUCCEEDED|FAILED|STOPPED|COMPLETED}

stepname ERROR_CODE {comparision_operator|[NOT] IN}{integer|list_of_integers}

شما می توانید شرط ها را باهم از طریق عملگرهای منطقی boolean مانند AND, OR و یا ()NOT با ترکیب و شرط جدیدی ایجاد کنید و در اصطلاح یک متن شرطی conditional expressions ایجاد کنید و هچنین با قراردادن پرانتر parentheses در اصطلاحات شرطی conditional expressions تقدم و تاخر در اجرای شرط را برقرار کنید.

یخش ERROR_CODE می تواند با مقادیر RAISE_APPLICATION_ERROR در زبان برنامه نویسی PL/SQL نتظیم شود که هر برنامه اجرایی به هر مرحله step مرتبط می شود. با این که error codes در برنامه شما راهی برای نمایش اعداد منفی می باشد اما شما می توانید بخش ERROR_CODE را برای اعداد مثبت در chain rule استفاده کنید.

به عنوان مثال اگر برنامه شما در هنگام اجرا خطای زیر را بدهد:

;RAISE_APPLICATION_ERROR(-20100, errmsg)

شما میتوانید در شرط chain rule مقدار زیر را قرار دهید.

stepname ERROR_CODE=20100

ویژگی های مرحله (Step Attributes)

لیست ویژگی هایی که هر مرحله step می تواند داشته باشد به شرح زیر می باشد :

  • completed : مرحله تکمیل شده است
    • state : وضعیت مرحله
    • start_date : تاریخ اجرا شدن مرحله
    • end_date : تاریخ پایان رسیدن مرحله
    • error_code : خطا در مرحله
    • duration : مدت زمان اجرای مرحله

ویژگی completed یک مقدار Boolean می باشد و اگر برابر با True باشد ویژگی state برابر با یکی از مقادیر SUCCEEDED, FAILED, STOPPED می باشد.

مثالی از Conditions

مراحل اجرا می شوند بوسیله قوانین تعریف شده که در این قوانین شروطی می باشد که این شروط باعث اجرا شدن مراحل می شود که در این مثال ما مرحله step داریم به نام form_validation_step که کامل انجام شده که می تواند یکی از این سه وضعیت (SUCCEEDED, FAILED یا STOPPED ) را داشته باشد.

form_validation_step SUCCEEDED

در مثال بعدی یک شرطی را بررسی می کنیم و در صورتی که مرحله به نام form_validation_step با شکست مواجه شود و خطا دهد و failed شود یک error code به شماره ۲۰۰۰۱ به شکل زیر می دهد.

form_validation_step FAILED AND form_validation_step ERROR_CODE != 20001

اجرا کردن یک Chain

در ادامه آموزش کار با Chains در اوراکل ، باید حداقل یک rule یک شرطی داشته باشد که مقدار آن در نتیجه ارزیابی همیشه برابر TRUE باشد تا این که یک chain بتواند یک chain job را اجرا کند. راحت ترین راه برای انجام این کار قرار دادن مقدار TRUE برابر شرط قرار دهید یا اگر از Schedule chain استفاده می کنید مقدار شرط برابر ۱ = ۱ در دستورات SQL قرار دهید.

پایان دادن یک Chain

باید حداقل یک قوانین chain باید شامل یک action با مقدار END باشد. یک chain job تکمیل نمی شود تا زمانی که قوانین rules آن شامل action آن برابر END و شرط آن برابر TRUE باشد.

مثالی از تعریف قوانین Rules

در ادامه مثالی خواهیم زد از ایجاد یک rule که chain را اجرا کرده و مرحله ۱ به نام step1 را اجرا می کند و قانون این می باشد که مرحله ۲ به نام step2 زمانی اجرا خواهد شد که مرحله ۱ به نام step1 با موفقیت به اتمام برسد.

پارامترهای rule_name و comments اختیاری بوده می توانید مقدارآن را برابر NULL کنید. اگر برای پارامتر rule_name مقداری درج کنید می توانید در تعریف مجدد از طریق نام rule از rule_name مجدد استفاده کنید.

آموزش اوراکل

راه اندازی یک ارزیابی داخلی برای Chain Rules

از طریق یک ارزیابی های Scheduler زمان بندی شده تمامی chain rules مورد ارزیابی قرار می گیرند تا chain job را اجرا کرد و با اجرای با موفق مرحله به مرحله با موفقیت chain به پایان برسد. شما می توانید یک chain را به صورتی تنظیم کنید که قوانین rules مورد ارزیابی مجدد قرار گرفته و در یک بازه زمانی و تکرار شونده مرتب قوانین مورد ارزیابی قرار بگیرند مانند هر یک ساعت یکبار یا هر دقیقه قوانین مورد ارزیابی قرار بگیرد و این قابلیت مفید و کاربردی می باشد اگر بخواهید مراحل یک chain را براساس یک زمان خاص و زمابندی شده اجرا کنید.

برای انجام عملیات ارزیابی داخلی evaluation interval برای یک chain کافی است دو پارامتر به نام evaluation_interval در هنگام ایجاد chain مقداردهی کنید و برای این پارامتر براساس data type می توانید بصورت INTERVAL DAY TO SECOND مقداردهی کنید.

آموزش اوراکل

فعال کردن Chains

شما می توانید یک Chain را یا پروسیجری به نام ENABLE در پکیج DBMS_SCHEDULER فعال کنید. یک chain بایستی فعال شده باشد قبل از اینکه بخواهد اجرا شود که می تواند بوسیله یک جاب اجرا شود. فعال کردن chain که در حال حاضر فعال می باشد هیچ خطایی نمی دهد و فعال می شود اگر غیر فعال باشد.

آموزش اوراکل

ایجاد Jobs برای Chains

برای اجرای یک chain ، شما می توانید با استفاده از پروسیجر RUN_CHAIN میتوانید یک job در chain را اجرا کنید.

آموزش اوراکل

حذف یک Chains

شما می توانید یک chain را حذف drop کنید که این chain شامل مراحل steps و قوانین rules می باشد را می توانید با استفاده از پروسیجری به نام DROP_CHAIN حذف drop کنید.

آموزش اوراکل

اجرای Chains

شما می توانید با استفاده از دو پروسیجر chain را سریعا اجرا کنید.

  • RUN_JOB
  • RUN_CHAIN

اگر شما در حال حاضر chain job برای chain ایجاد کرده اید می توانید با استفاده از دستور RUN_JOB جاب موردنظر در chain را اجرا کنید اما بایستی پارامتری به نام use_current_session برای پروسیجر RUN_JON برابر مقدار false باشد.

شما می توانید با استفاده از پروسیجر RUN_CHAIN یک chain را اجرا کنید بدون اینکه برای chain جابی job chain داشته باشد. همچنین شما می توانید با استفاده از دستور RUN_CHAIN فقط قسمتی از chain را اجرا کنید.

پروسیجر RUN_CHAIN زمانی که اجرا شود در واقع یک temporary job ایجاد می کند برای اجرا کردن قسمتی از یک chain.

آموزش اوراکل

حذف Chain Rules

شما می توانید rule قوانین را از یک chain با استفاده از پروسیجری به نام DROP_CHAIN_RULE حذف drop کنید.

آموزش اوراکل

غیرفعال سازی Chains

شما می توانید یک chain را با استفاده از پروسیجری به نام DISABLE غیرفعال کنید.

آموزش اوراکل

حذف یک Chain Steps

شما می توانید مراحل steps از chain را با استفاده از دستور DROP_CHAIN_STEP حذف drop کنید.

آموزش اوراکل

متوقف کردن Chains

شما می توانید chain درحال اجرا را stop کنید از طریق صدا زدن پروسیجری به نام DBMS_SCHEDULER.STOP_JOB که بایستی نام chain job را به آن پروسیچر پاس دهید و زمانی که chain job متوقف می شود تمامی مراحل chain که در حال اجرا باشد متوقف می شود و chain به پایان می رسد.

متوقف کردن Chain Steps بصورت جداگانه

شما دو راه دارید برای متوقف کردن مراحل chain (chain steps) که بصورت زیر می باشد.

  • بوسیله ایجاد کردن chain rule که stops کند یک یا چند مرحله را زمانی که قوانین شرط برقرار شود.
  • اجرا و فراخوانی پروسیجر DBMS_SCHEDULER.STOP_JOB

هر مرحله step که stop می کنید باید حتما نام schema و نام chain job و نام مرحله step job را مشخص کنید.

آموزش اوراکل

زمانی که یک chain step متوقف می شود وضعیت مرحله به STOPPED تغییر پیدا می کند

Pausing Chains

شما می توانید یک chain داخلی یا شاخه های جداگانه از chain را pause کنید. شما می توانید با قراردادن ویژگی PAUSE را روی یک یا چند step برابر TRUE کنید از طریق DBMS_SCHEDULER.ALTER_CHAIN یا ALTER_RUNNING_CHAIN این عملیات را انجام دهید.

آموزش اوراکل

Skip کردن Chain Steps

شما می توانید یک یا چند مرحله steps در یک chain را skip نادیده بگیرید. برای انجام این کار شما می توانید مقدار ویژگی SKIP را برای یک را چند مرحله step از طریق DBMS_SCHEDULER.ALTER_CHAIN یا ALTER_RUNNING_CHAIN مقدار آن را برابر TRUE کنید. اگر شما مرحله step ویژگی آن را برابر TRUE کنید بنابراین شرطی که در chain می باشد بدون در نظر گرفتن شرط انجام نشده و فورا نادیده گرفته می شود و انجام این کار هیچ تاثیری روی مراحل step در حال اجرا نمی گذارد.

اجرا کردن قسمتی از Chain

برای اجرا کردن قسمتی از Chain دو راهکار وجود دارد:

  • استفاده از پروسیجر ALTER_CHAIN و قرار دادن ویژگی attribute به نام PAUSE را برابر TRUE قرار دهید که با عث می شود یک یا چند مرحله steps در زمان اجرا ، اجرا نشده و قسمتی از فعال است اجرا شود.
  • استفاده از پروسیجر RUN_CHAIN برای اجرا قسمت خاصی از مرحله steps در chain می باشد .

مانیتورینگ و مشاهده Chains در حال اجرا

شما می توانید وضعیت chains در حال اجرا را از طریق دو views مشاهده کنید.

  • SCHEDULER_RUNNING_JOBS
  • SCHEDULER_RUNNING_CHAINS

ویوو SCHEDULER_RUNNING_JOBS شامل یک رکورد می باشد که شامل داده های chain job های در حال اجرا برای هر مرحله step می باشد.

ویوو SCHEDULER_RUNNING_CHAINS شامل یک رکورد می باشد برای هر مرحله step از chain که در حال اجرا می باشد.

اطلاعات بیشتر در مورد Chains