資料磊原理和工具
今天個人使用expdp和impdp弄了幾個小時,終於整理出大概,對於資料磊工具的原理整理出下面的心得。
expdp/impdp是透過API呼叫,把傳統的exp和imp互動模式的操作轉化為oracle內部的job來完成,所以可以實現任務的中止和重啟動.
oracle10g中出現了資料磊,資料磊的所有工作都由資料庫例項來完成,資料庫可以並行來處理這些工作。
可以建立多個資料磊程式來讀寫正在匯入的資料,也可以建立並行I/O伺服器程式來讀取資料,從而exp和imp的單程式瓶頸得到解決
expdp impdp和exp imp的不同點除了可控制job還有侷限於資料磊工具必須在伺服器端執行。因為是一種資料庫內部的job任務,而且可調控的重啟動job任務,加上並行處理的優勢往往這些是我們選擇expdp和impdp最吸引人的地方
在os介面下expdp -help和imp exp一樣oracle軟體中存在參考文件。
其中就我們使用過程中於expdp與exp不同的就是directory引數,directory字典引數是什麼了,oracle文件的解釋是供轉儲檔案和日誌檔案的使用的目錄物件
有過exp和imp使用經驗的朋友大概能摸清個大概了
exp ashuang/ashuang file=d:test.dmp log=d:test.log full=y
上面的file也就是轉儲檔案的目錄,log也就是日誌檔案的目錄
expdp資料磊把directory引數放dmp轉儲檔案和log檔案了,資料磊由於在伺服器端工作,匯出檔案需要寫到server端,directory就是存放的位置了
我們可以建立一個directory
create or replace directory expdir_test as 'd:oracleproduct10.2.0expdir'
然後檢視dba_directories
select * from dba_directories where directory_name='EXPDIR'
owner directory_name direcort_path
SYS ORACLE_OCM_CONFIG_DIR D:oracleproduct10.2.0db_1ccrstate
其中oracle預設的儲存了一個expdp的位置也就是directory_name='DATA_PUMP_DIR'
select * from dba_directories where directory_name='DATA_PUMP_DIR
owner directory_name direcort_path
SYS DATA_PUMP_DIR D:oracleproduct10.2.0admintestdpdump
不設定directory時,oracle將把轉儲檔案和日誌檔案放置在data_pump_dir目錄下
如同exp和imp一樣使用資料磊工具也需要授權,由於dmp和log需要放在directory目錄下涉及到directory expdir字典進行讀寫
grant read,write on directory expdir to ashuang
如果此時不授予read,write on directory directory_name使用expdp工具無法開啟日誌檔案進行讀寫到directory目錄下,當然也無法繼續expdp當然dba等role是預設的封裝在role中了。
準備工作完畢後先在開始試試expdp吧
os環境下:expdp ashuang/ashuang directory=expdir dumpfile=ashuang.dmp logfile=ashuang.log
匯出成功,注意上面的dumpfile和logfile不要加路徑,因為oracle會存放在directory引數目錄下,加路徑oracle反而會報錯
上面不是提到expdp和impdp是可以oracle內部可以調控的任務job,可以讓其重啟動和停止。
在資料庫內部,重啟動是需要一個資料結構MT(Master Table 任務主表),該表用於記錄匯出和匯入的進度。
expdp幫助文件中最後有一些互動模式的引數
continue_client 返回到記錄模式,如果系統處於空閒狀態,將重新啟動作業
start_job 啟動恢復作業
status 作業監視狀態
stop_job 順序關閉執行的作業並退出客戶機,stop_job=immediate將立即關閉資料類作業
首先啟動expdp執行匯出操作
expdp ashuang/ashuang directory=expdir dumpfile=ashuang.dmp full=y job_name=expfull
job_name引數在幫助文件中說明是要建立匯出作業的名稱,字面上就是job的name,好讓重啟動expdp任務時透過這個來識別吧
其中這個job_name不設定,oracle也會內部建立一個name,但是具體的name是多少,個人查過資料但是生成的table_name確實查不出來。
我們crtl+c退出當前互動模式,退出之後,匯出操作不會停止不同於exp,一旦由於網路 個人等因素退出就能基本忠告你這些匯出失敗
export> status 列出了一些schemas模式 並行度等資訊
此時oracle內部還是在進行匯出工作,因為job還存在,所以expdp依job存在而存在
export>stop_job 停止該任務
oracle有個互動的工作詢問是否停止該作業,需要我們不停的確認y然後停止,如果確認不成功oracle則還是要繼續該job,
export>start_job重新啟動匯出
關於上面的停止任務和開啟任務,當我們下次利用attach來繼續該job_name時,如果關於attach的job已經結束此時我們無法用attach來連線job_name任務,因為此job_name的job已經結束了。記得上面的提到的MT任務主表嗎,job_name是該次expdp的job的名稱,在資料庫中也可以查到匯出任務所建立的MT表
select * from expfull
是可以查到存在此任務主表的。
接下來我們透過attach這個引數再次連線到該任務
os環境下 expdp ashuang/ashuang attach=expfull
用attach引數連線到沒有完成的job_name,如果job已經完成了,該任務主表expfull也將隨job的執行一起結束
export>continue_client
直接在互動模式下啟動continue_client來啟動匯出任務
MT表中記錄了匯出過程的詳細資訊,包括任務設定,啟動停止時間等,在oracle內部是透過高階佇列來控制任務進度的。oracle在expdp完成以後,透過更新mt來修改物件的狀態,這也說明了一個job的完成對應著一個mt任務列表的維護結束。
在expdp排除部分物件的匯出。
前面在exo中排除部分表的匯出一直比較棘手,oracle10g的expdp增加引數exclude來排除特定的物件型別,include包括特定的物件型別
oracle文件中特定引數的介紹存在一些問題eygle書中給予的用法是
exclude=object_type[:name_clause][,...]
include=object_type[:name_clause][,...]
expdp ashuang/ashuang schemas=ashuang exclude=sequence,table:"IN ('INF_APPLY','INF_APPLY_PROCESS','INF_APPLY_RESULT')"
include和exclude一樣,這裡就不列舉了,其中object_type可以同時定義多個物件類別,name_clause可以定義多個物件列表
當然eygle講到由於是使用exclude引數可能存在很多特殊字元,在不同的作業系統中可能需要跳脫字元才能順利執行,關於所以字元的個人也覺得麻煩,這裡我們偷個懶使用parfile引數檔案。
首先建立一個parfile.par檔案
directory=expdir
schemas=ashuang
dumpfile=test.dmp
include=table: "in ('INF_APPLY','INF_APPLY_PROCESS')"
同樣include也支援萬用字元匹配的匯出操作include=TABLE: "LIKE '%INF%'"
然後我們就可以在os下面執行
expdp ashuang/ashuang parfile=d:oracleproduct10.2.0expdirparfile.par
這裡和exp的query引數一樣,expdp也可以用query引數來檢索表中的資料,由於涉及到跳脫字元,很麻煩的,這裡直接用parfile來展示吧
dumpfile=test01.dmp logfile=test01.log directory=dump tables=test04 query=test04:"where rownum<4"
資料磊還有些引數這裡就不介紹,由於本人也沒有深究過其中的引數使用,關鍵還是要自己實踐才能出東西,資料磊工具是oracle的內部job任務,用MT任務列表來維護,oracle用高階佇列來控制任務,所以一旦expdp impdp命令成功,其餘的交給oracle的job吧,除非stop_job,不然其job一直在運作直到expdp和impdp結束
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1053083/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 國雲資料張粵磊:資料分析與價值變現
- 資料庫升級和工具資料庫
- Delta Lake 資料湖原理和實戰
- 大資料分析的原理和潛力大資料
- 浪潮云溪資料庫陳磊:國產資料庫足以撐起高階市場大梁!資料庫
- CNCF 官方大使張磊:Kubernetes 是一個“資料庫”嗎?資料庫
- 資料同步工具Sqoop和DataXOOP
- tom 9I-10g中關於dmp和資料磊檔案以及pga的一點分析
- 北大鄒磊:圖資料庫中的子圖匹配演算法資料庫演算法
- 資料庫原理資料庫
- 資料塊原理
- redis叢集資料儲存和獲取原理Redis
- 墨天輪訪談 | Pika資料庫陳磊:雲時代下,鍵值資料庫是否會被替代?資料庫
- 五十種大資料分析工具和軟體大資料
- Solaris 資料備份和傳輸工具(轉)
- 浪潮開務資料庫陳磊:佈局數字能源,創新助力“雙碳”資料庫
- 使用資料泵工具expdp工具匯出資料
- 大資料3_04_zookeeper概述和內部原理大資料
- JuiceFS 資料加密原理UI加密
- 資料庫索引原理資料庫索引
- 資料繫結原理
- 【Mysql】資料庫原理MySql資料庫
- 資料型別第2篇「字典和集合的原理和應用」資料型別
- Oracle NID工具修改資料庫DBID和資料庫名稱Oracle資料庫
- 美國大資料產業地圖和資料科學家必備工具-資料處理大資料產業地圖資料科學
- 五十種大資料分析工具和軟體(2)大資料
- Python 和 R 資料分析/挖掘工具互查Python
- SRAM資料儲存原理
- TongWeb資料來源原理Web
- 資料庫索引原理-轉資料庫索引
- 資料塊原理深入剖析
- 資料庫原理-設計資料庫
- 資料庫系統原理資料庫
- 複習資料庫原理資料庫
- 給 Java 開發者的 10 個大資料工具和框架Java大資料框架
- 資料庫系統常用的幾個工具和命令資料庫
- Java中大資料生態和4個工具介紹Java大資料
- 【Mybatis原始碼解析】- JDBC連線資料庫的原理和操作MyBatis原始碼JDBC資料庫