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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料泵datapump(expdp/impdp)的parfile用法,避免跳脫字元字元
- 【Datapump】Oracle資料泵遷移資料命令參考(expdp/impdp說明)Oracle
- Oracle資料泵匯出匯入(expdp/impdp)Oracle
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- 使用資料泵(expdp、impdp)遷移資料庫流程資料庫
- 使用impdp,expdp資料泵進入海量資料遷移
- 【資料泵】EXPDP匯出表結構(真實案例)
- oracle資料庫的impdp,expdpOracle資料庫
- oracle10g expdp資料泵的bug,按schema匯出,匯入impdp時無jobOracle
- Oracle expdp資料泵遠端匯出Oracle
- 折行轉義字元字元
- impdp和expdp用法及引數介紹
- Oracle資料庫的邏輯備份工具-expdp資料泵Oracle資料庫
- 在Linux命令列中進行大小寫字元轉換Linux命令列字元
- 通過dblink,資料泵expdp遠端跨版本導庫
- ORACLE EXPDP IMPDP 的停止和啟動及監控Oracle
- [20200620]expdp impdp exclude引數.txt
- expdp/impdp變慢 (Doc ID 2469587.1)
- 【Data Pump】expdp/impdp Job基本管理
- Linux命令列:對內容進行大小寫字元轉換 Linux命令列字元
- js做資料的轉義字元替換JS字元
- Oracle 12c expdp和impdp匯出匯入表Oracle
- 轉義字元字元
- 資料泵expdp匯出遇到ORA-01555和ORA-22924問題的分析和處理
- expdp/impdp 詳細引數解釋
- ORACLE 資料泵impdp匯入報錯之ORA-31693 ORA-04098Oracle
- python中使用subprocess批量執行linux下命令PythonLinux
- Linux下快速執行歷史命令的方法Linux
- python中使用subprocess批次執行linux下命令PythonLinux
- Python-網頁轉義字元及正則全文匹配Python網頁字元
- oracle dblink用法總結和expdp和impdp利用dblink倒入匯出到本地Oracle
- 【伺服器資料恢復】linux下執行FSCK後無法掛載的資料恢復案例伺服器資料恢復Linux
- Shell命令列中的特殊字元及其轉義(去除特殊含義)命令列字元
- oracle轉義字元Oracle字元
- 史上最全Oracle資料泵常用命令Oracle
- 收集 Linux 命令列執行的命令Linux命令列
- 兩行命令解決 Windows 下 Homestead 執行緩慢的問題Windows
- zsh 命令在 alias 中如何轉義 ' 字元(單引號)字元