2007年06月14日

9i使用flashback流程

os:redhat 4.3

oracle:9iR2 


1、使用sys身份執行
1、$ORACLE_HOME/rdbms/admin/dbmslm.sql
2、$ORACLE_HOME/rdbms/admin/dbmslmd.sql

2、設定字典檔存放地方(功用在於反解oracle的內建16位元編碼的資料為我們能瞭解的字元)
SQL>alter system set utl_file_dir='/u01/app/oracle/logminer' scope=spfile;
SQL>startup open force;
SQL>execute dbms_logmnr_d.build(dictionary_filename => 'testlogminer.ora',dictionary_location => '/u01/app/oracle/logminer');

3、開始增加解譯的檔案,除了redo log之外archive檔也可,我就以redo log 檔為例了
SQL> execute dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/oradata/binhu/redo02.log',Options => dbms_logmnr.NEW);
-- 第一次加入檔案
SQL> execute dbms_logmnr.add_logfile(LogFileName => '/u01/app/oracle/oradata/binhu/redo01.log',Options => dbms_logmnr.addfile);
-- 如還要再新增的話,就要改用addfile

4、開始進行增加進來檔案的分析 (start_logmnr還有別的參數可縮短範圍,請自行查尋相關資料)
SQL> execute dbms_logmnr.start_logmnr(DictFileName => '/u01/app/oracle/logminer/testlogminer.ora');

5、查尋的view
SQL>select scn,cscn,to_char(timestamp,'yyy-mm-dd hh24:mi:ss'),to_char(commit_timestamp,'yyyy-mm-dd hh24:mi:ss'),table_space,username,sql_redo,sql_undo,session_info from v$logmnr_contents where username='HR';

6、可利用flashback配合scn後查尋特定表格資料
SQL> select * from hr.testflash as of scn 493636;
-- 由flashback裡查尋到的資料
JOB_ID     JOB_TITLE                           MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES    President                                20000      40000
FI_ACCOUNT Accountant                                4200       9000
AC_MGR     Accounting Manager                        8200      16000
AC_ACCOUNT Public Accountant                         4200       9000
SA_MAN     Sales Manager                            10000      20000
SA_REP     Sales Representative                      6000      12000
PU_MAN     Purchasing Manager                        8000      15000
PU_CLERK   Purchasing Clerk                          2500       5500
ST_MAN     Stock Manager                             5500       8500
ST_CLERK   Stock Clerk                               2000       5000
SH_CLERK   Shipping Clerk                            2500       5500

JOB_ID     JOB_TITLE                           MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
IT_PROG    Programmer                                4000      10000
MK_MAN     Marketing Manager                         9000      15000
MK_REP     Marketing Representative                  4000       9000
HR_REP     Human Resources Representative            4000       9000
PR_REP     Public Relations Representative           4500      10500

16 rows selected.

SQL> select * from hr.testflash;
--現在資料庫裡的資料
JOB_ID     JOB_TITLE                           MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
FI_ACCOUNT Accountant                                4200       9000
AC_MGR     Accounting Manager                        8200      16000
AC_ACCOUNT Public Accountant                         4200       9000
SA_MAN     Sales Manager                            10000      20000
SA_REP     Sales Representative                      6000      12000
PU_MAN     Purchasing Manager                        8000      15000
PU_CLERK   Purchasing Clerk                          2500       5500
ST_MAN     Stock Manager                             5500       8500
ST_CLERK   Stock Clerk                               2000       5000
SH_CLERK   Shipping Clerk                            2500       5500
IT_PROG    Programmer                                4000      10000

JOB_ID     JOB_TITLE                           MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
MK_MAN     Marketing Manager                         9000      15000
MK_REP     Marketing Representative                  4000       9000
HR_REP     Human Resources Representative            4000       9000
PR_REP     Public Relations Representative           4500      10500

15 rows selected.

心得:
1、9i的flashback有每5分鍾才會同步一次scn,所以當超過這次的scn到下次新的scn產生之前,查尋flashbck是找不到資料(10g已有改進),如要精準的話,最好用scn來回覆資料
2、要使用flashback的話不一定要開起archived mode,不過你就只能查redo log file裡的資料了,不過如很快的redo log都交換過一圈後,你也查不到之前的資料了哦
3、重要的參數有undo_management、undo_retention、undo_tablespace,其中undo_retention的 單位為秒,預設值為3小時,但如交易很多時,也會有可能把flashback裡的資料給清除。因為flashback的運作是先進先出,當空間不夠時就會 把舊的移除了,所以出問題時要快點處理。
4、如真的超過flashback的時間的話,就只好把logminer查出來的sql_undo的資料,配合spool匯成一個檔案,再進行DML了
5、如使用PL/SQL Developer操作時發生ORA-07445:exception encountered的話,這是PL/SQL Developer的問題,請改用sqlplus或別的軟體試看看了
6、只要平台、字元編碼都相同,是可以由相同的字典檔進行分析
7、如有新的table加入後,字典要重新建立,不然無法新加的物件無法進行反解譯

Posted by my_work at 樂多Roodo! │21:08 │回應(0)引用(0)DB
樂多分類:網路/3C 共同主題:Oracle 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/3468629