EXP/IMP 學習(六)
3.1 相關設定
3.1.1 設定ARCHIVELOG與NONARCHIVELOG模式
重做日誌組是以迴圈方式使用的,重做日誌組會被覆蓋重做日誌資訊就會丟失。為
了儲存歷史以來的重做日誌,資料庫可以執行在日誌歸檔模式下(archivelog mode)。 在日誌歸檔模式下,當日志組撤換到下一個組時後臺程式 ARCn 將上一個日誌檔案復
制到另一個地方(oracle 10g 使用快速恢復區會歸檔到該區)儲存。資料庫預設為非歸檔
模式(noarchivelog mode)。
設定 ARCHIVELOG模式步驟:
1. 關閉資料庫,備份已有的資料,改變資料庫的執行方式是對資料庫的重要改動,所
以要對資料庫做備份,對可能出現的問題作出保護。
2. 修改初試化引數: 使用 PFILE,修改初始化引數檔案 init[SID].ora log_archive_start=true #啟動自動歸檔 log_archive_format=ARC%T%S.arc #歸檔檔案格式 log_archive_dest=/arch12/arch #歸檔路徑
3. 啟動 Instance 到 Mount狀態,即載入資料庫但不開啟資料庫:
SQL > startup mount;
4. 發出修改命令
SQL > alter database archivelog; SQL > alter database open;
設定 NONARCHIVELOG模式步驟同上,只需修改相應引數值即可。
3.1.2 LOGGING 與 NOLOGGING
表空間、表、索引、分割槽可以設定為 NOLOGGING,用於快速裝入資料(Direct Load)。 在插入資料時只寫入最小的重做日誌和回滾資料。在歸檔資料庫模式下,執行 Direct Load 操作後應立即進行備份,否則不能使用之前的備份進行恢復。另外,使用者可以設定資料庫的 強制日誌模式,使用所有操作都記入日誌。
LOGGING 與 NOLOGGING 的區別:
LOGGING NOLOGGING
所有的更改寫入 REDO 最小寫入 REDO LOG
從最近備份中完全恢復 不能從最近備份中完全恢復
不需要增加備份 需要增加備份
NOLOGGING 的操作:
CREATE TABLE … NOLOGGING AS SELECT 語句
INSERT /*+APPEND*/ INTO NOLOGGING SELECT 語句
INSERT /*+ PARALLEL(,
SQL*LOADER 的 DIRECT 方法
例:
SQL>CREATE TABLE emp1 NOLOGGING AS SELECT * FROM emp; SQL>SELECT name,unrecoverable_time FROM V$DATAFILE;
SQL>INSERT /*+ APPEND */ INTO emp1 NOLOGGING SELECT* * FROM emp; SQL>SELECT name,unrecoverable_time FROM V$DATAFILE;
SQL>ALTER DATABASE NO FORCE LOGGING;
3.1.3 歸檔路徑
在歸檔模式下進行自動歸檔時,或者在恢復時設定歸檔所在的位置,需要設定歸檔路徑
初始化引數:
LOG_ARCHIVE_DEST_n=”LOCATION=path MANDATORY|OPTIONAL REOPEN=n”
LOG_ARCHIVE_DEST_n=”SERVICE=standby MANDATORY|OPTIONAL REOPEN=n
3.2 NONARCHIVELOG 模式
3.2.1 離線冷備與恢復
冷備份發生在資料庫已經正常關閉的情況下,當正常關閉時會提供給我們一個完整的數 據庫。冷備份是將關鍵性檔案複製到另外位置的一種說法。對於備份 Oracle 資訊而言,冷 備份是最快和最安全的方法。
冷備份的優點:
1.是非常快速的備份方法(只需複製檔案)
2.容易歸檔(簡單複製即可)
3.容易恢復到某個時間點上(只需將檔案再複製回去)
4.能與歸檔方法相結合,作資料庫“最新狀態”的恢復。
5.低度維護,高度安全。
冷備份的不足:
1.單獨使用時,只能提供到“某一時間點上”的恢復。
2.在實施備份的全過程中,資料庫必須要作備份而不能作其它工作。也就是說,在
冷備份過程中,資料庫必須是關閉狀態。
3.若磁碟空間有限,只能複製到磁帶等其它外部儲存裝置上,速度會很慢。
4.不能按表或按使用者恢復。
如果可能的話(主要看效率),應將資訊備份到磁碟上,然後啟動資料庫(使使用者可以 工作)並將所備份的資訊複製到磁帶上(複製的同時,資料庫也可以工作)。冷備份中必須 複製的檔案包括:
1.所有資料檔案
2.所有控制檔案
3.所有聯機 REDO LOG 檔案
4.引數化引數 Init.ora 檔案(可選)。
3.2.2 案例
1.9i 離線冷備/恢復的例子:
(1) 關閉資料庫
$ sqlplus /nolog
SQL> connect /as sysdba
SQL> shutdown normal;
(2) 用複製命令備份/恢復全部的時間檔案、重做日誌檔案、控制檔案、初始化引數 檔案
SQL > host cp xx xx;
可以使用以下冷備指令碼:
#!/bin/bash
##############################################################
## 名稱: coldback_gen.sh
## 功能: shell 用於生成冷備份指令碼, 進行冷備份同時生成相應的恢復命令
## 可以修改後在生成後立即執行
##############################################################
##設定變數
##設定臨時檔名
tempsql=./backup.sql
##設定備份檔案存放路徑
backdate=`date -u +%Y%m%d`
backupdir=/u04/oracle/coldback/$backdate
mkdir $backupdir
##設定備份指令碼檔名
backupsh=$backupdir/coldback.sh
rcvrsh=$backupdir/recovery.sh
echo "正在生成冷備份指令碼[$backupsh]..."
##檢查 ORACLE資料庫是否啟動
oraisrun=`ps -ef|grep -c ora_`
if [ "$oraisrun" = "0" ] || [ "$oraisrun" = "1" ]
then
echo "ORACLE 資料庫尚未啟動,請先啟動 ORACLE"
echo ""
exit
fi
##準備工作
echo "set heading off " > $tempsql
echo "set feedback off " >>$tempsql
echo "set tab off " >>$tempsql
echo "set verify off " >>$tempsql
echo "set pagesize 0" >>$tempsql
echo "set linesize 800 " >>$tempsql
echo "select '#!/bin/bash' from dual;" >> $tempsql
echo "select '' from dual;" >> $tempsql
echo "select '## 備份指令碼生成時間: " `date +%Y 年%m月%d日-%H:%M:%S` "'
from dual;" >> $tempsql
echo "select '## 備份目的路徑: $backupdir' from dual; " >> $tempsql
echo "select '' from dual; " >> $tempsql
echo ""
echo "select 'echo ''開始進行離線冷備...''' from dual; " >> $tempsql
echo "select 'echo ''備份目的路徑: $backupdir ''' from dual; " >> $tempsql
##這裡不直接關閉資料庫,提示使用者手工關閉為好 如果需要直接關閉,請修改
echo "select 'orarun='||'\`'||'ps -ef|grep -c ora_'||'\`' from dual;" >>$tempsql
echo "select 'if [ "\$orarun" != "0" ] && [ "\$orarun" != "1" ] ' from dual;" >>$tempsql
echo "select 'then' from dual; " >>$tempsql
echo "select 'echo '' '' ' from dual;" >>$tempsql
echo "select 'echo ''ORACLE 資料庫已啟動,請先關閉 ORACLE 資料庫'' ' from dual;
" >>$tempsql
echo "select 'echo '' '' ' from dual;" >>$tempsql
echo "select 'exit' from dual; " >>$tempsql
echo "select 'fi' from dual; " >>$tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''正在備份控制檔案...''' from dual; " >> $tempsql
echo "select 'cp ' ||name||' $backupdir' from v\$controlfile; " >> $tempsql
echo "select 'echo ''控制檔案備份完畢!''' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''正在備份資料檔案...''' from dual; " >> $tempsql
echo "select 'cp ' ||name||' $backupdir' from v\$datafile; " >> $tempsql
echo "select 'echo ''資料檔案備份完畢!''' from dual; " >> $tempsql
echo "select 'echo ''正在備份聯機日誌...''' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'cp '||member||' $backupdir' from v\$logfile; " >> $tempsql
echo "select 'echo ''聯機日誌備份完畢!''' from dual;" >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''離線冷備完畢!''' from dual;" >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
##生成冷備份執行指令碼
sqlplus -s ' / as sysdba' < $tempsql > $backupsh
rm -f $tempsql
chmod +x $backupsh
cp $backupsh .
echo "正在生成冷備對應的恢復指令碼[$rcvrsh]..."
##準備工作
echo "set heading off " > $tempsql
echo "set feedback off " >>$tempsql
echo "set tab off " >>$tempsql
echo "set verify off " >>$tempsql
echo "set pagesize 0" >>$tempsql
echo "set linesize 800 " >>$tempsql
echo "select '#!/bin/bash' from dual;" >> $tempsql
echo "select '' from dual;" >> $tempsql
echo "select '## 恢復指令碼生成時間: " `date +%Y 年%m月%d日-%H:%M:%S` "'
from dual;" >> $tempsql
echo "select '## 恢復檔案所在路徑: $backupdir' from dual; " >> $tempsql
echo "select '' from dual; " >> $tempsql
echo ""
echo "select 'echo ''開始進行檔案的複製恢復...''' from dual; " >> $tempsql
echo "select 'echo ''恢復檔案所在的路徑: $backupdir ''' from dual; " >> $tempsql
##這裡不直接關閉資料庫,提示使用者手工關閉為好 如果需要直接關閉,請修改
echo "select 'orarun='||'\`'||'ps -ef|grep -c ora_'||'\`' from dual;" >>$tempsql
echo "select 'if [ "\$orarun" != "0" ] && [ "\$orarun" != "1" ] ' from dual;" >>$tempsql
echo "select 'then' from dual; " >>$tempsql
echo "select 'echo '' '' ' from dual;" >>$tempsql
echo "select 'echo ''ORACLE 資料庫已啟動,請先關閉 ORACLE 資料庫'' ' from dual;
" >>$tempsql
echo "select 'echo '' '' ' from dual;" >>$tempsql
echo "select 'exit' from dual; " >>$tempsql
echo "select 'fi' from dual; " >>$tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''正在恢復控制檔案...''' from dual; " >> $tempsql
echo "select 'cp '||'$backupdir'||'/'||substr(name,instr(name,'/',-1)+1,
length(name)-instr(name,'/',-1) )||' '||name from v\$controlfile; " >> $tempsql
echo "select 'echo ''控制檔案恢復完畢!''' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''正在恢復資料檔案...''' from dual; " >> $tempsql
echo "select 'cp '||'$backupdir'||'/'||substr(name,instr(name,'/',-1)+1,
length(name)-instr(name,'/',-1) )||' '||name from v\$datafile; " >> $tempsql
echo "select 'echo ''資料檔案恢復完畢!''' from dual; " >> $tempsql
echo "select 'echo ''正在恢復聯機日誌...''' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'cp '||'$backupdir'||'/'||substr(member,instr(member,'/',-1)+1,
length(member)-instr(member,'/',-1) )||' '||member from v\$logfile; " >> $tempsql
echo "select 'echo ''聯機日誌恢復完畢!''' from dual;" >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''離線冷備恢復完畢!''' from dual;" >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
##生成冷備恢復的執行指令碼
sqlplus -s ' / as sysdba' < $tempsql > $rcvrsh
rm -f $tempsql
chmod +x $rcvrsh
cp $rcvrsh .
echo "生成離線冷備備份與恢復指令碼完畢!"
echo "請檢查指令碼檔案: [$backupsh]"
echo " [$rcvrsh]"
echo ""
#如果需要生成後立即執行備份,可增加關閉資料庫的操作,然後將以一幾行的注
釋#去掉即可
#./$backupsh
#echo "備份執行完畢,請檢查!"
#echo ""
(3) 重啟 Oracle 資料庫
$ sqlplus /nolog
SQL> connect /as sysdba
SQL> startup
2.如果自從上次離線冷備後,資料檔案錯誤,聯機日誌沒有被覆蓋,可模擬不完全恢復。
1. SQL> shutdown;
2. $ cp .. ..; // 只恢復出錯的資料檔案
3. SQL> startup mount;
4. SQL> recover database;
5. SQL> alter database open;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-666481/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- EXP/IMP 學習(五)
- EXP/IMP 學習(四)
- EXP/IMP 學習(三)
- EXP/IMP 學習(二)
- EXP/IMP 學習(一)
- 關於exp/imp的總結學習
- exp/imp工具
- Oracle imp/expOracle
- 【EXP/IMP】使用EXP /IMP工具“模糊”匯出和匯入
- oracle exp和impOracle
- oracle imp和expOracle
- exp imp資料
- oracle exp imp 用法Oracle
- EXP&IMP PIPE
- 【exp/imp不同版本】Oracle不同版本的exp/imp使用注意事項Oracle
- exp和imp詳解
- 淺談exp/imp(上)
- 淺談exp/imp(下)
- exp/imp命令詳解
- exp/imp工具的使用
- IMP和EXP筆記筆記
- exp_imp實戰
- Oracle的exp/imp詳解Oracle
- exp,imp 遷移資料
- imp/exp資料遷移
- oracle exp_imp小記Oracle
- 大表exp/imp遷移
- imp/exp命令 詳解(1)
- 理解exp, imp 使用direct=y 及imp commit=yMIT
- ORACLE exp/imp匯入報錯IMP-00009&IMP-00028&IMP-00015Oracle
- exp,imp相關工具說明
- RMAN與exp / imp的區別
- expdp\impdp及exp\imp 詳解
- Oracle Exp/Imp常見問題Oracle
- 轉:Exp/Imp工具效能調優
- 老外的EXP&IMP總結
- exp和imp的詳細操作
- 24.EXP和IMP(筆記)筆記