您好,登錄后才能下訂單哦!
本文主要介紹如何使用EXPDP/IMPDP也就是數據泵方式導入導出Oracle數據庫。
導庫權限管理
備份恢復數據庫可以設置一個專門的用戶賦予導出導入權限,導出:exp_full_database導入:imp_full_database權限。(本文后面使用的是system默認就有權限)
查看scott是否有導入導出權限
select * from dba_role_privs where grantee='SCOTT';
賦予scott用戶導入導出權限
grant exp_full_database,imp_full_database to scott;
回收scott導入導出權限
revoke select on dba_directories from scott;
directory管理
在介紹Oracle導入導出之前先介紹一下directory目錄,directory主要用來指定存儲路徑。查看DBA_directories視圖可以查看到目錄信息。這里我也簡單介紹一下directory目錄的管理命令。
創建名為zhanky的directory,對應的路徑G:\zhanky
create or replace directory zhanky as 'G\zhanky';
查看所有directory
select * from dba_directories;
刪除指定的directory
drop directory zhanky;
為了方便大家的理解,這里簡單做了DIRECROEY和EXPDP/IMPDP的對應關系圖,創建directory是為了在導入到處時引用。
前面講解了導庫前準備操作,首選需要確定導出用戶要有exp_full_database權限(如果使用system或sys默認就有),導入用戶需要imp_full_database權限。然后需要創建directory供存放備份文件。
開始進入正題了,導入導出的日常常用參數通過測試來了解。
EXPDP導出
常用日常備份,導出全庫到zhanky目錄中,備份文件命名zhanky.dmp,日志文件命名zhanky_out.log。
expdp system/manager@zhanky directory=zhanky dumpfile=zhanky.dmp logfile=zhanky_out.log full=y
DIRECTORY:用于轉儲文件和日志文件的目錄對象。
DUMPFILE:指定導出備份文件的命名。
LOGFILE:指定導出備份日志的命名。里面記錄了備份中的信息。
FULL:導出整個數據庫 (默認是N,就是默認只會導出登錄用戶的所有數據)。
將sh和scott用戶下除去sales和emp表以外百分之四十的數據導出到zhanky目錄中,備份文件命名zhanky2.dmp。
expdp system/manager@zhanky directory=zhanky dumpfile=zhanky2.dmp schemas=sh,scott exclude=table:\"IN\(\'SALES\',\'EMP\'\)\" sample=40
SCHEMAS:要導出的方案的列表 [登錄方案]。
EXCLUDE:排除特定對象類型。(表名要大寫)
SAMPLE:要導出的數據的百分比。
將users和example表空間導出到zhanky目錄中版本為11.2.0.1,導出使用兩個進程備份,文件分別命名zhanky1.dmp、zhanky2.dmp。如果文件存在,直接覆蓋目標轉儲文件。
expdp system/manager@zhanky directory=zhanky dumpfile=zhanky1.dmp,zhanky2.dmp tablespaces=users,example version=11.2.0.1 parallel=2 reuse_dumpfiles=y
TABLESPACES:標識要導出的表空間的列表。
VERSION:指定導出數據庫的版本,一般用于高版本數據庫的數據要導入到低版本數據庫中時用到。
PARALLEL:更改當前作業的活動 worker 的數量。
REUSE_DUMPFILES:覆蓋目標轉儲文件 (如果文件存在) [N]。
將sh.selas表中cust_id列值為987的數據導出到zhanky目錄中,備份文件命名為zhanky3.dmp,備份任務名叫zhankycs
expdp system/manager@zhanky directory=zhanky dumpfile=zhanky3.dmp tables=sh.selas QUERY=selas:"where cust_id=987" JOB_NAME=zhankycs
TABLES:標識要導出的表的列表。例如, TABLES=HR.EMPLOYEES,SH.SALES:SALES_1995。
QUERY:用于導出表的子集的謂詞子句。例如, QUERY=employees:"WHERE department_id > 10"。
JOB_NAME:要創建的導出作業的名稱。
更多導出參數可以通過 expdp -hlep獲得
IMPDP導入
IMPDP的大概過程:首先會驗證用戶名、密碼、庫等參數信息,然后創建表空間、用戶、角色等,最后導入表、索引等對象。在這個步驟中創建表空間用戶最重要,如果創建表空間或用戶失敗,那這個表空間或用戶的數據在新庫中就沒了。創建用戶失敗的原因一般都是表空間不存在,所以表空間創建的是否成功事關重要。在導入過程自動創建表空間時會按照備份文件(也就是備份文件數據源庫)中的參數信息。所有參數正確那么就可以出問題的地方就只有存儲空間和路徑了。所以我們只需要確認服務器空間是否足夠和源庫中數據文件的路徑在服務器上是否存在。而單實例環境從windows導入到linux這種情況,路徑肯定沒法保證一致,所以建議在導入之前先創建表空間。一般如果是生產環境公司都會有創建表空間腳本。
常用日常恢復,將zhanky目錄下zhanky.dmp備份文件中所有數據導入到zhanky庫中導出日志命名為zhanky_in.log。
impdp system/manager@zhanky directory=zhanky dumpfile=zhanky.dmp logfile=zhanky_in.log full=y
DIRECTORY 供轉儲文件, 日志文件和 sql 文件使用的目錄對象。
DUMPFILE 要從 (expdat.dmp) 中導入的轉儲文件的列表,
LOGFILE 日志文件名 (import.log)。
FULL 從源導入全部對象 (Y)。
將zhanky目錄下zhanky.dmp備份文件中sh和scott用戶下除去sales和emp表以外的所有數據導入到zhanky庫中。并將導入作業命名zhankycs_in
impdp system/manager@zhanky directory=zhanky dumpfile=zhanky.dmp schemas=sh,scott exclude=table:\"IN\(\'SALES\',\'EMP\'\)\" job_name=zhankycs_in
SCHEMAS 要導入的方案的列表。
EXCLUDE 排除特定的對象類型, 例如 EXCLUDE=TABLE:EMP。
JOB_NAME 要創建的導入作業的名稱。
將zhanky目錄下zhanky1.dmp、zhanky2.dmp備份文件中users和example表空間導入到zhanky庫中,導入使用兩個進程導入。
expdp system/manager@zhanky directory=zhanky dumpfile=zhanky1.dmp,zhanky2.dmp tablespaces=users,example reuse_datafiles=y parallel=2
TABLESPACES 標識要導入的表空間的列表。
REUSE_DATAFILES 如果表空間已存在, 則將其初始化 (N)
PARALLEL 更改當前作業的活動 worker 的數目。
將zhanky目錄下zhanky.dmp備份文件中sh.selas表里cust_id列值為987的數據指定為10.2.0.4版本導入到zhanky庫中,如果指定庫種sh.selas表則將數據附加到表中
impdp system/manager@zhanky directory=zhanky dumpfile=zhanky.dmp tables=sh.selas QUERY=selas:"where cust_id=987" version=10.2.0.4 TABLE_EXISTS_ACTION=REPLACE
QUERY 用于導入表的子集的謂詞子句。
VERSION 要導出的對象的版本, 其中有效關鍵字為:
TABLES 標識要導入的表的列表。
TABLE_EXISTS_ACTION 導入對象已存在時執行的操作。 有效關鍵字: (SKIP)跳過, APPEND附加, REPLACE 替換和 TRUNCATE清空表后在添加。
將zhanky目錄下zhanky.dmp備份文件中所有數據導入到zhanky庫中,但是將users表空間中的數據導入到cs表空間中,scott用戶的數據導入到zhanky用戶中,sh.selas表的數據導入到system.cstable中。
impdp system/manager@zhanky directory=zhanky remap_tablespace=users:cs remap_schema=scott:zhanky remap_table=sh.selas:cstable full=y
REMAP_TABLESPACE 將表空間對象重新映射到另一個表空間。
REMAP_SCHEMA 將一個方案中的對象加載到另一個方案。
REMAP_TABLE 將表名重新映射到另一個表。例如, REMAP_TABLE=EMP.EMPNO:REMAPPKG.EMPNO。
其實數據泵的導入導出很簡單,主要就是理解各個參數的用途,然后各種搭配之用。這次的內容就寫到這里,如果有問題歡迎留言指出。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。