Oracle expdp/impdp 用法例子 詳解 舉例 例子 他的這篇文章沒有辦法寫出來 要這麼改
在之前的blog:
Oracle 10g Data Pump Expdp/Impdp 詳解
exp/imp 與 expdp/impdp 對比及使用中的一些優化事項
中對資料泵這塊的理論知識有一些說明,但是沒有實際操作的例子。 所以在這裡就對expdp/impdp 的使用做一些測試。
1. 建立目錄
使用資料泵之前,需要建立一個存放檔案的目錄。 這個目錄要寫入Oracle的資料字典中才能識別。
(1)先檢視一下已經存在的目錄:
SQL> col owner format a5
SQL> col directory_name format a25
SQL> select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
----- ------------------------- ------------------------------------------------
SYS BACKUP /u01/backup
(2)把我們把backup 這個目錄刪除掉,在重新建立一下
SQL> drop directory backup;
Directory dropped.
SQL> select * from dba_directories;
SQL> create directory backup as '/u01/backup';
Directory created.
SQL> select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
----- ------------------------- ------------------------------------------------
SYS BACKUP /u01/backup
(3)注意事項:
我這裡是使用sys使用者來進行操作的。 如果是其他使用者,那麼就需要對這個使用者進行賦權。
SQL> grant create any directory to system;
Grant succeeded.
SQL> select * from dba_sys_privs where grantee='SYSTEM';
grantee privilege adm
------------------------------ ---------------------------- ------------
system create any directory no
system global query rewrite no
system create materialized view no
system create table no
system unlimited tablespace yes
system select any table no
如果是其他使用者使用sys建立的目錄,也需要進行賦權,如:
SQL> grant read,write on directory backup to SYSTEM;
Grant succeeded.
2. 建立測試資料
我們需要演示expdp/impdp的一些功能,所以需要建立2個使用者和對應的表空間,並且建立一些測試的資料。 SQL 程式碼如下:
SQL> create tablespace dave datafile '/u01/app/oracle/oradata/dave/dave01.dbf' size 50m;
SQL> create tablespace bl datafile '/u01/app/oracle/oradata/dave/bl01.dbf' size 50m;
SQL> create user dave identified by dave default tablespace dave temporary tablespace temp;
SQL> create user bl identified by bl default tablespace bl temporary tablespace temp;
SQL> grant read,write on directory backup to dave,bl;
SQL> grant connect,resource to dave,bl;
SQL> conn dave/dave;
Connected.
SQL> create table dave(id number,name varchar2(10));
Table created.
SQL> begin
2 for i in 1 .. 10 loop
3 insert into dave values(i,'dave');
4 end loop;
5 end;
6 /
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
SQL> select * from dave;
ID NAME
---------- ----------
1 dave
2 dave
3 dave
4 dave
5 dave
6 dave
7 dave
8 dave
9 dave
10 dave
10 rows selected.
SQL> conn bl/bl;
Connected.
SQL> create table bl(id number,name varchar2(10));
Table created.
SQL> begin
2 for i in 10 .. 20 loop
3 insert into bl values(i,'bl');
4 end loop;
5 commit;
6 end;
7 /
PL/SQL procedure successfully completed.
SQL> select * from bl;
ID NAME
---------- ----------
10 bl
11 bl
12 bl
13 bl
14 bl
15 bl
16 bl
17 bl
18 bl
19 bl
20 bl
11 rows selected.
3. 開始測試
3.1 FULL=Y全庫匯出
(1)不指定Job_name
[[email protected] ~]$ expdp /'/ as sysdba/' directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log parallel=2;
-- 注意使用sys 的格式,還有full=y 匯出的是非sys和system使用者的物件。
Export: Release 10.2.0.4.0 - Production on Friday, 18 March, 2011 15:05:54
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYS"."SYS_EXPORT_FULL_02": '/******** AS SYSDBA' directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log parallel=2
Estimate in progress using BLOCKS method...
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 18.68 MB
……
……
Master table "SYS"."SYS_EXPORT_FULL_02" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_FULL_02 is:
/u01/backup/fullexp.dmp
Job "SYS"."SYS_EXPORT_FULL_02" successfully completed at 15:07:27
expdp/impd 是Job形式的,會呼叫DBMS_DATAPUMP PL/SQL包,這個API提供高速的匯出匯入功能;還有DBMS_METADATA PL/SQL包,這個包是將metadata(物件定義)儲存在XML裡。所有的程序都能load 和unload 這些metadata。
在備份期間,會自動的生成一張與Job_name 相同名稱的表, 該表在備份期間儲存metadata資料。 當備份技術後,自動刪除該表。
我們可以使用SQL:
SQL>select * FROM dba_datapump_jobs
檢視Job 的資訊。 如果意外情況導致備份Job失敗,那麼對應儲存metadata的表,還是會存在。 這個時候,如果查詢dba_datapump_jobs,會顯示該Job為not running。 這時候,我們只需要drop 掉對應的表,在查詢dba_datapump_jobs。 就沒有記錄了。 這個也是一種處理方法。
在開始我就說了,這裡沒有指定Job name。 所以系統自動給我們生成了一個:SYS_EXPORT_FULL_02。
預設是從SYS_EXPORT_FULL_01開始,因為我之前有一個沒有執行的Job,所以這裡從2開始了。
(2)指定Job_name
[[email protected] ~]$ expdp /'/ as sysdba/' directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2job_name=daveJob;
--在這裡我指定了Job_name
Export: Release 10.2.0.4.0 - Production on Friday, 18 March, 2011 15:29:56
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYS"."DAVEJOB": '/******** AS SYSDBA' directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob
Estimate in progress using BLOCKS method...
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 18.68 MB
……
……
……
Master table "SYS"."DAVEJOB" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.DAVEJOB is:
/u01/backup/fullexp3.dmp
Job "SYS"."DAVEJOB" successfully completed at 15:31:06
3.2 全庫匯入
[[email protected] archivelog]$ impdp /'/ as sysdba/' directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob table_exists_action=replace;
注意:匯入的過程會生成歸檔日誌,所以,如果是Data Guard 環境,只需要匯入主庫就可以了。
3.3 匯出表
$ expdp /'/ as sysdba/' directory=backup dumpfile=table.dmp logfile=table.log tables=dave.dave,dave.dba;
注意:這裡必須是同一個schema下的表
或者:
$expdp dave/dave directory=backup dumpfile=table.dmp logfile=table.log tables=dave, dba;
3.4 匯入表
$impdp dave/dave directory=backup dumpfile=table.dmp logfile=table.log tables=dave,dba;
3.5 匯出使用者
$ expdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log schemas=dave,bl;
這裡是同時匯出多個使用者
3.6 匯入使用者
$ impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log schemas=dave,bl table_exists_action=replace;
3.7 匯出表空間
$ expdp /'/ as sysdba/' directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=dave,bl;
--同時匯出2個表空間
3.8 匯入表空間
$ impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log tablespaces=dave table_exists_action=replace;
--匯入一個表空間
$ impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log tablespaces=dave,bl table_exists_action=replace;
--匯入2個表空間
3.9 REMAP_SCHEMA
該選項用於將源方案的所有物件裝載到目標方案中. 我們匯出dave 使用者下的表,然後把它匯入bl使用者下。
$ expdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log schemas=dave;
$ impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log remap_schema=dave:bl;
驗證一下:
SQL> conn bl/bl;
Connected.
SQL> select count(*) from dave;
COUNT(*)
----------
10
3.10 REMAP_TABLESPACE
將源表空間的所有物件匯入到目標表空間中,我們將dave表空間下的物件匯入到bl表空間下。
$ expdp /'/ as sysdba/' directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=dave;
$ impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log remap_tablespace=dave:bltable_exists_action=replace;
3.11 REMAP_DATAFILE
該全庫匯出時有用,用於將源資料檔名轉變為目標資料檔名,在不同平臺之間搬移表空間時可能需要該選項。比如把db從unix匯入到win下,全庫匯出時裡面有create tablespace的語法,這樣就有datafile的語法,裡面就有路徑,匯入到win時建立tablespace時的路徑就不能是unix下的路徑了,此時可以通過該引數remap一下路徑:
remap_datafile=/oradata/orcl/dave01.dbf:e:/oradata/orcl/dave01.dbf
全庫匯出:
$expdp /'/ as sysdba/' directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob;
全庫匯入:
$impdp /'/ as sysdba/' directory=backup dumpfile=fullexp3.dmp logfile=tbs.log full=y remap_datafile='/u01/app/oracle/oradata/dave/dave01.dbf':'/u01/app/oracle/oradata/dave/tianlesoftware01.dbf';
如果這裡的remap 檔案比較多,可以把這部分單獨拿出來,放到一個檔案裡。
$impdp /'/ as sysdba/' directory=backup dumpfile=fullexp3.dmp logfile=tbs.log full=y parfile=payroll.par
payroll.par 內容:
remap_datafile='/oradata/orcl/system01.dbf':'/u01/oradata/orcl/system01.dbf'
remap_datafile='/oradata/orcl/sysaux01.dbf':'/u01/oradata/orcl/sysaux01.dbf'
remap_datafile='/oradata/orcl/undotbs4.dbf':'/u01/oradata/orcl/undotbs4.dbf'
remap_datafile='/oradata/orcl/test02.dbf':'/u01/oradata/orcl/test02.dbf'
如果是windows系統,需要加雙引號:
remap_datafile="'d:/orcl/system01.dbf':'e:/orcl/system01.dbf'"
3.12 TRANSPORT_DATAFILES
該選項表示的是表空間的傳輸。用於指定搬移空間時要被匯入到目標資料庫的資料檔案。
這種方法的操作步驟如下:
(1)將表空間改成read only 狀態,然後copy 待傳輸的表空間的所有資料檔案到目標庫。 這裡可以進行重新命名。
SQL> alter tablespace dave read only;
(2)按transport 方式匯出表空間。如:
expdp directory=backup dumpfile=tts.dmp transport_tablespaces=dave
注意:這步操作只把metadata,即元資料,只有定義,沒有data匯入了dump檔案。 實際的data 我們在第一步已經copy 過去了。
(3)import 我們的資料。 如:
impdp hr directory=dpump_dir1 dumpfile=tts.dmp transport_datafiles='/user01/data/workers.dat'
(4)將表空間改成read write:
SQL>alter tablespace dave read write ;
SQL>select * from dba_tablespaces ;
SQL>select * from dba_data_files ;
元資料(metadata)從我們的dump檔案匯入,Data Pump將實際的data從我們指定的workers.dat 匯入。 這裡必須寫絕對路勁。
我們看個例項:
(1)先對錶空間Dave 新增一個數據檔案:
SQL> alter tablespace dave add datafile '/u01/dave02.dbf' size 20m;
Tablespace altered.
(2)copy 到其他例項的對應位置
在移動之前先將表空間改成read only 狀態:
SQL> alter tablespace dave read only;
將表空間下的所有資料檔案移動到其他的例項上。可以進行重命令。 我這裡是同一個例項。 因為我這裡是一個例項。 我將我們剛才新增的資料檔案dave02.dbf 移動到/u01/app/oracle/oradata/dave下。 待expdp 完成後,我們將表空間drop掉,在import進來。
$ cp /u01/dave02.dbf /u01/app/oracle/oradata/dave/bl02.dbf
將dave01.dbf 複製成bl03.dbf. 等會刪除表空間,不然會被刪除掉。
$ cp dave01.dbf bl03.dbf
(3)expdp 匯出元資料
$expdp /'/ as sysdba /' directory=backup dumpfile=tts.dmp transport_tablespaces=dave
(4)import 資料
先把表空間drop掉在import:
SQL> drop tablespace dave including contents and datafiles;
Tablespace dropped.
$ impdp /'/ as sysdba /' directory=backup dumpfile=tts.dmp transport_datafiles='/u01/app/oracle/oradata/dave/bl02.dbf', '/u01/app/oracle/oradata/dave/bl03.dbf'
注意一點:這裡transport 的表空間,在另一個例項上是不可以存在的。不然不能匯入。
如果檔案很多,也可以寫入個配置檔案裡。 匯入時通過PARFILE引數來指定。
(5)將表空間改成read write模式:
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
DAVE READ ONLY
BL ONLINE
7 rows selected.
SQL> alter tablespace dave read write;
Tablespace altered.
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
DAVE ONLINE
BL ONLINE
7 rows selected.
transport_datafiles 注意的幾點:
(1)表空間所有的資料檔案都要copy到目標庫。
(2)copy 之間,將表空間改成read only 狀態。
(3)copy之後可以對資料檔案進行重新命名。所以,transport_datafiles 也可以用來對資料檔案進行重新命名和移動位置。
(4)transport_datafiles 完成之後,不要忘記將表空間改成讀寫模式。
---------------------------------------------------------------------------------------------------
相關推薦
Oracle expdp/impdp 用法例子 詳解 舉例 例子 他的這篇文章沒有辦法寫出來 要這麼改
在之前的blog: Oracle 10g Data Pump Expdp/Impdp 詳解 exp/imp 與 expdp/impdp 對比及使用中的一些優化事項 中對資料泵這塊的理論知識有一些說明,但是沒有實際操作的例子。 所以在這裡就對expdp/im
expdp / impdp 用法詳解
main nbsp ora 名稱 相關 cuc 查看 導入數據庫 reat 一 關於expdp和impdp 使用EXPDP和IMPDP時應該註意的事項:EXP和IMP是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。EXPDP和IMPDP是服務端的工具
Oracle資料庫:impdp匯入資料庫及expdp匯出資料過程詳解
1.建立資料庫(可使用預設的資料庫,此步驟可省略) 2.在資料庫中建立表空間,最好與匯出的資料庫的表空間相同名稱,參考http://jingyan.baidu.com/article/5225f26b036c47e6fa0908e4.html 建立表空間的SQL命令(PLSQL下操作):create
【轉】expdp / impdp 用法詳解
ORCALE10G提供了新的匯入匯出工具,資料泵。 Oracle官方對此的形容是:Oracle DataPump technology enables Very High-Speed movement of data and metadata from one data
WordPress分類列表函數:wp_list_categories用法及參數詳解舉例
array play ide rgs arc err 無序 null 列表函數 http://www.511yj.com/wordpress-wp-categories.html 註意: 1、 wp_list_categories() 和 list_cats() 以及
Erlang 中lists的用法詳解和例子說明,詳細 全
16,keystore(Key, N, TupleList1, NewTuple) -> TupleList2這個函式和keyreplace函式比較像,不同的是,這個keystore在沒有找到對應的Tuple時, 會將這個NewTuple追加在這個TupleList1的最後。 例子: List1 = [
Oracle觸發器用法例項詳解
本文例項講述了Oracle觸發器用法。分享給大家供大家參考,具體如下: 一、觸發器簡介 觸發器的定義就是說某個條件成立的時候,觸發器裡面所定義的語句就會被自動的執行。因此觸發器不需要人為的去呼叫,也不能呼叫。然後,觸發器的觸發條件其實在你定義的時候就已經設定好了。這裡面需
Linux top命令的用法詳細詳解
command load 命令 技術分享 服務 範圍 web服務器 睡眠狀態 打開 查看多核CPU命令mpstat -P ALL 和 sar -P ALL 說明:sar -P ALL > aaa.txt 重定向輸出內容到文件 aaa.txt top命令經
css權重問題例子詳解
tro gree id選擇器 紅色 詳解 one 描述 ren ace 首先,id選擇器權重級別最高,class選擇器其次,html選擇器最後。 例子: <div class="t1" id="one"> <div class="t2" id="t
PLSQL連接Oracle 數據庫配置詳解
evel 目錄 win32 asi ges network con 配置詳解 soft 1. 下載instantclient-basic-win32-11.2.0.1.0 (oracle官網下載地址:http://www.oracle.com/technetwork/t
oracle數據庫歸檔詳解
oracle什麽是Oracle歸檔模式? Oracle數據庫有聯機重做日誌,這個日誌是記錄對數據庫所做的修改,比如插入,刪除,更新數據等,對這些操作都會記錄在聯機重做日誌裏。一般數據庫至少要有2個聯機重做日誌組。當一個聯機重做日誌組被寫滿的時候,就會發生日誌切換,這時聯機重做日誌組2成為當前使用的日誌,當聯機
sed命令例子詳解
moved 輸入 size 字母轉 amp sep def cde family sed -e ‘/Patricia/h‘ -e ‘/Margot/x‘ datafile 包含Margot的行將被包含Patricia的行替換; sed -e /WE/{h;d;}‘ -
awk命令例子詳解
劃線 pan $1 空格 led 部分 分隔 線表 模式 awk -F: ‘{print "Number of dields: "NF}‘ passwd 字段分隔符設為冒號,所以每條記錄的字段數變成7; awk ‘{print "Number of diel
sed詳細用法及詳解
sed#語法:sed [options] ‘command‘ in_file[s] options 部分:-n 靜默輸出(不打印默認輸出) -e 給予sed多個命令的時候需要-e選項#sed -e ‘s/root/haha/g‘ -e ‘s/bash/wwwww/g‘ passwd > passwd.b
JAVA中this的三種用法的詳解
enc 所有 其它 println 用途 詳細介紹 示例 一次 調用構造 this關鍵字必須放在非靜態方法裏面 this關鍵字代表自身,在程序中主要的使用用途有以下幾個方面: 使用this關鍵字引用成員變量 使用this關鍵字在自身構造方法內部引用其它構造方
Oracle 11g數據庫詳解
adding 查看端口 linu oci 資料 標記 錯誤 urn locate 常見異常: ORA-14025:不能為實體化視圖或實體化視圖日誌指定PARTITION ORA-14026:PARTITION和CLUSTER子句互相排斥 ORA-14027:僅可以指定一個P
Oracle數據庫序列詳解
art term ffffff TP 執行 清空 調用 滿足 sel 前言: 做過web開發的人員基本上都知道,數據庫表中的主鍵值有的時候我們會用數字類型的並且自增。這樣mysql、sql server中的都可以使用工具創建表的時候很容易實現。但是oracle中沒有設置自增
【轉】Oracle 11g Dataguard 參數詳解
異步模式 正常 10g enable ffi sys 過程 tnsnames async 轉自:https://www.jb51.net/article/52269.htm 這篇文章主要介紹了Oracle 11g Dataguard參數詳解,包含了獨立參數、主庫參數、備
Oracle遊標 CURSOR實例詳解
www 取值 alt 內存 sel www. 輸出 lose info 作者:gqk 遊標 CURSOR: 一、遊標概述: 遊標(cursor)是數據庫系統在內存中開設的一個數據緩沖區,存放SQL語句的執行結果。 每個遊標都有一個名字,用戶可以用SQL語句逐一從遊標中
ORACLE JOB建立及使用詳解
Oracle job有定時執行的功能,可以在指定的時間點或每天的某個時間點自行執行任務。 一、查詢系統中的job,可以查詢檢視 --相關檢視 select * from dba_jobs; select * from all_jobs; select * f