إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
* * * - - 2 صوت

اليكم : شرح كيفيه تسجيل التغييرات التي يجريها المستخدمين على الجداول في حالة الاضافه و الحذف و التعديل


43 رد (ردود) على هذا الموضوع

#1 ammarcontrol

ammarcontrol

    عضو نشط

  • الأعضــاء
  • 237 مشاركة

تاريخ المشاركة 14 July 2010 - 01:38 PM


تفظلوا شرح كيفيه تسجيل التغييرات التي يجريها المستخدمين على الجداول في حالة الاضافه و الحذف و التعديل

السلام عليكم
تحيه طيبه لجميع اعضاء المنتدى
اليوم اشرح لكم كيفيه تتبع المستخدمين و تسجيل العمليات التي يجرونها على جداول قواعد البيانات من اضافه و حذف و تعديل حيث سوف نقوم بعمل برنامج يقوم بتسجيل القيم التي يعدلها المستخدمين القيم القديمه و القيم بعد التعديل و اسم المستخدم الذي قام التعديل و التاريخ.
من اجل تتبع المستخدمين هناك طريقتين :
الطريقه الاولى:
من خلال عمل trigger في داخل قاعده البيانات يقوم بتتبع عمليات update و insert و delete و يكون العمل كما يلي:
لناخذ الجدول WEATHER يحتوي اسم المدينه و درجه الحراره بها و درجه الرطوبه و طبيعه الطقس , كود انشاء الجدول و البيانات كما يلي افتح شاشه SQL*PLUS:
create user weather_software identified by aaa;
grant dba to weather_software;
connect weather_software/aaa@db1;

create table WEATHER (
City         VARCHAR2(11),
Temperature  NUMBER,
Humidity     NUMBER,
Condition    VARCHAR2(9)
);

insert into WEATHER values ('LIMA',45,79,'RAIN');
insert into WEATHER values ('PARIS',81,62,'CLOUDY');
insert into WEATHER values ('MANCHESTER',66,98,'FOG');
insert into WEATHER values ('ATHENS',97,89,'SUNNY');
insert into WEATHER values ('CHICAGO',66,88,'RAIN');
insert into WEATHER values ('SYDNEY',69,99,'SUNNY');
insert into WEATHER values ('SPARTA',74,63,'CLOUDY');
commit;

الان نقوم بانشاء جدول يقوم بتتبع التغيرات التي يجريها المستخدم يحتوي الجدول : اسم المستخدم و تاريخ العمليه و نوع العمليه و البيانات القديمه و البيانات الجديده ,كود انشاء هذا الجدول كما يلي:
create table WEATHER_TRACK (
User_name    VARCHAR2(20),
Op_time      timestamp,
Operation    VARCHAR2(20),
City_old         VARCHAR2(11),
Temperature_old  NUMBER,
Humidity_old     NUMBER,
Condition_old    VARCHAR2(9),
City_new         VARCHAR2(11),
Temperature_new  NUMBER,
Humidity_new     NUMBER,
Condition_new    VARCHAR2(9)
);

الان نكتب كود انشاء الـ trigger المسؤول عن تتبع جدول weather وتسجيل التغييرات في جدول WEATHER_TRACK كما يلي :

CREATE OR REPLACE TRIGGER 

"WEATHER_SOFTWARE"."TRIGGER_WEATHER_TRACK" BEFORE UPDATE OR DELETE 

OR INSERT  OF "CITY", "CONDITION", "HUMIDITY", "TEMPERATURE" ON 

"WEATHER_SOFTWARE"."WEATHER" REFERENCING OLD AS old NEW AS new FOR 

EACH ROW begin


if inserting then

insert into WEATHER_TRACK values

(user,sysdate,'Insert',:old.City,:old.Temperature,:old.Humidity,
:old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition);

elsif deleting then

insert into WEATHER_TRACK values

(user,sysdate,'Delete',:old.City,:old.Temperature,:old.Humidity,
:old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition);

elsif updating then

insert into WEATHER_TRACK values

(user,sysdate,'Update',:old.City,:old.Temperature,:old.Humidity,:old.Condition,
:new.City,:new.Temperature,:new.Humidity,:new.Condition);

end if;

end;
/


الان مع شرح الكود بالتفصيل:

CREATE OR REPLACE TRIGGER
انشء trigger جديد او قم باستبداله اذا كان موجودا.
"WEATHER_SOFTWARE"."TRIGGER_WEATHER_TRACK"
اسمه TRIGGER_WEATHER_TRACK
BEFORE UPDATE OR DELETE OR INSERT
يعمل قبل ان يتم تنفيذ جمل UPDATE و DELETE و INSERT
OF "CITY", "CONDITION", "HUMIDITY", "TEMPERATURE" ON

"WEATHER_SOFTWARE"."WEATHER"
يعمل على حقول الجدول WEATHER
REFERENCING OLD AS old NEW AS new FOR EACH ROW
تمثل القيم القديمه بكلمه old و القيم الجديده new
begin
بدايه ال trigger
if inserting then
اذا كانت العمليه ادخال
insert into WEATHER_TRACK values
(user,sysdate,'Insert',:old.City,:old.Temperature,:old.Humidity,
:old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition);
قم بادراج اسم المستخدم و الوقت و اسم العمليه و القيم القديمه و الجديده في جدول WEATHER_TRACK
elsif deleting then
اذا كانت العمليه مسح
insert into WEATHER_TRACK values
(user,sysdate,'Delete',:old.City,:old.Temperature,:old.Humidity,
:old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition);
قم بادراج اسم المستخدم و الوقت و اسم العمليه و القيم القديمه و الجديده في جدول WEATHER_TRACK
elsif updating then
اذا كانت العمليه تعديل
insert into WEATHER_TRACK values
(user,sysdate,'Update',:old.City,:old.Temperature,:old.Humidity,
:old.Condition,:new.City,:new.Temperature,:new.Humidity,:new.Condition);
قم بادراج اسم المستخدم و الوقت و اسم العمليه و القيم القديمه و الجديده في جدول WEATHER_TRACK
end if;
نهايه الجمله الشرطيه
end;
/
نهايه كود الtrigger

اذا اردنا عمل الtrigger من خلال الEnterprise Manager 10g
يكون العمل كما يلي:

صورة 1
صورة
صورة 2
صورة
صورة 3
صورة
صورة 4
صورة
صورة 5
صورة
صورة 6
صورة
صورة 7
صورة
صورة 8
صورة





والان من اجل فحص البرنامج نقوم بادخال و حذف و تعديل قيم في جدول Weather و من ثم نلاحظ كيف ان العمليات تم تسجيلاها في جدول WEATHER_TRACK اكتب التالي:
insert into WEATHER values ('LIMA',45,79,'RAIN');
update  WEATHER  set city='aa',Temperature=11,Humidity=5,Condition='FOG' where city='SPARTA';
delete from weather where city='PARIS';
commit;
select * from  WEATHER_TRACK;
سوف يكون الناتج كما يلي:
صورة

الطريقه الثانيه من خلال التطبيق سوف اتطرق لها في الدرس القادم ان شاء الله .


تم التعديل بواسطة ammarcontrol, 14 July 2010 - 01:53 PM.

  • ‫العقل الرأي‬‎ معجب بهذا

#2 فــادي

فــادي

    عضو

  • الأعضــاء
  • 19 مشاركة
  • الاهتمامات:{اللهمـ انثرني في قلوب أحبّتي كـ بذرةٍ
    ت ك ب ر .. لتكوّن شجرةً أصلها طيّبٌ في قلوبهم
    وفرعُها لديكَ في السماء ! }

تاريخ المشاركة 14 July 2010 - 01:57 PM

يعطيك ربي الف الف الف عافيه

على الشرح الرائع لعمل trigger

وجزاك الله الف خير
...|""""""""""""""""""""""""""""|\|_
...|<<<('open_form('c:/windows>>>|||"|""\___
...| ________________ __ _|||_|____|)

...!(@)'(@)""""******!(@)(@)*****!(@)""

#3 ammarcontrol

ammarcontrol

    عضو نشط

  • الأعضــاء
  • 237 مشاركة

تاريخ المشاركة 14 July 2010 - 02:07 PM

اشكرك اخي الغالي بالتوفيق ان شاء الله

#4 ENG_HOSSAM_WALLY

ENG_HOSSAM_WALLY

    عضو مميز

  • الأعضــاء
  • 1,010 مشاركة
  • الاسم الأول:Hossam
  • اسم العائلة:Wally
  • البـلـد: Country Flag
  • المنصب الحالي:......

تاريخ المشاركة 14 July 2010 - 02:29 PM



بارك الله فيك مجهود رائع وشرح متميز

أكمل موضوعك وانا متابع معك

بالتوفيق ان شاء الله

Hossam Wally

 

Hossam_wally@hotmail.com

 

 

00201156365637

 

 


#5 Ahmad.Hasan

Ahmad.Hasan

    مشرف قسم الـ Forms & Reports والمشاريع

  • فريق الإشراف
  • 4,908 مشاركة
  • الاسم الأول:Ahmad
  • اسم العائلة:Hasan
  • البـلـد: Country Flag
  • المنصب الحالي:HCM Senior Consultant

تاريخ المشاركة 14 July 2010 - 02:45 PM

السلام عليكم
شرح جميل جزاك الله كل خير..
ولكن ماذا لو كان لدينا 200 جدول ؟؟
هل سيتم عمل Trigger لــ 200 جدول ؟؟
لذلك اقترح بعمل جدول واحد يضم اسماء الجداول الموجودة في الـ DB مع الحركات التي تتم على هذه الجداول...
تقبلوا مروري.
تحياتي.

.Oracle E-Business Suite R12 HCM Certified Implementation Specialist

 

.Oracle Fusion Human Capital Management 11g Human Resources Certified Implementation Specialist

 

.Oracle Global Human Resources Cloud 2016 Certified Implementation Specialist


#6 ammarcontrol

ammarcontrol

    عضو نشط

  • الأعضــاء
  • 237 مشاركة

تاريخ المشاركة 14 July 2010 - 04:08 PM

السلام عليكم
شرح جميل جزاك الله كل خير..
ولكن ماذا لو كان لدينا 200 جدول ؟؟
هل سيتم عمل Trigger لــ 200 جدول ؟؟
لذلك اقترح بعمل جدول واحد يضم اسماء الجداول الموجودة في الـ DB مع الحركات التي تتم على هذه الجداول...
تقبلوا مروري.
تحياتي.

وعليكم السلام اخي الغالي في هذه الطريقه اي الطريقه الاولى سوف يتوجب عمل 200 trigger و 200 جدول لتسجيل الاحداث حيث انه لا يمكن عمل trigger عام حيث انه يجب ان يكون ال trigger مرتبط بجدول معين.
عموما اخي الغالي هناك طريقه اخرى للتتبع وهي من خلال التطبيق و هناك بامكانك ان تبرمج الطريقه كما يحلو لك حيث يمكن جعل جدول واحد يحتوي التغييرات على جميع الجداول و سوف اتطرق لها في الدرس القادم ان شاء الله.
  • ENG_HOSSAM_WALLY معجب بهذا

#7 ammarcontrol

ammarcontrol

    عضو نشط

  • الأعضــاء
  • 237 مشاركة

تاريخ المشاركة 14 July 2010 - 05:28 PM


يمكن ايظا ان نقوم بتتبع التغييرات على الجداول من خلال قاعده البيانات و ذلك من خلال Materialized View Logs تعالوا معي نتعرف على هذه الطريقه:
عندما ننشئ Materialized View Logs سوف يقوم بانشاء جدول يحتوي السجلات قبل عمليه التغيير وبعدها وكذلك يحتوي السجلات المحذوفه لكن مشكله هذه الطريقه انها لاتخبرك من قام بهذه التعديلات وكذلك لاتخبرك بنوع التعديل هل هو delete ام insert ام update لانشاء Materialized View Logs قم بالخطوات التاليه:
صورة 1
صورة
صورة 2
صورة
صورة 3
صورة
صورة 4
صورة
صورة 5
صورة
صورة 6
صورة
الان من اجل فحص البرنامج قم بادخال التالي:

insert into WEATHER values ('LIMA',45,79,'RAIN');
update  WEATHER  set city='aa',Temperature=11,Humidity=5,Condition='FOG' where city='SPARTA';
delete from weather where city='PARIS';
commit;
ثم قم باستعراض جدول التتبع كما يلي:
select * from MLOG$_WEATHER;
لاحظ ما يلي:
صورة 7
صورة
يمكن بواسطه جمل SQL ان تستخرج السجلات المضافه و المعدله كما يلي:

select 
MLOG$_WEATHER.city as city_old ,
MLOG$_WEATHER.Temperature as Temperature_old, 
MLOG$_WEATHER.Humidity as Humidity_old,
MLOG$_WEATHER.Condition as Condition_old,
weather.city as city_new,
weather.Temperature as Temperature_new ,
weather.Humidity as Humidity_new,
weather.Condition as Condition_new 
from  weather 
inner join MLOG$_WEATHER
on weather.rowid=MLOG$_WEATHER.M_ROW$$;

اما بالنسبه للسجلات المحذوفه فيكون الكود كما يلي:

select  MLOG$_WEATHER.city,
MLOG$_WEATHER.Temperature,
MLOG$_WEATHER.Humidity,
MLOG$_WEATHER.Condition
from  MLOG$_WEATHER
where MLOG$_WEATHER.M_ROW$$
not in
(select rowid from weather);

الدرس القادم سوف يكون كيفيه تتبع عمليات insert و update و delete من خلال التطبيق باستخدام oracle forms developer 10g فانتظرونا.
دمتم في امان الله


تم التعديل بواسطة ammarcontrol, 14 July 2010 - 05:35 PM.


#8 ammarcontrol

ammarcontrol

    عضو نشط

  • الأعضــاء
  • 237 مشاركة

تاريخ المشاركة 14 July 2010 - 05:29 PM

رد تكرر اسف

تم التعديل بواسطة ammarcontrol, 14 July 2010 - 05:34 PM.


#9 Bent al-Yemen

Bent al-Yemen

    عضو

  • الأعضــاء
  • 8 مشاركة

تاريخ المشاركة 14 July 2010 - 08:00 PM

دخلت للنت بحثا عن هذا الموضوع فوفقني الله الى هذا الموضوع .......موضوع رائع جدا جزيت به خيرا ،،

السلام عليكم
شرح جميل جزاك الله كل خير..
ولكن ماذا لو كان لدينا 200 جدول ؟؟
هل سيتم عمل Trigger لــ 200 جدول ؟؟
لذلك اقترح بعمل جدول واحد يضم اسماء الجداول الموجودة في الـ DB مع الحركات التي تتم على هذه الجداول...
تقبلوا مروري.
تحياتي.


في الحقيقة لم اعرف الفكرة بالضبط ،،،أتمنى ان يتكرم على احد الاخوان بعمل هذا الترايجر ...احتاجه في مشروعي

#10 ammarcontrol

ammarcontrol

    عضو نشط

  • الأعضــاء
  • 237 مشاركة

تاريخ المشاركة 14 July 2010 - 09:12 PM

دخلت للنت بحثا عن هذا الموضوع فوفقني الله الى هذا الموضوع .......موضوع رائع جدا جزيت به خيرا ،،


السلام عليكم
شرح جميل جزاك الله كل خير..
ولكن ماذا لو كان لدينا 200 جدول ؟؟
هل سيتم عمل Trigger لــ 200 جدول ؟؟
لذلك اقترح بعمل جدول واحد يضم اسماء الجداول الموجودة في الـ DB مع الحركات التي تتم على هذه الجداول...
تقبلوا مروري.
تحياتي.


في الحقيقة لم اعرف الفكرة بالضبط ،،،أتمنى ان يتكرم على احد الاخوان بعمل هذا الترايجر ...احتاجه في مشروعي

اخي الغالي سوف اتطرق لهذا الموضوع في الدروس القادمه ان شاء الله فتابع معي هذا الموضوع

#11 Amgad

Amgad

    مشرف عام ومشرف قسم تحليل النظم

  • الفريق الإداري
  • 4,774 مشاركة
  • الاسم الأول:امجد
  • اسم العائلة:حلمي
  • البـلـد: Country Flag
  • المنصب الحالي:Business Systems Analyst at NATCOM Co. Riyadh KSA

تاريخ المشاركة 14 July 2010 - 09:37 PM

السلام عليكم ورحمة الله

الأخ / ammar

شكرا لك على جهدك المتميز ... جزاك الله خيرا

لقد اضاف عرضك للشرح باستخدام الصور ... الى تميز موضوعك

اتمنى من الأخوة الأعضاء ... عرض مشاركاتهم باستخدام الصور وايضا البرامج المستخدمه فى الشرح

والله الموفق

وننتظر اكمال الدروس



لا إله إلا الله الحليم الكريم
لا اله إلا الله العلى العظيم
لا اله إلا الله رب السماوات السبع و رب العرش العظيم
‏اللهم ارزقني قبل الموت توبة وعند الموت شهادة وبعد الموت جنة
اللهم ارزقني حسن الخاتمة
اللهم هون علينا سكرات الموت ... ونور علينا قبورنا
اللهم ارزقني الموت وأنا ساجد لك يا ارحم الراحمين
اللهم ثبتني عند سؤال الملكين
اللهم اجعل قبري روضة من رياض الجنة ولا تجعله حفرة من حفر النار
اللهم اني اعوذ بك من فتن الدنيا
اللهم ارحم ابائنا وامهاتنا واغفر لهما وتجاوز عن سيئاتهما وادخلهم فسيح جناتك ... والحقنا بهما يا رب العالمين
اللهم ارحم موتانا وموتى المسلمين واشفي مرضانا ومرضى المسلمين
اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الأحياء منهم والأموات
وبارك اللهم على سيدنا محمد صلى الله عليه وسلم
اللهم آمين ... اللهم آمين ... اللهم آمين


....


#12 Bent al-Yemen

Bent al-Yemen

    عضو

  • الأعضــاء
  • 8 مشاركة

تاريخ المشاركة 15 July 2010 - 04:08 AM

اخي الغالي سوف اتطرق لهذا الموضوع في الدروس القادمه ان شاء الله فتابع معي هذا الموضوع


شكرا لك وان شاء الله متابعين معاك ...(سوف نسلم المشروع يوم السبت ان شاء الله تعالى

#13 ammarcontrol

ammarcontrol

    عضو نشط

  • الأعضــاء
  • 237 مشاركة

تاريخ المشاركة 15 July 2010 - 11:02 PM


السلام عليكم
اخوتي الاعزاء اليوم موعدنا مع الطريقه الثانيه لتتبع التغييرات التي يجريها المستخدمين على الجداول هذه الطريقه تتم من خلال التطبيق الـApplication وسوف نستخدم الـOracle Forms Builder 10g حيث سوف نقوم بتتبع التغييرات التي تجري بواسطه المستخدمين على جدول تتبع فتابعوا معي الدرس:
اولا نقوم بانشاء جدول للتبع كما يلي:

create table WEATHER_TRACK2 (
User_name    VARCHAR2(20),
Op_time      timestamp,
Operation    VARCHAR2(20),
City_old         VARCHAR2(11),
Temperature_old  NUMBER,
Humidity_old     NUMBER,
Condition_old    VARCHAR2(9),
City_new         VARCHAR2(11),
Temperature_new  NUMBER,
Humidity_new     NUMBER,
Condition_new    VARCHAR2(9)
);

والان نقوم بفتح نافذه Oracle Forms Builder 10g كما يلي:

صورة 1
صورة
صورة 2
صورة
صورة 3
صورة
صورة 4
صورة
صورة 5
صورة
صورة 6
صورة
صورة 7
صورة



#14 ammarcontrol

ammarcontrol

    عضو نشط

  • الأعضــاء
  • 237 مشاركة

تاريخ المشاركة 15 July 2010 - 11:03 PM


صورة 8
صورة
صورة 9
صورة
صورة 10
صورة
صورة 11
صورة
صورة 12
صورة
صورة 13
صورة
صورة 14
صورة

ثم نقوم بكتابه الاكواد التاليه:
في الــ(post-insert)

insert into WEATHER_TRACK2 values (user,sysdate,'Insert',null,null,null,null,:City,:Temperature,:Humidity,:Condition);


في الــ(pre-update)

declare
v_City        VARCHAR2(11);
v_Temperature  NUMBER;
v_Humidity     NUMBER;
v_Condition    VARCHAR2(9);
begin
	select city,Temperature, Humidity,Condition into v_City,v_Temperature,v_Humidity,v_Condition from weather where rowid=:weather.rowid;
	insert into WEATHER_TRACK2 values (user,sysdate,'Update',v_City,v_Temperature,v_Humidity,v_Condition,:City,:Temperature,:Humidity,:Condition);
end;

في الــ(post-delete)

insert into WEATHER_TRACK2 values (user,sysdate,'Delete',:City,:Temperature,:Humidity,:Condition,null,null,null,null);


#15 ammarcontrol

ammarcontrol

    عضو نشط

  • الأعضــاء
  • 237 مشاركة

تاريخ المشاركة 15 July 2010 - 11:06 PM


في المرفقات ملف النموذج الذي شرحته.
الدرس القادم سوف يكون عن كيفيه تتبع اكثر من جدول و تخزين قيم التتبع في جدول واحد رئيسي فانتضرونا ان شاء الله.

ملفات مرفقة

  • ملف مرفق  MODULE2.rar   8.16كيلو   486 عدد مرات التحميل

تم التعديل بواسطة ammarcontrol, 15 July 2010 - 11:07 PM.