EXP/IMP 學習(五)
2.2 高階選項
1. Conventional Path Load 與 Direct Path Load
Conventional-path Load:
透過常規通道方式上載。
特點:commit, always gen redo logs, enforce all constraints, fire insert triggers, can load into cluster, other user can make change
rows:每次提交的記錄數
bindsize:每次提交記錄的緩衝區
readsize:與 bindsize 成對使用,其中較小者會自動調整到較大者
sqlldr 先計算單條記錄長度,乘以 rows,如小於 bindsize,不會試圖擴張 rows以填充 bindsize;如超出,則以 bindsize 為準。 命令為:
$ sqlldr dbuser/oracle control=emp.ctl log=emp.log rows=10000 bindsize=8192000
Direct-Path Load:
透過直通方式上載,可以跳過資料庫的相關邏輯,不進行 SQL解析,而直接將數 據匯入到資料檔案中。
特點:save, conditionly gen redo logs, enforce PK UK NN, not fire triggers, can not load into cluster, other user can not make change命令為:
$ sqlldr dbuser/oracle control=emp.ctl log=emp.log direct=true
2. SPOOL匯出文字資料方法
匯入的資料檔案可以用 SPOOL匯出文字資料方法生成。
SQL*PLUS環境設定
SET NEWPAGE NONE HEADING OFF SPACE 0 PAGESIZE 0
SET TRIMOUT ON TRIMSPOOL ON LINESIZE 2500
注:LINESIZE 要稍微設定大些,免得資料被截斷,它應和相應的 TRIMSPOOL結合使用防止匯出的文字有太多的尾部空格。
但是如果 LINESIZE 設定太大,會大大降低匯出的速度,另外在 WINDOWS下導 出最好不要用 PLSQL匯出,速度比較慢,直接用 COMMEND 下的 SQLPLUS命令最 小化視窗執行。對於欄位內包含很多回車換行符的應該給與過濾,形成比較規矩的文字 檔案。
通常情況下,我們使用 SPOOL方法,將資料庫中的表匯出為文字檔案,如下述:
set trimspool on
set linesize 120 pagesize 2000 newpage 1 heading off term off spool 路徑+檔名
select col1||','||col2||','||col3||','||col4||'..' from tablename;
2.3 指令碼
1. 將表中資料記錄匯出為欄位值用分隔符'|'分開的.dat檔案
#!/bin/ksh
##################################################################
## 名稱: unloadtable
## 功能: 本 shell 用於將表中資料記錄匯出
## 匯出為欄位值用分隔符'|'分開的.dat檔案
## 編者:
## 日期: 2006.03.18
##################################################################
if [ $# -ne 3 ]
then
echo "usage:unloadtable tablename username password."
exit 0
fi
##準備工作
echo "set heading off " >/tmp/$1.col
echo "set pagesize 0" >>/tmp/$1.col
echo "set linesize 800 " >>/tmp/$1.col
echo "set feedback off " >>/tmp/$1.col
echo "set tab off " >>/tmp/$1.col
echo "select column_name||',' from user_tab_columns where lower(table_name)='$1' order by
column_id; " >> /tmp/$1.col
##產生 select 語句
echo "set heading off " >/tmp/$1.sel
echo "set pagesize 0" >>/tmp/$1.sel
echo "set linesize 800 " >>/tmp/$1.sel
echo "set feedback off " >>/tmp/$1.sel
echo "set tab off " >>/tmp/$1.sel
echo "select " >>/tmp/$1.sel
echo `sqlplus -s $2/$3 >>/tmp/$1.sel
##生成 dat檔案
#echo "from $1;\n/" >>/tmp/$1.sel 由於 / 導致多執行一次 select
echo "from $1;\n" >>/tmp/$1.sel
sqlplus -s $2/$3 < /tmp/$1.sel >$1_tmp.dat
#awk '{if(FNR!=1) print $0}' $1_tmp.dat >$1.dat FNR 選項使得第一條記錄選不出
awk '{print $0}' $1_tmp.dat >$1.dat
rm -f $1_tmp.dat
2. 將資料匯入到相應表中
#!/bin/ksh
##################################################################
## 名稱:loadtable
## 功能:本 shell 用於將已經準備好的.dat資料檔案匯入相應的表中
## .dat 檔案各個欄位值用分隔符'|'分開。
## 編者:
## 日期: 2006.03.18
##################################################################
if [ $# -ne 3 ]
then
echo "usage:loadtable tablename username password."
exit 0
fi
##準備工作
echo "set heading off " >/tmp/$1.colsql
echo "set pagesize 0" >>/tmp/$1.colsql
echo "set linesize 800 " >>/tmp/$1.colsql
echo "set feedback off " >>/tmp/$1.colsql
echo "set tab off " >>/tmp/$1.colsql
echo "select column_name||',' from user_tab_columns where lower(table_name)='$1' order by
column_id; " >> /tmp/$1.colsql
##產生 ctl檔案
echo "load data" >/tmp/$1.ctl
echo "infile *" >>/tmp/$1.ctl
echo "into table $1" >>/tmp/$1.ctl
echo "fields terminated by '|'" >>/tmp/$1.ctl
echo `sqlplus -s $2/$3 < /tmp/$1.colsql` |sed "s/,$/)/g" |sed "s/^/(/g" >>/tmp/$1.ctl
##開始匯入資料
echo "truncate table $1;" >/tmp/$1.sql
sqlplus $2/$3 < /tmp/$1.sql
sqlldr $2/$3 data=$1.dat control=/tmp/$1.ctl log=/tmp/$1.log
使用者管理的備份與恢復也稱 OS物理備份,是指透過資料庫命令設定資料庫為備份 狀態,然後用作業系統命令,複製需要備份或恢復的檔案。這種備份與恢復需要使用者的 參與手工或自動完成。
對於使用 OS複製備份的資料檔案,可以使用 DBVERTIFY 進行檢驗。DBVERTIFY
是一個外部工具,主要用於校驗資料檔案或備份的資料檔案的資料塊是否正確。
例:dbv /u01/oradata/oracle/users01.dbf BLOCKSIZE=8192
引數說明:
關鍵字 說明 (預設)
FILE 要檢驗的檔案 (NONE)
START 起始塊 (檔案的第一個塊)
END 結束塊 (檔案的最後一個塊)
BLOCKSIZE 邏輯塊大小 (2048)
LOGFILE 輸出日誌 (NONE)
FEEDBACK 顯示程式 (0)
Recover 還可以進行測試,檢測恢復的錯誤,錯誤資訊記載在 alert_SID.log 檔案
中,透過測試,我們可以知道該恢復操作是否能正常完成。
SQL> RECOVER TABLESPACE sales TEST;
SQL> RECOVER DATABASE UNTIL CANCEL TEST;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-666326/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 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(筆記)筆記