1. 程式人生 > >補:Oracle 的資料泵匯出(expdp)及匯入(impdp)

補:Oracle 的資料泵匯出(expdp)及匯入(impdp)

        之前本來想寫篇exp-imp,expdp-impdp的簡單介紹的, 結果發現簡單寫了下exp-imp就挺長一篇了,所以就把expdp-impdp分開來寫了。放下之前的連結:https://blog.csdn.net/huay_li/article/details/80638024

        好了,繼續往下,環境方面:

        作業系統:windows 10 ;資料庫:Oracle Database 11g r2 。

一、匯出(expdp)

        1、建邏輯目錄(directory)

        在資料庫中建一個邏輯目錄,指向系統一個路徑。當然,這個目錄在你的系統中也必須存在,否則後面匯出會報錯。

        例如,我們在有dba許可權的使用者中建一個叫做orcl_bak的邏輯目錄,指向系統中的“D:\orcl_bak\data\” 資料夾,那麼,我們就要在系統中建好這麼一個資料夾。建立邏輯目錄以及授予讀取、寫入的許可權,程式碼如下:

SQL> create or replace directory orcl_bak as 'D:\orcl_bak\data'; 
SQL> grant read, write on directory orcl_bak to public;   --to public的就是把該許可權賦給所有使用者,當然,也可以單獨授權給某個使用者

        在資料庫建這個東西有什麼用呢?意思大概就是告訴資料庫,我給了你這麼個地方,你可以在這個地方讀取或者寫入資料。

        2、expdp/impdp常用引數

            expdp/impdp的引數我們都可以從命令列中查詢到,在命令列中輸入 expdp -help 或者是 impdp-help來檢視。

        (1)expdp、impdp共同的引數

            ① directory 邏輯目錄,這個就是指定匯出或者匯入的轉儲檔案的儲存路徑,也就是上面說到的建立邏輯目錄的目錄名,orcl_bak,如我們的邏輯目錄名叫orcl_bak,匯出的時候就寫directory=orcl_bak;

            ② dumpfile 目標轉儲檔名的列表,也就是匯出的轉儲檔名,可以指定一個或者多個檔名,不過比較常用的是指定一個檔案名系列,然後後面拼接數字或者時間,如dumpfile=full_%U.dmp,這樣,匯出的時候生成的轉儲檔名就會按順序是full_01.dmp,full_02.dmp,full_03.dmp.....這個樣子。多提一句,在命令列中直接打命令引數是full_%U.dmp,但如果是做成bat檔案的,就需要多加一個%,寫成full_%%U.dmp

;匯入時要跟匯出的對應;

            ③ logfile 輸出的日誌檔名,指定輸出的日誌檔名,便於區分和管理匯出日誌;

            ④ PARALLEL 當前作業的活動 worker 的數量,也稱為並行度,就是匯出匯入時同時執行的執行緒數,例如我們匯出的時候設定parallel=4,那麼就會同時往4個dmp檔案裡面匯出資料;

            ⑤ JOB_NAME 顧名思義,就是作業名,任務名的意思,expdp/impdp匯出匯入類似一次作業,會有一個job_name,設定的話主要是方便中途可通過指定job_name的方式直接進入作業檢視狀態或者kill掉作業之類的操作;

            ⑥ NETWORK_LINK 遠端資料庫連結,這個用於匯出遠端資料庫或者往遠端資料庫匯入資料。

            ⑦ full 匯入/匯出所有

        (2)expdp 常用引數

            ① REUSE_DUMPFILES 是否覆蓋目標轉儲檔案,像我們如果是做成定時備份的,一般都是備份到同一個目錄下,每天定時執行,那麼,這個引數就需要設定為y,這樣,每次執行就會覆蓋之前備份匯出的檔案,否則就會報轉儲檔案已存在的錯誤;

            ② filesize 匯出時單個轉儲檔案最大容量,單位為位元組,可直接設定為filesize=1024M等;

            ③ version 匯出版本,主要用於高版本資料庫導向低版本。例如我們需要在11g的環境中匯出,匯入到10g,版本號為10.2.0.1.0的資料庫中,那麼在匯出的時候就需要指定版本號,version=10.2.0.1.0 

            ④ compression 壓縮方式

                a. ALL 對匯出的元資料和表資料都進行壓縮,耗時最長,壓縮效果好;

                b. data_only 僅對錶資料進行壓縮,壓縮效果也十分明顯;

                c. metadata_only 預設值為此,僅對元資料進行壓縮,壓縮效果一般不怎麼明顯,但匯出速度較快;

                d. none 不壓縮匯出,匯出檔案最大。

        (3)impdp 常用引數

            ① TABLE_EXISTS_ACTION 匯入物件已存在時的操作

                a. skip 跳過,預設為此操作;

                b. replace 先drop,再匯入;

                c. append  在原有資料的基礎上增加資料;

                d. truncate  先truncate清空資料,再匯入資料;

            ② remap_table 表名對映到另一個表,例如我們匯出的是t1表,匯入時需要匯入到t2表,可設定remap_table=t1:t2

            ③ remap_tablespace 表空間對映到另一個表空間,用法跟上面類似,remap_tablespace=lhy:test

            ④ remap_schema 使用者對映到另一個使用者,如從lhy使用者匯出,匯入到test使用者,remap_schema=lhy:test

        3、匯出(expdp)

        expdp其實使用起來跟exp還是挺類似的,匯出可以按使用者(模式)、按表空間、按表、查詢語句、或者全庫匯出。下面貼點程式碼咯,程式碼是寫在bat檔案中的,如果直接命令列,dumpfile檔名的%%U要去掉一個%

        (1)按使用者(模式)匯出(schemas=lhy)

expdp system/[email protected] schemas=lhy directory=orcl_bak dumpfile=lhy_%%U.dmp logfile=lhy_export.log filesize=10M parallel=4 job_name=lhy_Export reuse_dumpfiles=y

        (2)按表空間匯出(tablespaces=lhy)

expdp system/[email protected] tablespaces=lhy directory=orcl_bak dumpfile=tbs_%%U.dmp logfile=tbs_export.log filesize=10M parallel=4 job_name=tbs_Export reuse_dumpfiles=y

        (3)按表匯出(tables=(LHY.T1,LHY.T2))

expdp system/[email protected] tables=(LHY.T1,LHY.T2) directory=orcl_bak dumpfile=table_%%U.dmp logfile=table_export.log filesize=10M parallel=4 job_name=table_Export reuse_dumpfiles=y

        (4)通過查詢匯出部分表資料(where yearno = 2018)

expdp system/[email protected] tables=LHY.T1 query=\"where yearno = 2018\" directory=orcl_bak dumpfile=table_%%U.dmp logfile=table_export.log filesize=10M parallel=4 job_name=table_Export reuse_dumpfiles=y 

        (5)全庫匯出(full=y)

expdp system/[email protected] full=y directory=orcl_bak dumpfile=full_%%U.dmp filesize=10M logfile=full_export.log parallel=4 job_name=full_Export reuse_dumpfiles=y

        4、匯入(impdp)

        匯入(impdp)跟匯出(expdp)類似,不過多出幾種物件歸屬的轉換,例如換使用者(模式),換表名,換表空間等等。然後,匯入之前一般都需要建好對應的表空間和對應的使用者。

        (1)按使用者(模式)匯入(schemas=lhy)

impdp system/[email protected] schemas=lhy directory=orcl_bak dumpfile=lhy_%%U.dmp logfile=lhy_import.log job_name=lhy_Import parallel=4

            這裡的schemas是指的expdp匯出的使用者,預設是匯入到同名使用者,如果需要匯入到不同的使用者中,可用引數remap_schema,例如我們需要從lhy使用者中匯入到test使用者中,就在impdp的語法中新增remap_schema=lhy:test,具體如下

impdp system/[email protected] schemas=lhy remap_schema=lhy:test directory=orcl_bak dumpfile=lhy_%%U.dmp logfile=test_import.log job_name=test_Import parallel=4

        (2)按表空間匯入(tablespaces=lhy)

impdp system/[email protected] tablespaces=lhy directory=orcl_bak dumpfile=tbs_%%U.dmp logfile=tbs_import.log job_name=tbs_Import parallel=4

            然後,既然使用者可以跨使用者導,那表空間這邊肯定也有類似的解決方案,例如從lhy表空間匯出的,匯入到test表空間,可用引數remap_tablespace=lhy:test,具體如下:

impdp system/[email protected] tablespaces=lhy remap_tablespace=lhy:test directory=orcl_bak dumpfile=tbs_%%U.dmp logfile=tbs_import.log job_name=tbs_Import parallel=4

        (3)按表匯入(tables=LHY.T1)

impdp system/[email protected] tables=lhy.t1 directory=orcl_bak dumpfile=table_%%U.dmp logfile=table_import.log job_name=table_Import parallel=4

            emm...當然,你想改下表名導進去也是可以的,引數remap_table=t1:t3,將t1的匯出資料匯入為t3表,具體如下

impdp system/[email protected] tables=lhy.t1 remap_table=t1:t3 directory=orcl_bak dumpfile=table_%%U.dmp logfile=table_import.log job_name=table_Import parallel=4

        (4)按查詢篩選表資料匯入(query=" where yearno = 2018")

            例如,我們要把匯出的t1表中的資料中yearno列值為2018的匯入到資料庫,就可以用下面語法:

impdp system/[email protected] tables=lhy.t1 query=\" where yearno = 2018 \" directory=orcl_bak dumpfile=table_%%U.dmp logfile=table_import.log job_name=table_Import parallel=4

        (5)全庫匯入(full=y)

impdp system/[email protected] full=y directory=orcl_bak dumpfile=full_%%U.dmp logfile=full_import.log job_name=full_Import parallel=4

        5、異地備份和匯入

            資料泵(expdp/impdp)的異地備份會稍微比exp/imp麻煩一些,exp/imp是直接連上庫就可以幹,轉儲檔案輸出直接寫死在本機上某個路徑就可以。但是資料泵的話是採用邏輯目錄的方式輸出日期,而邏輯目錄在資料庫中認的是資料庫所在的伺服器的路徑,而不是你自己的本機的路徑。

            算了不廢話了,就直接說吧。

        (1)首先,你要在本地上備份遠端資料庫,那你本地得裝個Oracle database,然後建個庫。例如,本地資料庫orcl,使用者名稱為lhy,然後我們在本地備份ip為192.168.1.4的伺服器上面的資料庫gz,通過下面幾種語法建立資料庫連結

--先在tnsnames.ora配置好資料庫連線資訊,別名為gz4
SQL> create public database link gz_bak connect to system identified by oracle using 'gz4';
--或者直接粗暴的把配置資訊搞過來
SQL> create public database link gz_bak connect to system identified by oracle using '
       (DESCRIPTION =
         (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.4)(PORT = 1521))
         (CONNECT_DATA =
           (SERVER = DEDICATED)
           (SERVICE_NAME = gz)
         )
       )';
--又或者簡單點用IP埠例項名
SQL> create public database link gz_bak connect to system identified by oracle using '192.168.1.4:1521/gz';

            資料庫連結建立完成後,可查詢 select * from [email protected]_bak; 結果為X就代表正常連結上了。

        (2)然後要在本地資料庫orcl中建立一個邏輯目錄,指向本地的備份資料夾,我們在一個有dba許可權的使用者中建一個名為gz4_bak的目錄,指向d:\gz4_bak\data,然後給這個目錄授讀寫許可權,語法如下

SQL> create or replace directory gz4_bak as 'D:\gz4_bak\data'; 
SQL> grant read, write on directory gz4_bak to public;   --to public的就是把該許可權賦給所有使用者,當然,也可以單獨授權給某個使用者

        (3)目錄建好之後,就可以直接在本地備份伺服器4上面的gz庫了,需要用到引數network_link=gz_bak

            ① 按使用者(備份gz4資料庫上的XX使用者)

expdp system/[email protected] schemas=XX network_link=gz_bak directory=gz4_bak dumpfile=XX_%%U.dmp logfile=XX_export.log filesize=10M parallel=4 job_name=XX_Export reuse_dumpfiles=y
            ② 表備份(gz4上XX使用者的表table1)
expdp system/[email protected] tables=(XX.table1) network_link=gz_bak directory=gz4_bak dumpfile=table1_%%U.dmp logfile=table1_export.log filesize=10M parallel=4 job_name=table1_Export reuse_dumpfiles=y

        (4)匯入也是類似匯出,在正常impdp匯入的基礎上加上network_link引數即可

            ① 按使用者(恢復gz4上的XX使用者)

impdp system/[email protected] schemas=XX network_link=gz_bak directory=gz4_bak dumpfile=XX_%%U.dmp logfile=XX_import.log job_name=XX_Import parallel=4

            ② 恢復表(匯入gz4上XX使用者的表table1)

impdp system/[email protected] tables=XX.table1 network_link=gz_bak directory=gz4_bak dumpfile=table1_%%U.dmp logfile=table1_import.log job_name=table1_Import parallel=4

--2018.06.16


相關推薦

Oracle資料匯出expdp匯入impdp

        之前本來想寫篇exp-imp,expdp-impdp的簡單介紹的, 結果發現簡單寫了下exp-imp就挺長一篇了,所以就把expdp-impdp分開來寫了。放下之前的連結:https://blog.csdn.net/huay_li/article/detail

Oracle資料匯出匯入資料庫指令碼

--檢視目錄(dba賬號下操作) select * from dba_directories; --匯出expdp指令碼 vim exp_honesty_201809211642.par 編輯生成匯出的par指令碼新增以下指令碼內容 userid="/ as sysdba" dire

Oracle10g 資料匯出命令 expdp 使用總結

注: 處理這樣帶查詢的多表匯出, 如果多表之間有外健關聯, 可能需要注意查詢條件所篩選的資料是否符合這樣的外健約束, 比如 EMP中有一欄位是 deptno, 是關聯dept中的主鍵, 如果"where empno>=8000"中得出的deptno=50的話, 那麼, 你的dept的條件"where

Oracle備份方式主要分三種資料匯出備份oracle10g開始推出、熱備份與冷備份

oracle資料泵備份(Expdp命令)   Oracle備份方式主要分為資料泵匯出備份、熱備份與冷備份三種,今天首先來實踐一下資料泵備份與還原。資料泵匯出/匯入屬於邏輯備份,熱備份與冷備份都屬於物理備份。oracle10g開始推出了資料泵(expdp/impdp),可以使用並行引數選項,因此,

Oracle 資料IMPDP/EXPDP匯入匯出

最好以system等管理員建立邏輯目錄,Oracle不會自動建立實際的物理目錄“D:\oracleData”(務必手動建立此目錄),僅僅是進行定義邏輯路徑dump_dir; sql> conn system/[email prote

Oracle匯入匯出 EXP / IMP 和 EXPDP / IMPDP 資料匯出匯入的方法

  【Oracle】EXPDP和IMPDP資料泵進行匯出匯入的方法 一、expdp/impdp和exp/imp的區別 1、exp和imp是客戶端工具程式,它們既可以在客戶端使用,也可以在服務端使用。 2、expdp和impdp是服務端的工具程式,他們只能在oracle服務端

expdpimpdp資料匯出匯入

FLASHBACK_SCN=scn_value:Scn_value用於標識SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同時使用Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_SCN=3585238、FLASHBACK

使用Oracle資料EXPDP/IMPDP匯入匯出

示例為ORACLE 11G匯出到ORACLE 10G匯入用資料泵EXPDP,IMPDP做ORACLE匯入、匯出.  優勢如下:1:可以跨不同表空間2:不同ORACLE版本資料方便匯入,匯出3:效率大大高

Oracle資料Dump匯出匯入

*該匯入匯出方式完全適用於分割槽表* 匯出、匯入前準備 注:使用sys、system等系統使用者操作! 1)建立DIRECTORY目錄物件 CREATE DIRECTORY exp_dir AS '/oracle/db/zone'; --存放dm

Oracle資料expdp/impdp筆記

作者:fbysssmsn:[email protected]  blog:blog.csdn.net/fbysss宣告:本文由fbysss原創,轉載請註明出處關鍵字:oracle 資料泵 expdp/impdp資料泵 是oracle10G的命令必須在伺服器上執行,s

關於oracle資料匯出資料

1.首先用超級管理員登入 >> sqlplus user/[email protected] as sysdba 2.建立目錄 >> CREATE DIRECTORY dump_dir AS 'D:\dump'; 3.給當前需要使用的使用者

使用expdp/impdp資料匯出/匯入資料

資料泵是oracle 10g推出的新功能,expdp/impdp和exp/imp的區別: exp/imp是客戶端工具,可以在客戶端使用,也可以在服務端使用。expdp/impdp是服務端工具,只能在服務端使用。 expdp引數說明 [[email protect

Oracle 資料匯入匯出總結

Oracle資料泵匯入匯出是日常工作中常用的基本技術之一,它相對傳統的邏輯匯入匯出要高效,這種特性更適合資料庫物件數量巨大的情形,因為我日常運維的資料庫物件少則幾千,多則幾萬甚至幾十萬,所以傳統exp/imp就會非常耗時,而資料泵方式就因此脫引而出,下面就詳細總結一下資料

oracle 資料匯入資料匯出

資料泵匯入: 指令 impdp 一:資料庫所有物件的匯入: impdp system/tiger dumpfile=pump_dir:mydatabase_%.dat filesize=100m  nologfile=y  job_name=zhang full=y  es

Oracle資料匯入匯出

  前言 今天王子要分享的內容是關於Oracle的一個實戰內容,Oracle的資料泵。 網上有很多關於此的內容,但很多都是複製貼上別人的,導致很多小夥伴想要使用的時候不能直接上手,所以這篇文章一定能讓你更清晰的理解資料泵。 開始之前王子先介紹一下自己的環境,這裡使用的是比較常用的WIN10系統,Or

使用資料匯出dblink

最近碰到資料泵匯出匯入資料的時候,發現dblink並沒有匯入進來。 今天測試了下,發現了原因。 當dblink,是使用create database link 這樣的語句建立的時候,按照schema匯出匯入,就可以匯出匯入dblink了。 如果建立dbl

總結一Oracle 資料庫命令總結

一、日誌管理 1.強制日誌切換(forcing log switches) alter system switch logfile; 2.強制執行檢查點(forcing checkpoints) alter system checkpoint; 3.增加一個重做日誌組 (adding

資料匯出遠端伺服器資料庫到本地詳解

一、資料庫在伺服器,在本地操作,匯出資料庫到本地 1、cmd下登入資料庫,建立本地使用者 sqlplus sys/1 as sysdba; //oracle建立使用者,只需把所有的dzlnurse改成你要建的使用者名稱字 create user dzlnurse //下面的1是要建立

資料匯出帶有約束的表

近期使用資料泵匯出帶有約束的表,匯入的時候,提示了很多錯誤,一些表幾乎沒有匯入資料。 後來想了想,應該先把所有元資料匯出來,匯入元資料,然後禁用所有的約束。 或者加上引數CONTENT=METADATA_ONLY先匯入元資料,再禁用約束觸發器。再匯入資料。 再次匯入資料,就可以了。

Python連線Oracle資料查詢匯出結果

python連線oracle,需用用到模組cx_oracle,可以直接pip安裝,如網路不好,可下載離線後本地安裝 cx_oracle專案地址:https://pypi.org/project/cx_Oracle/ cx_oracle離線下載地址:https://pypi.org/project/cx_O