الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

اريد اعمل مراقبه على كل الجداول من الذي يقوم بالحذف والتعديل

Featured Replies

بتاريخ:

الاخوه الاعزا عندي سوال طرحته في اكثر من قسم في هذا المنتدى والان اطرحه في هذاالقسم لعل وعسى

سوالي
عندي 20 اسكيما في كل اسكيما 100 جدول اريد اعمل مراقبه على كل الجداول من الذي يقوم بالحذف والتعديل
فاذا انشات الترجر يدوي على كل تيبل لاخذ وقت وجهد لان بعض التيبل يكون فيها اكثر 160 فيلد
اريد ان اعمل برسيجر او فنكشن تجيب لي اسما الفيلد من كل تيبل الى الترجر ده

هل في طريقه لذلك او احد يدلني على طريقه اخر وجزاكم الله خيرا

بتاريخ:

أخي الكريم الداهيه حفظنا الله من دهائك ونفعنا به واعز الاسلام بك كما أعزه بجدنا وجدك داهية العرب سيدنا عمرو ابن العاص رضي الله عنه وارضاه وعن الصحابة أجمعين وعن أمهاتنا أمهات المؤمنين أجمعين والتابعين لهم باحسان الي يوم الدين

خلال اليوم وغد ان أحيانا الله تعالي سأسرد لك وللاخوة جميعا كيفية عمل تريجر مراقبة ليعمل بصفة أوتوماتيكية داعيا الله تعالي أن ينفعنا ويعلمنا مالم نعلم انه جواد كريم

بتاريخ:

أخي الكريم

أثناء تصفحي لمنتدي PL الان وجدت طلبك وقام مهندسنا واخونا الكبير أسامه بالرد الوافي وهذا ما كنت ذاهب لكتابته لكم تماما

أرججوا بيان ما اذا كانت لديك مشكلة في التطبيق وجميعنا معك باذن الله تعالي

الموضوع
http://araboug.org/ib/index.php?showtopic=44396

بتاريخ:

اخي العزيز اليك هذا السكربت يقوم ببناء جدواول مماثلة للموجودة عندك بالسكيما مع اضافة $aud ومن ثم تقوم بتشغيل السكربت التاني ليقوم بعمل ال triggers يعني ما راح تعمل اي شي الا انك تشغل السكربتات اللي راح اعطيك اياها واحد وري التاني اوك يا مان وادعيلي بس

--Step 1




DECLARE

LV_PRECISION_AND_SCALE    VARCHAR2(20);

-------------------- CURSOR WITH TABLES OF THE SCHEMA ------------------------   

CURSOR CUR_TBL2AUDIT IS SELECT TABLE_NAME

                		FROM USER_TABLES

                		WHERE SUBSTR(TABLE_NAME,1,26)||'$AUD' NOT IN

                		(SELECT TABLE_NAME FROM USER_TABLES)

                		AND TABLE_NAME NOT LIKE '%$AUD'   	

                		AND TABLE_NAME NOT IN ('PLAN_TABLE');

--------------------SELECT TABLE DEF OF UNAUDITED TABLE ------------------------.

 

CURSOR CUR_COL2AUDIT(P_TBL2AUDIT USER_TABLES.TABLE_NAME%TYPE) IS

                		SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH,DATA_PRECISION,DATA_SCALE

                		FROM USER_TAB_COLUMNS

                		WHERE TABLE_NAME  = P_TBL2AUDIT

                		AND DATA_TYPE NOT IN ('BLOB', 'CLOB','RAW')

                        ORDER BY COLUMN_ID;

--------------------ADD INELIGIBLE DATATYPES HERE ------------------------------:    	

BEGIN

  --RETRIEVE TABLE NAMES:

FOR CUR_TBL2AUDIT_REC IN CUR_TBL2AUDIT LOOP

	DBMS_OUTPUT.PUT_LINE('CREATE TABLE '||SUBSTR(CUR_TBL2AUDIT_REC.TABLE_NAME,1,26)||'$AUD (');

 	--RETRIEVE TABLE COLUMNS:

 

 	FOR CUR_COL2AUDIT_REC

 	IN CUR_COL2AUDIT(CUR_TBL2AUDIT_REC.TABLE_NAME) LOOP

 	IF CUR_COL2AUDIT_REC.DATA_TYPE = 'NUMBER'  THEN

 

--------------------ADD PRECISION FOR NUMBER OR PROVIDE A DEFAULT --------------

 	IF CUR_COL2AUDIT_REC.DATA_PRECISION IS NULL THEN

 	LV_PRECISION_AND_SCALE := '38,0)';

 	ELSE

 	LV_PRECISION_AND_SCALE :=CUR_COL2AUDIT_REC.DATA_PRECISION||','||CUR_COL2AUDIT_REC.DATA_SCALE||')';

 	END IF;

------------------RPAD ADDS SPACES FOR EASIER READING --------------------------

     DBMS_OUTPUT.PUT_LINE(RPAD(CUR_COL2AUDIT_REC.COLUMN_NAME,35)||CUR_COL2AUDIT_REC.DATA_TYPE||'('||LV_PRECISION_AND_SCALE||',');

 	ELSIF CUR_COL2AUDIT_REC.DATA_TYPE IN ('CHAR','VARCHAR','VARCHAR2')  THEN 

     DBMS_OUTPUT.PUT_LINE(RPAD(CUR_COL2AUDIT_REC.COLUMN_NAME,35)||CUR_COL2AUDIT_REC.DATA_TYPE||'('||CUR_COL2AUDIT_REC.DATA_LENGTH||'),'); 		

 	ELSE 

 	DBMS_OUTPUT.PUT_LINE(RPAD(CUR_COL2AUDIT_REC.COLUMN_NAME,35)||CUR_COL2AUDIT_REC.DATA_TYPE||',');

 	END IF;

 	END LOOP; 		

-------------------------ADD AUDIT FIELDS TO TABLE ----------------------------- 

     DBMS_OUTPUT.PUT_LINE('aud_action CHAR(50),

                             aud_timestamp DATE,

                             aud_user VARCHAR2(30),

                             IP_ADDRESS VARCHAR2(20),

                             OS_USER	VARCHAR2(50) )');

 	DBMS_OUTPUT.PUT_LINE('/');

  END LOOP;

END;





step2




DECLARE

V_PREFIX  	VARCHAR2(5)   := NULL;

V_CONDITION   VARCHAR2(30)  := NULL;

----------SELECT ALL USER TABLES WITH A CORRESPONDING AUDIT TABLE -------------

CURSOR    	CUR_TBL2AUDIT IS SELECT TABLE_NAME 

      		FROM USER_TABLES A

      		WHERE TABLE_NAME NOT LIKE '%$AUD'

      		AND EXISTS (SELECT 'x' FROM USER_TABLES B WHERE B.TABLE_NAME=SUBSTR(A.TABLE_NAME,1,26) || '$AUD');

----------SELECT TABLE DEF OF AUDIT TABLE, SANS AUDIT COLUMNS ------------------

CURSOR   	CUR_COL2AUDIT(P_AUDITTBL USER_TABLES.TABLE_NAME%TYPE) IS SELECT COLUMN_NAME

      		FROM USER_TAB_COLUMNS

      		WHERE TABLE_NAME  = P_AUDITTBL

      		AND COLUMN_NAME NOT IN

          	('AUD_ACTION','AUD_TIMESTAMP','AUD_USER')

              ORDER BY COLUMN_ID;

----------------------- begining of the execution ------------------------------              

BEGIN

FOR CUR_TBL2AUDIT_REC IN CUR_TBL2AUDIT LOOP

             DBMS_OUTPUT.PUT_LINE('CREATE OR REPLACE TRIGGER '||

         	SUBSTR(CUR_TBL2AUDIT_REC.TABLE_NAME,1,23)||'$AUDTRG '||CHR(10)||' AFTER INSERT OR DELETE OR UPDATE '||'ON '||CUR_TBL2AUDIT_REC.TABLE_NAME||' FOR EACH ROW ');

         	V_PREFIX   	:= ':new';

         	V_CONDITION	:= 'IF INSERTING OR UPDATING THEN';

         	DBMS_OUTPUT.PUT_LINE('DECLARE '||CHR(10)||'v_operation VARCHAR2(10) := NULL;');

             DBMS_OUTPUT.PUT_LINE('BEGIN ');

	IF V_PREFIX = ':new' THEN 

         	DBMS_OUTPUT.PUT_LINE(

         	'	IF INSERTING THEN '||CHR(10)||

             '   	v_operation := ''INS''; '||CHR(10)||

         	'	ELSIF UPDATING THEN '||CHR(10)||

         	'   	v_operation := ''UPD''; '||CHR(10)||

         	'	ELSE '||CHR(10)||

         	'   	v_operation := ''DEL''; '||CHR(10)||

         	'	END IF; '||CHR(13));

	END IF;

-------------------------- loop start comes here -------------------------------

	LOOP

  	DBMS_OUTPUT.PUT_LINE(V_CONDITION||CHR(10));

  	DBMS_OUTPUT.PUT_LINE('   INSERT INTO '||SUBSTR(CUR_TBL2AUDIT_REC.TABLE_NAME,1,26) || '$AUD (');

-------------------------Loop Through 1St To Get Column Names ------------------

  	FOR CUR_COL2AUDIT_REC IN CUR_COL2AUDIT(CUR_TBL2AUDIT_REC.TABLE_NAME) LOOP

  	DBMS_OUTPUT.PUT_LINE(CUR_COL2AUDIT_REC.COLUMN_NAME|| ',');

  	END LOOP;

--------------------------End Of The Loop Comes Here ---------------------------

  	DBMS_OUTPUT.PUT_LINE('aud_action,aud_timestamp,aud_user,IP_ADDRESS,OS_USER) '||'VALUES (');

-------------------------Loop A 2Nd Time For The Values ------------------------

  	FOR CUR_COL2AUDIT_REC IN CUR_COL2AUDIT(CUR_TBL2AUDIT_REC.TABLE_NAME) LOOP

    	DBMS_OUTPUT.PUT_LINE(V_PREFIX||'.'||CUR_COL2AUDIT_REC.COLUMN_NAME|| ',');

  	END LOOP;

-------------------------End Of The Loop Comes Here ----------------------------

  	DBMS_OUTPUT.PUT_LINE('v_operation,SYSDATE,USER,(SELECT SYS_CONTEXT(''USERENV'', ''IP_ADDRESS'') FROM DUAL),

                                                    	(SELECT SYS_CONTEXT(''USERENV'', ''OS_USER'') FROM DUAL));'||CHR(10));

  	EXIT WHEN V_PREFIX = ':old';

  	V_PREFIX := ':old';

  	V_CONDITION := 'ELSE ';

  	END LOOP;

 	DBMS_OUTPUT.PUT_LINE('   END IF;'||CHR(10)||'END;'||CHR(10)||'/'||CHR(10));

   END LOOP; 

------------------------------------------------ THE END -----------------------

END;

Creating_tables_daynamically(ٍStep 1).rar

بتاريخ:

اخى الكريم ...انت كده هتاثر على الاداء بشكل كبير Performance واعتقد انك تحدد بالظبط انت عايز تعمل audit لايه وعلى اى مستوي لكى لا تطبق معااير الامان مع التاثير على الادء
تحياتى

  • بعد 2 سنة...
بتاريخ:

ممكن حد يكون جرب موضوع الاخ kamal480 يقول لنا الكلام ده صحيح ولا ايه وياتري فعلا بيأثر على Performance ولا لأ ياريت لأن الموضوع مهم جدا

بتاريخ:

Up

  • بعد 2 أسابيع...
بتاريخ:

هناك طريقة اسهل بكثير للمراقبة. عن طريق AUDIT

نقوم بعمل التالي :
AUDIT SELECT,INSERT,UPDATE,DELETE
ON SCOTT.EMP; OK
العبارة السابقة تمكنك من مراقبة الجدول اعلاه اذا حدث اي اضافة او اي شي يظهر لكي في الجدول التالي DBA_AUDIT_TRAIL
SELECT * FROM DBA_AUDIT_TRAIL

وشكرا

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.