Linux下執行資料泵expdp和impdp命令,字元轉義案例兩則
環境背景
因為工作需要,需要使用資料泵將測試環境資料按照指定日期匯出(透過日期過濾掉部分歷史資料),匯出過程中遇到了字元轉義的問題。這裡專門挑選2個案例,在測試環境進行測試。另外,還對兩種案例使用parfile的方式進行測試。
本次測試選擇的作業系統版本為RedHat6.5,Oracle資料庫版本為11.2.0.4,資料庫為單機單例項檔案系統部署。
案例簡介
案例一:
過濾子句的字元轉義,如INCLUDE,EXCLUDE,QUERY等,這裡選擇QUERY子句進行測試。這也是實際開發測試過程中使用頻率較高的功能。
案例二:
測試表名大小寫敏感,且使用特殊符號“$”。
案例一:資料過濾子句轉義
對於本案例,選擇了對使用parfile和不使用parfile兩個場景的測試。
場景1:直接在伺服器端執行命令,不使用parfile
(1)按照expdp命令規範設計匯出語句,原句(無轉義)執行情況如下
(2)根據上述錯誤資訊,對QUERY子句中的左右括號加上跳脫字元,並執行
(3)這個錯誤有點莫名其妙,猜測是雙引號的問題,對QUERY子句中的雙引號加上跳脫字元,並執行
(4)根據新的錯誤資訊,提示錯誤的子句前方有個“<”,猜測是大於小於號都需要轉義,修改後執行
(5)看著有點像那麼回事了,不過還是存在錯誤。看報錯資訊,只能是yyyy-mm-dd兩側的單引號有問題了,這次對QUERY子句中所有單引號加上‘\’並執行
執行很順利。回顧一下,上文一共對括號、單引號、雙引號、大於號、小於號等特殊字元做了轉義。
場景2:在伺服器端建立parfile檔案並執行expdp命令
(1)建立parfile檔案,並去掉所有引數中的跳脫字元
(2)使用parfile引數匯出
執行順利完成。
案例二:大小寫敏感且帶有特殊符號'$'的轉義
對於本案例,選擇了對使用parfile和不使用parfile兩個場景的測試。
場景1:直接在伺服器端執行命令,不使用parfile
(1)建立測試表,名稱小寫且帶有'$'字元
create table cams_core."test$escape"(id number,name varchar2(20));
(2)按照命令格式拼接匯出語句執行報錯
(3)顯然Linux將$escape解析成為環境變數,但變數是個空值,所以提示ORA-39166和ORA-31655的錯誤。這裡還測試了多組值,無一例外全部報錯。
tables=test\$escape
tables="test$escape"
tables='"test$escape"'
tables=\'\"test$escape\"\'
(4)經過多次驗證,正確的寫法為tables='\"test$escape\"'
執行順利完成。回顧一下,這裡對tables引數使用了單引號包含雙引號的方式,以保證系統能將"test$escape"解析成為小寫字母和'$'混合的字串。同時,按照Linux的要求對雙引號增加轉義。
場景2:在伺服器端建立parfile檔案並執行expdp命令
(1)建立parfile檔案,並去掉所有引數中的跳脫字元
(2)使用parfile引數匯出
執行順利完成。
總結分析
(1)在Linux下執行expdp或者impdp命令且帶有INCLUDE,EXCLUDE,QUERY等子句時,需要對括號、單引號、雙引號、大於號、小於號等特殊字元做轉義。
(2)在Linux下執行expdp或者impdp命令,如果需要匯出名字較為特殊的表,可以使用單引號包含雙引號的方式匯出,但需要對雙引號做轉義。
(3)使用parfile可以避免轉義的問題,減少很多不必要的麻煩。另外,還可以複用parfile,減少資料泵敲命令的時間。
各位讀者朋友也可關注作者微信公眾號“IT技術佳餚”,與作者交流。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31394774/viewspace-2220321/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- EXPDP 和 IMPDP 資料泵的使用_1
- EXPDP 和 IMPDP 資料泵的使用_2
- 資料泵基礎(impdp/expdp)
- 資料泵datapump(expdp/impdp)的parfile用法,避免跳脫字元字元
- expdp impdp Data Pump(資料泵)使用解析
- 【Datapump】Oracle資料泵遷移資料命令參考(expdp/impdp說明)Oracle
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- Oracle資料泵匯出匯入(expdp/impdp)Oracle
- 按計劃瞭解資料泵expdp/impdp
- 使用資料泵(expdp、impdp)遷移資料庫流程資料庫
- Oracle使用資料泵 (expdp/impdp)實施遷移Oracle
- 資料庫泵(expdp/impdp)匯入匯出流程資料庫
- 10g 資料泵(Data Dump) -- EXPDP & IMPDP [zt]
- 使用impdp,expdp資料泵進入海量資料遷移
- 10G資料泵載入命令expdp/impdp的引數說明
- 【impdp】IMPDP中的TRANSFORM引數--【資料泵】EXPDP匯出表結構(真實案例)後傳ORM
- oracle資料泵備份(Expdp命令)Oracle
- 資料泵引數檔案用於執行資料泵命令
- 資料泵 impdp 操作
- 資料泵(expdp,impdp)高版本匯入低版本操作例項
- 【資料泵】EXPDP匯出表結構(真實案例)
- Impdp資料泵匯入
- 終止imp/exp和expdp/impdp程式執行的方法
- Linux 平臺下 Oracle 資料泵備份(expdp) SHELL 指令碼LinuxOracle指令碼
- expdp impdp 資料庫匯入匯出命令詳解資料庫
- expdp 和impdp的筆記[轉帖]筆記
- 使用資料泵impdp匯入資料
- expdp impdp 使用命令解析
- oracle資料庫的impdp,expdpOracle資料庫
- EXPDP資料泵使用方法
- 針對資料泵匯出 (expdp) 和匯入 (impdp)工具效能降低問題的檢查表
- 【EXPDP/IMPDP】使用 EXPDP/IMPDP工具“模糊”匯出和匯入
- 一次expdp/impdp遷移案例
- Oracle12c中資料泵新特性之功能增強(expdp, impdp)Oracle
- oracle EXPDP/IMPDP 常用命令Oracle
- 使用expdp、impdp遷移資料庫資料庫
- Oracle10g 資料泵匯出命令impdp 使用總結Oracle
- Oracle expdp/impdp匯出匯入命令及資料庫備份Oracle資料庫