Faisal Matari بتاريخ: 9 مارس 2016 تقديم بلاغ مشاركة بتاريخ: 9 مارس 2016 (معدل) مواصلة للموضوع الأصلي تجدونه هنا http://www.araboug.org/ib/index.php?showtopic=60550 سوف أعمد بإذن الله تعالى الى شرح كل جزئية على حده في موضوع منفصل وذلك من اجل أن تعم الفائدة للجميع وليستطيع الباحث الوصول الى مبتغاه بسهولة ويسر وحتى أسهب في الشرح إكثر .... 1- إدارة التعقب نبداء بسم الله الرحمن الرحيم بشرح الجزئية الخاصة بإدارة التعقب 1- إدارة التعقب ، وهو جزء خاص بتعقب كل حركة يقوم بها المستخدم (اضافة ، حذف ، تعديل ، استعلام ، وصول) ، مع التاريخ ومن اي جهاز قام بها وكم رقم الأي بي واسم المستخدم ونظام التشغيل و.... الخ. المقصود بإدارة التعقب : هي تعقب ومعرفة تفاصيل من يقوم بالدخول على البرنامج وما هي العمليات التي يقوم بها وتاريخها. حيث نستفيد من هذه الفكرة اذا حدث أن هناك أحد القيود المحاسبية تم ادخاله بطريقة الخطأ وتسبب في خطأ فادح حيث يقوم مدير الحسابات بالتحقيق في الأمر وتهويل المشكلة على الرغم من ان هناك محاسبين لكل منها مهمة خاصة في مديول (الحسابات) ولكننا لم نعرف من قام بكتابة القيد ونكتشف المشكلة. أحياناً يحصل أحدهم على كلمة السر الخاصة باسم المستخدم ويقوم بالدخول على النظام والعبث بما تقوم به أنت من مهام لأسباب مختلفة ولكننا هنا سوف نمنع ذلك كله. وسنعرف من دخل باسمك وفي أي تاريخ ومن اي جهاز واجمع أكبر قدر من المعلومات للوصول الى مواصفات المتصفح الحالي للنظام. جرب الكود التالي SELECT SYS_CONTEXT ('USERENV', 'SESSIONID') sessionid, SYS_CONTEXT ('USERENV', 'SID') sids, SYS_CONTEXT ('USERENV', 'IP_ADDRESS') ip_address, SYS_CONTEXT ('USERENV', 'OS_USER') os_user, SYS_CONTEXT ('USERENV', 'HOST') hosts, SYS_CONTEXT ('USERENV', 'SERVER_HOST') server_host, SYS_CONTEXT ('USERENV', 'SESSION_USER') session_user, SYS_CONTEXT ('USERENV', 'IDENTIFICATION_TYPE') identification_type, SYS_CONTEXT ('USERENV', 'LANG') lang, SYS_CONTEXT ('USERENV', 'TERMINAL') termina FROM DUAL; بإمكانكم مراجعة الموضوع التالي لمعرفة كل المعلومات التي يقدمها SYS_CONTEXT من تفاصيل من هنا https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions165.htm ولكني أحببت أن أقدم أفضلها وذلك لأن اللائحة طويلة جداً أولاً : قاعدة البيانات في البداية لابد من انشاء مستخدم لقاعدة البيانات باسم LIB وكلمة مرور LIB حتى تعمل بشكل جيد من خلال بحثي وجدت أن هناك (رقم جلسة) لكل عملية (Log IN) على قاعدة البيانات يمكن الوصول اليها من الكود التالي SELECT SYS_CONTEXT ('USERENV', 'SESSIONID') sessionid FROM DUAL; سوف يعطيك الكود السابق كل مرة تدخل على قاعدة البيانات رقم جديد وهذا الرقم تسلسلي لا نهاية له .. وبذلك تم إعتماد رقم الجلسة الحالية هو الرقم الأساسية (Primary Key) نحن بحاجة فقط الى ثلاثة جداول وهي كما يلي : 1. INFORMATIONS وهو عبارة عن (View) فيه يتم الإتسعلام عن المعلومات الأساسية للجهاز 2. SESSIONS في هذ االجدول يتم تخزين كل عملية (دخول) وربطها باسم المستخدم. 3. TRACES في هذا الجدول يتم تخزين كل عملية يقوم بها المستخدم بدلالة (رقم الجلسة). العملية كما يلي الخطوة الأولة : INFORMATIONS يعيد لي المعلومات الحالية الخطوة الثانية : أقوم بتخزين المعلومات في جدول SESSIONS الذي فيه ؤقم الجلسة (SESSIONID) هو المفتاح الرئيسي ويتم في هذا الجدول ربط اسم المستخدم (CRNT_USER) من أجل معرفة من هو المستخدم الذي قام بهذه الجلسة كما يتم فيه تخزين تاريخ بداية الجلسة (STARTDATE) ومتى انتهت (ENDATE). الخطوة الأخيرة: عند كل عملية وصول أو حذف او اضافة او تعديل او دخول للشاشة نقوم بوضع كود يتم من خلاله تخزين رقم الجلسة الحالية واسم الشاشة والعملية وتاريخها وتفاصيل العملية. حيث يكون الربط بين الجدولين برقم الجسة فقط. أنتهى 1. نقوم بإنشاء informations فيو كما في الكود التالي CREATE OR REPLACE FORCE VIEW lib.informations AS SELECT SYS_CONTEXT ('USERENV', 'SESSIONID') sessionid, SYS_CONTEXT ('USERENV', 'SID') sids, SYS_CONTEXT ('USERENV', 'OS_USER') os_user, SYS_CONTEXT ('USERENV', 'IP_ADDRESS') ip_address, SYS_CONTEXT ('USERENV', 'HOST') hosts, SYS_CONTEXT ('USERENV', 'SERVER_HOST') server_host, SYS_CONTEXT ('USERENV', 'SESSION_USER') session_user, SYS_CONTEXT ('USERENV', 'IDENTIFICATION_TYPE') identification_type, SYS_CONTEXT ('USERENV', 'LANG') lang, SYS_CONTEXT ('USERENV', 'TERMINAL') terminal FROM DUAL; مهمتها ترجع لي جميع المعلومات المطلوبة والتي أريدها ... 2. نقوم بإنشاء جدول الجلسات SESSIONS كما يلي : CREATE TABLE LIB.SESSIONS ( SESSIONID VARCHAR2(256 BYTE) NOT NULL, SIDS VARCHAR2(256 BYTE), OS_USER VARCHAR2(256 BYTE), IP_ADDRESS VARCHAR2(256 BYTE), HOSTS VARCHAR2(256 BYTE), SERVER_HOST VARCHAR2(256 BYTE), SESSION_USER VARCHAR2(256 BYTE), IDENTIFICATION_TYPE VARCHAR2(256 BYTE), LANG VARCHAR2(256 BYTE), TERMINAL VARCHAR2(256 BYTE), CRNT_USER VARCHAR2(256 BYTE), STARTDATE DATE, ENDATE DATE ) 3. نقوم بإنشاء جدول التعقب TRACES كما يلي : CREATE TABLE LIB.TRACES ( SESSIONID VARCHAR2(256 BYTE) NOT NULL, FRM_NAME VARCHAR2(150 BYTE) NOT NULL, ACS_BLOCKS VARCHAR2(50 BYTE), ACS_TYPE VARCHAR2(50 BYTE), ACS_REF VARCHAR2(50 BYTE), ACS_DESC VARCHAR2(256 BYTE), ACS_DATE DATE ) ثانياً : الأكودا المستخدمة 1. بعد تسجيل الدخول والتحقق من ثحة اسم المستخدم وكلمة المرور نقوم بما يلي .. الكود الخاص بتسجيل الجلسة وربطها بالمستخدم وبدايتها insert into LIB.SESSIONS select SESSIONID, SIDS , OS_USER , IP_ADDRESS , HOSTS , SERVER_HOST , SESSION_USER , IDENTIFICATION_TYPE, LANG , TERMINAL , upper(Uname) ,--:global.uname sysdate , null from LIB.INFORMATIONS; ومهم جداً أن نقوم بمعرفة رقم الجلسة بالاستعلام عنه وجعله في متغير :global.SESSIONID لسهولة الوصول اليه . select SESSIONID into :global.SESSIONID from INFORMATIONS; وأثناء تسجيل الخروج يجب كتابة الكود التالي في حدث PRE-LOGOUT لمعرفة الزمن الذي قضاه المستخدم في الجلسة وتاريخ الخروج update LIB.SESSIONS set ENDATE = sysdate where SESSIONID = :global.SESSIONID; 2- أثناء كل عملية يتم تسجيل الدخول يتم تسجيل الحدث في جدل التعقب كما يلي : insert into Traces values( :global.SESSIONID, :SYSTEM.CURRENT_FORM,:SYSTEM.Cursor_block, 'ACCESS', null, 'LOG IN',sysdate); commit; الكود السابق من خلاله تم تسجيل حدث (تسجيل الدخول) يمكن تكرار الكود السابق في الشاشات لمعرفة عملية الاضافة والتعديل والحذف او فتح الشاشة أو اي أمر تريده فقط بتغيير نوع الحدث كما يلي 1. تسجيل حدث فتح الشاشة وفي تريجر WHEN-NEW-FORM-INSTANCE نكتب التالي insert into Traces values(:SYSTEM.CURRENT_FORM,:SYSTEM.Cursor_block,:global.SESSIONID, 'ACCESS', null, 'OPEN FORM ',sysdate); 2. تسجيل حدث الاضافة INSERT على البلوك في تريجر PRE-INSERT كما يلي insert into LIB.Traces values(:global.SESSIONID, :SYSTEM.CURRENT_FORM,:SYSTEM.Cursor_block, 'INSERT', :FORMS.FRM_ID, 'INSERT NEW RECORD ' ,sysdate); 3- تسجيل حدث التعديل UPDATE على البلوك في تريجر PRE-UPDATE كما يلي: insert into LIB.Traces values(:global.SESSIONID, :SYSTEM.CURRENT_FORM,:SYSTEM.Cursor_block, 'INSERT', :FORMS.FRM_ID, 'UPDATE RECORD ' ,sysdate); 4. تسجيل حدث الاضافة DELETE على البلوك في تريجر PRE-DELETE كما يلي insert into LIB.Traces values(:global.SESSIONID, :SYSTEM.CURRENT_FORM,:SYSTEM.Cursor_block, 'INSERT', :FORMS.FRM_ID, 'DELET RECORD ' ,sysdate); وبإمكانك تكرار هذا الكود مع تغيير التفاصيل في أي مكان تريد مثلاً عند اجراء عملية بحث ، او حتى عند حصول رسالة خطأ أو أو أو .. وهكذا أتمنى من الجميع مشاركتي بالنتائج التي وصلتم اليها وأبرز المعوقات وكما أقول دائماً إن شاء الله أكون على استعداد تام لأي استفسار تم تعديل 9 مارس 2016 بواسطة Faisal Matari 4 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Faisal Matari بتاريخ: 12 مارس 2016 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 12 مارس 2016 أتمنى من الجميع مشاركتي النتائج التي وصلو اليها وأبرز المعوقات من اجل الإستمرار في الأجزاء التالية اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
المبرمج الصاعد بتاريخ: 12 مارس 2016 تقديم بلاغ مشاركة بتاريخ: 12 مارس 2016 ماشا الله مهندس.. فكرة وعمل جبار جدا وراح يكون مفيد لأغلب المبرمجين .. امل منكم الإستمرار وإفادتنا .. ليس عندي ما اظيفه على طرحك.. كل الشكر و التفدير.. لك.. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
albraa4u بتاريخ: 25 مارس 2016 تقديم بلاغ مشاركة بتاريخ: 25 مارس 2016 ننتظر الجزء الثاني من ادارة التعقب بوركت الجهود اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Faisal Matari بتاريخ: 26 مارس 2016 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 26 مارس 2016 لعدم فائدة الموضوع ، لم استمر في الشرح ، فلتعذروني ،،، وسأعادوه في القريب العاجل اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
albraa4u بتاريخ: 26 مارس 2016 تقديم بلاغ مشاركة بتاريخ: 26 مارس 2016 بالعكس يا استاذ Faisal الموضوع رائع وفائدته عظيمة , منذ ان طرحت الحلقة الاولى وانا انتظر المزيد بانتظارك على جناح السرعة اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
jedghaleb بتاريخ: 10 مايو 2016 تقديم بلاغ مشاركة بتاريخ: 10 مايو 2016 استمررررررررر والله مبدع اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
محمد_العراقي بتاريخ: 27 يوليو 2016 تقديم بلاغ مشاركة بتاريخ: 27 يوليو 2016 مشكووووور اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Faisal Matari بتاريخ: 4 أغسطس 2016 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 4 أغسطس 2016 وصلتني بعض الرسائل من الأصدقاء بخصوص تكملة الموضوع ، ونعدكم إن شاء الله في القريب العاجل دمتم سالمين اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Mjma1998 بتاريخ: 22 فبراير 2017 تقديم بلاغ مشاركة بتاريخ: 22 فبراير 2017 بارك الله فيك جهد مميز اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
jedghaleb بتاريخ: 8 نوفمبر 2017 تقديم بلاغ مشاركة بتاريخ: 8 نوفمبر 2017 بارك الله فيك مهندس فيصل دائما مميز اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.