˜q‡ç¨‹å·²åˆ›å»ºã€?/p>
没有错误�/p>
æŽˆæƒæˆåŠŸã€?/p>
PL/SQL ˜q‡ç¨‹å·²æˆåŠŸå®Œæˆã€?/p>
½E‹åºåŒ…已创å¾ã€?/p>
SQL> @C:\oracle\ora92\rdbms\admin\dbmslms.sql
½E‹åºåŒ…已创å¾ã€?/p>
没有错误�/p>
æŽˆæƒæˆåŠŸã€?/p>
SQL> EXECUTE dbms_logmnr_d.build(dictionary_filename=>'v816dict.ora',dictionary_location=>'e:\oracle\logs');
SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'e:\Oracle\oradata\NCDBPX\redo01.log',Options=>dbms_logmnr.new);
PL/SQL procedure successfully completed.
SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'e:\Oracle\oradata\NCDBPX\redo02.log',Options=>dbms_logmnr.ADDFILE);
PL/SQL procedure successfully completed.
SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'e:\Oracle\oradata\NCDBPX\redo03.log',Options=>dbms_logmnr.ADDFILE);
PL/SQL procedure successfully completed.
SQL> EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'e:\oracle\logs\v816dict.ora');
PL/SQL procedure successfully completed.
SQL> select sql_REDO from v$logmnr_contents where upper(operation)='DELETE' and upper(sql_redo) like '%GPRS_SER%'
2 /
no rows selected
SQL> ed
Wrote file afiedt.buf
1* select sql_REDO from v$logmnr_contents where upper(operation)='CREATE' and upper(sql_redo) like '%EMP%'
SQL> /
no rows selected
--------------------------------------------------------------------------------------
LogMiner的主è¦ç”¨é€?br>LogMiner工具的主è¦ç”¨é€”有åQ?br>åQ?åQ‰è·Ÿítªæ•°æ®åº“çš„å˜åŒ–:(x¨¬)å¯ä»¥¼›Èº¿çš„è·Ÿítªæ•°æ®åº“çš„å˜åŒ–,而ä¸ä¼?x¨¬)媄å“在¾U¿ç³»¾lŸçš„æ€§èƒ½ã€?br>åQ?åQ‰å›žé€€æ•°æ®åº“çš„å˜åŒ–åQšå›žé€€ç‰¹å®šçš„å˜åŒ–æ•°æ®ï¼Œå‡å°‘point-in-time recovery的执行ã€?br>åQ?åQ‰ä¼˜åŒ–和扩容计划åQšå¯é€šè¿‡åˆ†æžæ—¥å¿—æ–‡äšgä¸çš„æ•°æ®ä»¥åˆ†æžæ•°æ®å¢žé•¿æ¨¡å¼ã€?/p>
Oracle9i LogMiner的增强功èƒ?br>åQ?åQ‰æ”¯æŒæ›´å¤šæ•°æ?å˜å‚¨¾cÕdž‹åQšé“¾æŽ?˜q移行ã€CLUSTER表æ“作ã€DIRECT PATHæ’入以åŠ(qi¨¢ng)DDLæ“作ã€?br>åQ?åQ‰æå–和使用数æ®å—典的选项åQšçŽ°åœ¨æ•°æ®å—å…æ€¸ä»…å¯ä»¥æå–到一个外部文件ä¸åQŒè¿˜å¯ä»¥ç›´æŽ¥æå–到é‡åšæ—¥å¿—æµä¸ï¼Œå®ƒåœ¨æ—¥å¿—‹¹ä¸æä¾›äº†æ“作当时的数æ®å—典快照åQŒè¿™æ ·å°±å¯ä»¥å®žçް¼›Èº¿åˆ†æžã€?br>åQ?åQ‰å…许对DMLæ“作按事务进行分¾l„:(x¨¬)å¯ä»¥åœ¨START_LOGMNRåQˆï¼‰ä¸è®¾¾|®COMMITTED_DATA_ONLY选项åQŒå®žçް坹DMLæ“作的分¾l„,˜q™æ ·ž®†æŒ‰SCN的顺åºè¿”回已¾læäº¤çš„事务ã€?br>åQ?åQ‰æ”¯æŒSCHEMAçš„å˜åŒ–:(x¨¬)在数æ®åº“打开的状æ€ä¸‹åQŒå¦‚æžœä‹É用了LogMinerçš„DDL_DICT_TRACKING选项åQŒOracle9içš„LogMinerž®†è‡ªåŠ¨å¯¹æ¯”æœ€åˆçš„æ—¥å¿—‹¹å’Œå½“剾pÈ»Ÿçš„æ•°æ®å—典,òq¶è¿”回棼‹®çš„DDLè¯å¥åQŒåƈ且会(x¨¬)自动侦察òq¶æ ‡è®°å½“剿•°æ®å—å…¸å’Œæœ€åˆæ—¥å¿—æµä¹‹é—´çš„差别,˜q™æ ·å³ä‹Éæœ€åˆæ—¥å¿—æµä¸æ‰€æ¶‰åŠ(qi¨¢ng)的表已ç»è¢«æ›´æ”ÒŽ(gu¨©)ˆ–è€…æ ¹æœ¬å·²¾lä¸å˜åœ¨åQŒLogMineråŒæ ·ä¼?x¨¬)返回棼‹®çš„DDLè¯å¥ã€?br>åQ?åQ‰åœ¨æ—¥å¿—ä¸è®°å½•更多列信æ¯çš„能力:(x¨¬)例如对于UPDATEæ“作ä¸ä»…ä¼?x¨¬)记录被更新行的情况åQŒè¿˜å¯ä»¥æ•æ‰æ›´å¤šå·²å‘生的更新æ“作信æ¯ã€?br>åQ?åQ‰æ”¯æŒåŸºäºŽæ•°å€¼çš„æŸ¥è¯¢åQšOracle9i LogMiner在支æŒåŽŸæœ‰åŸºäºŽå…ƒæ•°æ®åQˆæ“作ã€å¯¹è±¡ç‰åQ‰æŸ¥è¯¢çš„基础上,开始支æŒåŸºäºŽå®žé™…涉å?qi¨¢ng)到的数æ®çš„æŸ¥è¯¢ã€‚例如涉å?qi¨¢ng)一个工资表åQŒçŽ°åœ¨å¯ä»¥å¾ˆå®ÒŽ(gu¨©)˜“地查出员工工资由1000å˜æˆ2000的原始更新è¯å¥ï¼Œè€Œåœ¨ä¹‹å‰åªèƒ½é€‰å‡ºæ‰€æœ‰çš„æ›´æ–°è¯å¥ã€?/p>
LogMiner的安�nbsp;
è¦å®‰è£…LogMiner工具åQŒå¿…™å»é¦–å…ˆè¦ä»¥SYS用户íw«ä†¾˜q行下é¢ä¸¤ä¸ªè„šæœ¬æ–‡äšgåQ?br>åQˆlåQ?Oracle_HOME/rdbms/admin/dbmslsm.sql
用æ¥åˆ›å¾DBMS_LOGMNR包,该包用æ¥åˆ†æžæ—¥å¿—æ–‡äšgã€?br>åQ?åQ?Oracle_HOME/rdbms/admin/dbmslsmd.sql
用æ¥åˆ›å¾DBMS_LOGMNR_D包,该包用æ¥åˆ›å¾æ•°æ®å—典文äšgã€?/p>
LogMiner工具的ä‹Éç”?nbsp;
åQ?åQ‰åˆ›å»ºæ•°æ®å—典文ä»Óž¼ˆdata-dictionaryåQ?br> åˆ›å¾æ•°æ®å—典的目的就是让LogMiner引用涉åŠ(qi¨¢ng)到内部数æ®å—å…æ€¸çš„部分时ä¸ÞZ»–们实际的åå—åQŒè€Œä¸æ˜¯ç³»¾lŸå†…部的16˜q›åˆ¶ã€‚æ•°æ®å—典文件是一个文本文ä»Óž¼Œä½¿ç”¨åŒ…DBMS_LOGMNR_Dæ¥åˆ›å»ºã€?nbsp;
首先在init.oraåˆå§‹åŒ–傿•°æ–‡ä»¶ä¸åQŒæŒ‡å®šæ•°æ®å—典文件的ä½ç½®åQŒä¹Ÿž®±æ˜¯æ·ÕdŠ ä¸€ä¸ªå‚æ•°UTL_FILE_DIRåQŒè¯¥å‚æ•°å€égØ“(f¨´)æœåС噍䏿”„¡½®æ•°æ®å—典文äšg的目录。如åQ?br>UTL_FILE_DIR=e:\Oracle\logs;
釿–°å¯åŠ¨æ•°æ®åº“ï¼Œä½¿æ–°åŠ çš„å‚æ•°ç”Ÿæ•ˆåQŒç„¶åŽåˆ›å»ºæ•°æ®å—典文ä»Óž¼š(x¨¬)
CONNECT SYS
EXECUTE dbms_logmnr_d.build(dictionary_filename=>'v816dict.ora',dictionary_location=>'e:\oracle\logs');
åQ?åQ‰åˆ›å»ø™¦åˆ†æžçš„æ—¥å¿—文件列è¡?br> Oracleçš„é‡ä½œæ—¥å¿—分ä¸ÞZ¸¤¿U,在线åQˆonlineåQ‰å’Œ¼›Èº¿åQˆofflineåQ‰å½’档日志文ä»Óž¼Œä¸‹é¢ž®±åˆ†åˆ«æ¥è®¨è®º˜q™ä¸¤¿Uä¸åŒæ—¥å¿—文件的列表创å¾ã€?br>①分æžåœ¨¾U‰K‡ä½œæ—¥å¿—æ–‡ä»?br>â—?nbsp; 创å¾åˆ—表
EXECUTE dbms_logmnr.add_logfile(LogFileName=>'e:\Oracle\oradata\sxf\redo01.log',Options=>dbms_logmnr.new);
â—?nbsp; æ·ÕdŠ å…¶ä»–æ—¥å¿—æ–‡äšg到列è¡?br>EXECUTE dbms_logmnr.add_logfile(
LogFileName=>'e:\Oracle\oradata\sxf\redo02.log',
Options=>dbms_logmnr.addfile);
②分æžç¦»¾U¿æ—¥å¿—æ–‡ä»?br>â—?nbsp; 创å¾åˆ—表
EXECUTE dbms_logmnr.add_logfile(LogFileName=>'E:\Oracle\oradata\sxf\archive\ARCARC09108.001',Options=>dbms_logmnr.new);
â—?nbsp; æ·ÕdŠ å¦å¤–的日志文件到列表
EXECUTE dbms_logmnr.add_logfile(
LogFileName=>'E:\Oracle\oradata\sxf\archive\ARCARC09109.001',Options=>dbms_logmnr.addfile);
åQ?åQ‰ä‹É用LogMiner˜q›è¡Œæ—¥å¿—分æž
â‘ æ— é™åˆ¶æ¡äšg
EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'e:\oracle\logs\v816dict.ora');
②有é™åˆ¶æ¡äšg
通过对过½E‹DBMS_ LOGMNR.START_LOGMNRä¸å‡ 个ä¸åŒå‚数的讄¡½®åQŒå¯ä»¥ç¾ƒ?y¨u)®è¦åˆ†æžæ—¥å¿—æ–‡äšg的范围。通过讄¡½®èµ·å§‹æ—‰™—´å’Œç»ˆæ¢æ—¶é—´å‚æ•°å¯ä»¥é™åˆ¶åªåˆ†æžæŸä¸€æ—‰™—´èŒƒå›´çš„æ—¥å¿—ã€?
åQ?åQ‰è§‚察分æžç»“果(v$logmnr_contentsåQ?br> åŠ¨æ€æ€§èƒ½è§†å›¾v$logmnr_contents包å«LogMiner分æžåŽå¾—到的所有的信æ¯ã€?br>与日志分æžç›¸å…Œ™§†å›¾è¿˜æœ‰ï¼š(x¨¬)
â‘ V$LOGMNR_DICTIONARYåQšæŸ¥è¯¢ä‹É用的数æ®å—典文äšgã€?br>â‘¡V$LOGMNR_PARAMETERSåQšæŸ¥è¯¢å½“å‰LogMiner讑֮šçš„傿•°ã€?br>â‘¢V$LOGMNR_FILESåQšæŸ¥è¯¢åˆ†æžçš„æ—¥å¿—æ–‡äšgã€?br>â‘£V$LOGMNR_CONTENTSåQšæ—¥å¿—æ–‡ä»¶çš„å†…å®¹ã€?/p>
3åQŽå…¶ä»–注æ„事™å?br>åQ?åQ‰LogMinerå¿…é¡»ä½¿ç”¨è¢«åˆ†æžæ•°æ®åº“实例产生的å—典文ä»Óž¼Œè€Œä¸æ˜¯å®‰è£…LogMiner的数æ®åº“产生的å—典文ä»Óž¼Œå¦å¤–å¿…é¡»ä¿è¯å®‰è£…LogMineræ•°æ®åº“çš„å—ç¬¦é›†å’Œè¢«åˆ†æžæ•°æ®åº“的嗽W¦é›†ç›¸åŒã€?br>åQ?åQ‰è¢«åˆ†æžæ•°æ®åº“åã^å°å¿…™åÕd’Œå½“å‰LogMiner所在数æ®åº“òq›_°ä¸€æ —÷€?br>åQ?åQ‰LogMiner日志分æžå·¥å…·ä»…能够分æžOracle 8以åŽçš„äñ”å“ã€?/p>