نشر بواسطة : Obay Salah , November 19, 2024

 في الJob يتم تحديد ما الذي نريد عمله وأيضًا متى نريد تنفيذها. أما بالنسبة للسؤال ما الذي نريد عمله فهو إما:

SQL Statements أو PL/SQL Block أو PL/SQL Stored Procedure أو Java Procedure أو Shell Script أو Executable File أو External Procedure.

أما بالنسبة للسؤال متى نريد تنفيذ المهمة، فيتم تحديد زمن تنفيذ الJob وأيضًا يتم تحديد الزمن الدوري أي زمن تكرار التنفيذ.

عمومًا هناك العديد من الخيارات لإنشاء الJob عن طريق الإجراء CREATE_JOB الموجود في الحزمة DBMS_SCHEDULER.

  • JOB_NAME: لتحديد اسم الJob ويجب أن يكون هذا الاسم فريدًا داخل الSchema.
  • JOB_TYPE: وهو إما أن يكون PLSQL_BLOCK أو STORED_PROCEDURE أو EXECUTABLE.
  • JOB_ACTION: يحتوي هذا المتغير على Block PL/SQL أو statement SQL إذا كان المتغير JOB_TYPE يحتوي على القيمة PLSQL_BLOCK.

أما إذا احتوى المتغير JOB_TYPE على القيمة STORED_PROCEDURE فيجب هنا أن يتم تحديد اسم الإجراء.

أما إذا أخذ المتغير JOB_TYPE القيمة EXECUTABLE فيمكن أن يأخذ المتغير JOB_ACTION أي شيء يمكن أن يتم تنفيذه عن طريق نظام التشغيل، كأن يكون مثلاً ملفًا يقوم بعمل بعض المهام على نظام التشغيل.

  • NUMBER_OF_ARGUMENTS: هذا المتغير لتحديد عدد الArguments التي يجب أن تضعها في الJob_Action.
  • START_DATE: لتحديد بداية تنفيذ هذه الJob.
  • REPEAT_INTERVAL: لتحديد كيف يتم تكرار تنفيذ هذه الJob.
  • END_DATE: لتحديد زمن نهاية تنفيذ الJob.
  • JOB_CLASS: لتحديد الCLASS الذي يقوم بعمل تكامل بين Resource & Scheduler Manager.
  • ENABLED: لتحديد هل يتم تنفيذ الJob أم تظل عاطلة حتى يتم تغيير قيمة هذا المتغير لتأخذ القيمة TRUE في الوضع الافتراضي يأخذ هذا المتغير FALSE.
  • AUTO_DROP: لتحديد هل يتم حذف الJob بعد انتهاء فترة زمن تنفيذها (END_DATE) أم لا، في الوضع الافتراضي تظل الJob موجودة عن طريق أخذ هذا المتغير القيمة TRUE.
  • COMMENTS: لكتابة التعليقات التي تريد.
begin

dbms_scheduler.create_job(

job_name=>'insertserial',

job_type=>'plsql_block',

job_action=>'insert into tserial values(sysdate);',

start_date=>sysdate,

repeat_interval=>'sysdate+1',

end_date=>sysdate+30,

enabled=>true, auto_drop=>true);

commit;

end; 


هكذا قمنا بعمل Job تسمى INSERTSERIAL. هذه الJob تقوم بإضافة رقم متسلسل في الجدول Tserial يوميًا ابتداءً من اليوم ولمدة شهر كامل.

هذه الJob تعمل مباشرة بعد إنشائها ويتم حذفها بعد آخر تنفيذ لها؛ أي بعد مرور شهر. عمومًا الJob عبارة عن كائن في قاعدة البيانات يقوم بتنفيذ بعض المهام.

هذه المهام يمكن أن تكون عبارة عن إجراء Stored Procedure في قاعدة البيانات أو عبارة عن PLSQL Block يكتب داخل الJob، أو عبارة عن ملف مخزن عن طريق نظام التشغيل.

هذه المهام يتم تنفيذها بشكل آلي عن طريق تحديد زمن التنفيذ وزمن تكرار التنفيذ.

لاحظ معي هذا الإجراء قام بإنشاء Job مكتفية بذاتها أي لم تتصل بScheduler أو Program.

عمومًا الحزمة DBMS_SCHEDULER تحتوي على أربعة إجراءات تسمى CREATE_JOB، كل واحد له خصائص مختلفة عن الآخر.

يمكنك الاستعلام عن الJobs التي تعمل في قاعدة البيانات عن طريق الجدول DBA_SCHEDULER_JOBS.

من هنا تستطيع معرفة تفاصيل الJobs التي تعمل في قاعدة البيانات.

يمكن تفعيل الJobs العاطلة عن العمل Disabled عن طريق الإجراء ENABLE الموجود في الحزمة DBMS_SCHEDULER

BEGIN

DBMS_SCHEDULER.ENABLE('INSERTSERIAL');

END;

/ 


يمكنك أيضًا تعطيله عن طريق الإجراء DISABLE.

BEGIN

DBMS_SCHEDULER.DISABLE('INSERTSERIAL');

END;

/ 


يمكن لمدير قاعدة البيانات حذف Jobs من قاعدة البيانات عن طريق الإجراء DROP_JOB.

BEGIN

DBMS_SCHEDULER.DROP_JOB('INSERTSERIAL',TRUE);

END;

/ 


كما يمكن إيقاف Job عن طريق الإجراء STOP وتنفيذ Job عن طريق الإجراء RUN.

ملاحظة: عند إنشاء قاعدة البيانات عن طريق DBCA يتم إنشاء اثنين من Jobs، الأول PURGE_LOG التي تقوم بتنظيف Scheduler log، والثانية GATHER_STATS_JOB التي تقوم بعمل إحصائيات لتحليل قاعدة البيانات.


علامات : Database

يمكن ان يعجبك ايضا


Comments

لايوجد تعليق حتى الان