1. 程式人生 > 實用技巧 >Oracle備份審計表SYS.AUD$和SYS.FGA_LOG$

Oracle備份審計表SYS.AUD$和SYS.FGA_LOG$

ORACLE的審計表不可以使用expdp和impdp匯出和匯入,如果使用,會報如下錯誤:

需要使用exp和imp進行匯出和匯出

匯出語句:

exp " '/ as sysdba' "  file=/Data/expdp/AUD.dmp log=/Data/expdp/AUD.log tables=SYS.AUD\$

帶匯出條件的exp語句:

exp " '/ as sysdba' " file=/Data/expdp/FGA_LOG_88.dmp log=/Data/expdp/FGA_LOG_88.log tables=SYS.FGA_LOG\$ query=\"where FROM_TZ\(ntimestamp\#, \'00:00\'\) AT LOCAL BETWEEN TO_TIMESTAMP\(TO_CHAR\(SYSDATE - 123,\'YYYYMMDD\'\) \|\| \'073000000\',\'YYYYMMDDHH24MISSFF\'\) AND TO_TIMESTAMP\(TO_CHAR\(SYSDATE,\'YYYYMMDD\'\) \|\| \'073000000\',\'YYYYMMDDHH24MISSFF\'\)\"

1.FROM_TZ:將ntimestamp#欄位的timestamp型別轉換為帶時區的,市區為UTC(世界標準時間),之後再AT LOCAL轉換為本地時間。ntimestamp#存入的不是本地時間,是UTC時間

2.to_timestamp:第一個引數是字串型別的,如果直接傳入日期型別,那麼oracle會根據NLS_DATE_FORMAT進行隱式轉換,所以需要使用to_char提前處理。

3.上述匯出語句會有警告,需要在匯出前設定一下NLS_LANG環境變數

解決方法

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

匯入命令:

imp " '/ as sysdba' 
" file=/Data/expdp/FGA_LOG_88.dmp log=/Data/expdp/FGA_LOG_250.log fromuser=sys touser=monkey data_only=y