datapump簡介(一)
當然datapump相比exp/imp推出的時間還是要短一些,所以在使用的過程中還是或多或少碰到一些問題,還是在不斷改進,而exp/imp絕對算是一款成熟的工具,從早期版本到現在都在支援,而datapump相比於exp/imp的最大差別就在於datapump是屬於服務端的程式,生成的dump只能位於服務端,而不能把它匯出到客戶端。所以說對於資料的邏輯備份來說還是有很多的選擇。可以靈活使用exp/imp,也可以在一定規模的資料情況下使用datapump。
datapump和exp/imp類似,也有四種使用模式:資料庫模式,表模式,使用者模式,可傳輸表空間模式,在此基礎上使用比較多的還有基於query選項的資料選擇性抽取和資料結構匯出。
當然在使用下我們還是需要一些準備,就是建立目錄,因為datapump是一個服務端的程式,所以需要指定本地的一個目錄結構,它會解析這個目錄然後把dump生成在這個目錄下面。
建立目錄的語法如下:
create directory test_dir as '/home/ora11g/expdp_test';
在此基礎上我們可以根據需要把讀寫的許可權賦予指定的使用者,這樣就可以靈活去讀寫這個目錄了。
比如我們把目錄test_dir的讀寫許可權賦予使用者test,就可以使用下面的形式。
grant read,write on directory test_dir to test;
資料庫模式
資料庫模式主要是作為全庫備份使用的,可以匯出除sys之外的資料庫裡的所有物件,在資料量較小的情況下是一個不錯的選擇。
expdp system/oracle dumpfile=db_backup.dmp full=y directory=test_dir
表模式
表模式可以匯出某個使用者下指定的表,比如我們需要匯出的表名為:test1,test2
expdp n1/n1 dumpfile=table_mode.dmp tables=test1,test2 directory=test_dir
使用者模式
使用者模式可以匯出指定使用者下所有的物件,比如匯出使用者user1下所有的物件
expdp n1/n1 file=user_mode.dmp schemas=user1 directory=test_dir
傳輸表空間模式 常作為資料遷移時的一種方法,在資料遷移篇中會有詳細的描述 海量資料遷移之傳輸表空間(一) http://blog.itpub.net/23718752/viewspace-1703358/
在impdp中也會存在同樣的四種模式,使用方法都是類似的。
除了常用的4種模式之外,使用query選項選擇性匯出資料也是一種很使用的方法。比如存在一個表test,我們希望根據欄位object_id=1的條件來選擇性匯出資料,可以使用query選項完成。
使用Query選項做選擇性資料匯出
expdp n1/n1 dumpfile=query_bak.dmp query=\' where object_id=1 \' tables=test directory=test_dir
在這個方面,expdp的query功能更為強大。
比如我們需要匯出兩個表test1,test2,對於test1需要根據條件"where object_id=1"來匯出,test2沒有其它過濾條件
我們可以這樣使用expdp的query選項,使用一個parfile來更高效完成。
parfile的內容如下:
tables=(t,test_tab01)
query=t:"where object_id=1"
然後使用expdp命令匯出即可。
expdp n1/n1 dumpfile=query_bak.dmp parfile=dp.par directory=test_dir
當然了,expdp的一些實用特性還是蠻多的。可以舉幾個例子。
第一個就是表空間不匹配的問題
比如表中存在lob欄位或者與目標環境的表空間不一致,使用Imp匯入dump的時候就會丟擲下面的錯誤。
IMP-00003: ORACLE error 959 encountered
ORA-00959: tablespace 'DATAS01' does not exist
對於這類問題使用exp/imp的時候還是比較棘手的,可能需要解析dump檔案,或者使用dbms_metadata來從源庫中得到ddl語句。
在expdp中解決起來就很容易。我們可以使用remap_tablespace的選項,比如我們在匯出的環境中存在表空間TEST_OLD,在目標環境沒有這個表空間,我們需要把表建立在TEST_NEW表空間下,我們可以使用remap_tablespaces選項。
impdp n1/n1 dumpfile=table_mode.dmp tables=test1,test2 directory=test_dirremap_tablespace=TEST_OLD:TEST_NEW
第二個就是匯出procedure,function等物件的資訊
在exp中,如果你使用使用者模式和全庫模式,會預設匯出儲存過程,序列這些物件的資訊,但是這些不是由我們手工去控制的。在匯入的時候如果使用full=y的時候才會把這些物件給隱式匯入。
在datapump中解決起來也很容易。
比如我們只需要匯出使用者test下的儲存過程,函式和序列資訊。就可以直接使用下面的語句來做。
expdp test/test dumpfile=query_bak.dmp directory=test_dir schemas=test include=procedcure,function,sequence
甚至我們可以更加挑剔,直接去篩選哪些需要匯出,哪些不需要。
比如我們到處sequence的時候只匯出序列名為:_seq結尾的序列
我們還是使用parfile來簡單配置。
parfile的內容為:
include=procedure
include=function
include=sequence:"like '%_SEQ%'"
schemas=test
然後我們使用命令匯出:
expdp test/test dumpfile=query_bak.dmp directory=test_dir parfile=dp.par
第三個就是使用排除選項exclude
exp/imp的時候我們還不能使用排除選項,比如使用者test下有100張表,我們不希望匯出某張表test1
我們可以使用datapump輕鬆實現。
我們使用parfile來配置。
exclude=table:"='TEST1'"
使用如下的命令即可。
expdp test/test dumpfile=query_bak.dmp directory=test_dir parfile=dp.par
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1740693/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle DataPump之一Oracle
- tkinter簡介(一)
- UICollectionView(一)簡介UIView
- 【DATAPUMP】使用DataPump遷移Oracle資料庫Oracle資料庫
- ElasticSearch基本簡介(一)Elasticsearch
- 一、群集的簡介
- about datapump parallelParallel
- Speedup Datapump ImportImport
- 一份 Markdown 簡介
- spark簡單介紹(一)Spark
- kafka之一:kafka簡介Kafka
- RocketMQ 實戰(一) - 簡介MQ
- Varnish(一)簡介與原理
- python教程(一)·簡介Python
- CSS 學習一(簡介)CSS
- Performance Schema使用簡介(一)ORM
- Flutter教程(一) Flutter簡介Flutter
- DevSecOps 簡介(一)dev
- Flume(一):簡介架構架構
- Statspack之一-Statspack簡介
- ET8.1(一)簡介
- 介紹一下Spring Cloud簡介SpringCloud
- Oracle DataPump之二Oracle
- Oracle Datapump 學習Oracle
- Redis 知多少 (一)---Redis 簡介Redis
- Puppeteer筆記(一):Puppeteer簡介筆記
- Unity學習系列一簡介Unity
- Redis那些事(一) — Redis簡介Redis
- shell程式設計—簡介(一)程式設計
- Azure Terraform(一)入門簡介ORM
- Nginx簡介–nginx系列之一Nginx
- RxJava簡介與入門(一)RxJava
- NIO學習一、NIO簡介
- 轉~timesten系列一:簡介
- kafka詳解一、Kafka簡介Kafka
- 一、資訊學奧賽簡介
- 【DATAPUMP】Oracle資料泵優化及提高效率的一些引數介紹Oracle優化
- unittest系列(一)unittest簡介和示例