EXP/IMP 學習(五)

楊奇龍發表於2010-06-25

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/,如需轉載,請註明出處,否則將追究法律責任。