Move Active User To Other Consumer Group
نشر بواسطة : Obay Salah , November 19, 2024
تحويل المستخدم النشط إلى مجموعة CONSUMER أخرى:
لنفرض أن المستخدم OBAY قام بالاتصال بقاعدة البيانات من خلال المجموعة NEW_GROUP، ونريد الآن تحويل مجموعة CONSUMER من NEW_GROUP إلى SYS_GROUP.
سنستخدم الإجراء SWITCH_CONSUMER_GROUP_FOR_USER للقيام بذلك. الآن، من خلال المستخدم OBAY، سنتأكد من أن المستخدم اتصل بقاعدة البيانات من خلال المجموعة NEW_GROUP.
SELECT USERNAME,RESOURCE_CONSUMER_GROUP FROM V$SESSION WHERE USERNAME='OBAY';
الآن عن طريق الإجراء SWITCH_CONSUMER_GROUP_FOR_USER نقوم بتحويل المستخدم OBAY إلى المجموعة SYS_PLAN. لاحظ أن المستخدم OBAY متصل الآن بقاعدة البيانات، فعند تنفيذ هذا الإجراء، سيتم تحويل جميع الجلسات التابعة للمستخدم OBAY إلى المجموعة SYS_GROUP.
DECLARE USER VARCHAR2(200); CONSUMER_GROUP VARCHAR2(200); BEGIN USER := 'OBAY'; CONSUMER_GROUP := 'SYS_GROUP'; SYS.DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_ USER ( USER, CONSUMER_GROUP ); COMMIT; END;
لنتأكد الآن من أن الجلسات التابعة للمستخدم OBAY تم تحويلها إلى مجموعة المستهلك التي تسمى SYS_GROUP.
SELECT USERNAME,RESOURCE_CONSUMER_GROUP FROM V$SESSION WHERE USERNAME='OBAY';
هل لاحظت كيف تم تحويل الجلسات التابعة للمستخدم OBAY من المجموعة NEW_GROUP إلى المجموعة SYS_GROUP؟
فلو كان للمستخدم OBAY عدد من الجلسات متصلة بقاعدة البيانات، فسوف يتم تحويلها جميعاً إلى المجموعة SYS_GROUP.
لكن ماذا لو أردنا تحويل جلسة معينة من مجموعة هذه الجلسات إلى المجموعة SYS_GROUP؟ في مثل هذا السيناريو سنستخدم الإجراء
SWITCH_CONSUMER_GROUP_FOR_SESS. لاستخدام هذا الإجراء، نحتاج إلى معرفة SESSION_ID و SESSION_SERIAL.
SELECT SID,SERIAL# FROM V$SESSION WHERE USERNAME='OBAY';
إذا أردنا تحويل هذه الجلسة إلى المجموعة NEW_GROUP، سنستخدم الإجراء SWITCH_CONSUMER_GROUP_FOR_SESS.
مع ملاحظة أنه لو كان هناك أكثر من جلسة تابعة لهذا المستخدم، فلن تتأثر بهذا الإجراء.
DECLARE SESSION_ID NUMBER SESSION_SERIAL NUMBER CONSUMER_GROUP VARCHAR2(200) BEGIN SESSION_ID := 741 SESSION_SERIAL := 32 CONSUMER_GROUP := 'NEW_GROUP' SYS.DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_ SESS ( SESSION_ID, SESSION_SERIAL, CONSUMER_GROUP) COMMIT END
الآن إذا قمت بعمل استعلام عن هذه الجلسة فسوف تجد أنها تنتمي للمجموعة NEW_GROUP.
SELECT USERNAME,RESOURCE_CONSUMER_GROUP FROM V$SESSION WHERE USERNAME='OBAY';
هناك إجراء آخر يقوم بعملية تحويل الجلسة الحالية من مجموعة مستهلك إلى أخرى، هذا الإجراء هو SWITCH_CURRENT_CONSUMER_GROUP.
هذا الإجراء تابع للحزمة DBMS_SESSION. لاحظ أن هذا الإجراء يعمل على الجلسة الحالية، أي لا يمكن تنفيذه من خلال جلسة أخرى ونحن نستهدف جلسة مختلفة.
DECLARE NEW_CONSUMER_GROUP VARCHAR2(200); OLD_CONSUMER_GROUP VARCHAR2(200); INITIAL_GROUP_ON_ERROR BOOLEAN; BEGIN NEW_CONSUMER_GROUP := ‘NEW_GROUP’; OLD_CONSUMER_GROUP := ‘SYS_GROUP’; INITIAL_GROUP_ON_ERROR := FALSE; SYS.DBMS_SESSION.SWITCH_CURRENT_CONSUMER_GROUP ( NEW_CONSUMER_GROUP, OLD_CONSUMER_GROUP, INITIAL_GROUP_ON_ERROR ); COMMIT; END;
Comments
لايوجد تعليق حتى الان