Oracle Programs
نشر بواسطة : Obay Salah , November 19, 2024
لنفرض أننا نريد إنشاء مجموعة من Jobs، جميع هذه Jobs تقوم بتنفيذ Stored Procedure مخزن في قاعدة البيانات في أوقات مختلفة.
في مثل هذا السيناريو، يمكنك إنشاء جميع هذه Jobs عن طريق الإجراء CREATE_JOB، حيث يتم تحديد JOB_TYPE ليأخذ القيمة STORED_PROCEDURE وJOB_ACTION ليأخذ اسم الإجراء الذي نريد تنفيذه. سنكرر هذا العمل في جميع Jobs التي نريد إنشائها ولها ارتباط بنفس Stored Procedure.
هذا الأمر قد يكون متعباً وفيه نوع من التكرار. إذاً ما الحل؟
الحل هو إنشاء Program، بحيث يحتوي هذا Program على معلومات هذا الإجراء الذي نريد تنفيذه ومن ثم نقوم فقط بمناداته من خلال Job.
سنستخدم هنا إجراء يسمى CREATE_PROGRAM ينتمي إلى الحزمة DBMS_SCHEDULER، ولاحظ أن متغيراته ليست كثيرة، فقط نحتاج لتحديد PROGRAM_NAME، وهي اسم يجب أن يكون وحيداً في هذه Schema، كذلك نحتاج لتحديد PROGRAM_TYPE وهو يساوي في الحقيقة المتغير JOB_TYPE وأيضاً المتغير PROGRAM_ACTION هو يساوي المتغير JOB_ACTION. أما باقي المتغيرات (NUMBER_OF_ARGUMENTS وENABLED وCOMMENTS) فقد تم شرحها سابقاً.
begin dbms_scheduler.create_program( program_name=>'prog_account', program_type=>'stored_procedure', program_action=>'account', enabled=>true); end;
قمنا بإنشاء Program يسمى prog_program. هذا Program يقوم بتحديد نوع المهمة التي نريد تنفيذها لاحقًا عند إنشاء Job. هذه المهمة هي Stored Procedure مخزنة على مستوى قاعدة البيانات، وهذا الإجراء يسمى account.
يمكننا متابعة جميع Programs في قاعدة البيانات عن طريق استعلام الفيو DBA_SCHEDULER_PROGRAMS.
إذا لم تحدد المتغير Enabled ليأخذ القيمة True، فإن الأصل أن يأخذ القيمة False، أي أنه سيكون معطلاً.
يمكنك أن تقوم بتفعيله فيما بعد عن طريق الإجراء ENABLE الموجود في الحزمة DBMS_SCHEDULER، هذا الإجراء ليس فقط للProgram ولكن يمكن استخدامه أيضًا لتفعيل باقي كائنات الجدولة.
يمكننا كذلك حذف Program من قاعدة البيانات عن طريق الإجراء DROP_PROGRAM.
BEGIN DBMS_SCHEDULER.DROP_PROGRAM( PROGRAM_NAME=>'PROG_ACCOUNT',FORCE=>TRUE); END; /
هكذا قمنا بحذف Program الذي قمنا بإنشائه سابقًا.
Comments
لايوجد تعليق حتى الان