نشر بواسطة : 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; 



علامات : Database

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


Comments

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