بتاريخ: 19 أكتوبر 201015 سنة comment_201759 الاخوه الاعزا عندي سوال طرحته في اكثر من قسم في هذا المنتدى والان اطرحه في هذاالقسم لعل وعسىسوالي عندي 20 اسكيما في كل اسكيما 100 جدول اريد اعمل مراقبه على كل الجداول من الذي يقوم بالحذف والتعديلفاذا انشات الترجر يدوي على كل تيبل لاخذ وقت وجهد لان بعض التيبل يكون فيها اكثر 160 فيلداريد ان اعمل برسيجر او فنكشن تجيب لي اسما الفيلد من كل تيبل الى الترجر دههل في طريقه لذلك او احد يدلني على طريقه اخر وجزاكم الله خيرا تقديم بلاغ
بتاريخ: 19 أكتوبر 201015 سنة comment_201769 أخي الكريم الداهيه حفظنا الله من دهائك ونفعنا به واعز الاسلام بك كما أعزه بجدنا وجدك داهية العرب سيدنا عمرو ابن العاص رضي الله عنه وارضاه وعن الصحابة أجمعين وعن أمهاتنا أمهات المؤمنين أجمعين والتابعين لهم باحسان الي يوم الدين خلال اليوم وغد ان أحيانا الله تعالي سأسرد لك وللاخوة جميعا كيفية عمل تريجر مراقبة ليعمل بصفة أوتوماتيكية داعيا الله تعالي أن ينفعنا ويعلمنا مالم نعلم انه جواد كريم تقديم بلاغ
بتاريخ: 19 أكتوبر 201015 سنة comment_201789 أخي الكريم أثناء تصفحي لمنتدي PL الان وجدت طلبك وقام مهندسنا واخونا الكبير أسامه بالرد الوافي وهذا ما كنت ذاهب لكتابته لكم تماما أرججوا بيان ما اذا كانت لديك مشكلة في التطبيق وجميعنا معك باذن الله تعالي الموضوعhttp://araboug.org/ib/index.php?showtopic=44396 تقديم بلاغ
بتاريخ: 21 أكتوبر 201015 سنة comment_201925 اخي العزيز اليك هذا السكربت يقوم ببناء جدواول مماثلة للموجودة عندك بالسكيما مع اضافة $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 تقديم بلاغ
بتاريخ: 22 أكتوبر 201015 سنة comment_202007 اخى الكريم ...انت كده هتاثر على الاداء بشكل كبير Performance واعتقد انك تحدد بالظبط انت عايز تعمل audit لايه وعلى اى مستوي لكى لا تطبق معااير الامان مع التاثير على الادء تحياتى تقديم بلاغ
بتاريخ: 18 مارس 201312 سنة comment_233792 ممكن حد يكون جرب موضوع الاخ kamal480 يقول لنا الكلام ده صحيح ولا ايه وياتري فعلا بيأثر على Performance ولا لأ ياريت لأن الموضوع مهم جدا تقديم بلاغ
بتاريخ: 27 مارس 201312 سنة comment_234222 هناك طريقة اسهل بكثير للمراقبة. عن طريق AUDITنقوم بعمل التالي :AUDIT SELECT,INSERT,UPDATE,DELETEON SCOTT.EMP; OKالعبارة السابقة تمكنك من مراقبة الجدول اعلاه اذا حدث اي اضافة او اي شي يظهر لكي في الجدول التالي DBA_AUDIT_TRAILSELECT * FROM DBA_AUDIT_TRAILوشكرا تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.