ORACLE數據泵expdp導出impdp導入


Oracle 數據泵(expdp/impdp)導入導出方法教程

Oracle數據泵導入導出是日常工作中常用的基本技術之一,我們使用oracle數據庫數據泵導入(impdp)導出(expdp)進行數據庫備份,數據庫遷移等數據庫維護工作。本文主要說明oracle數據庫導入導出的命令。


天下英雄出我輩,一入江湖歲月催
我是愛生活的「無間行者」,努力把實踐過的解決方案分享給大家
如果這篇文章對你有用,一個贊、一個評論、一個關注,我都很開心,給點鼓勵吧,讓我知道你在看。

使用場景:

在工作中,涉及到的Oracle數據庫遷移,備份,還原等,可以使用本教程數據泵導入導出來解決。歡迎補充指導。


參與本教程的素材

  1. Oracle11g
  2. 可視化工具為Oracle SQL Developer
  3. windows命令行

Oracle表空間:

Oracle數據庫被划分成稱作為表空間的邏輯區域——形成Oracle數據庫的邏輯結構。
一個Oracle數據庫能夠有一個或多個表空間,而一個表空間則對應着一個或多個物理的數據庫文件。
表空間是Oracle數據庫恢復的最小單位,容納着許多數據庫實體,如表、視圖、索引、聚簇、回退段和臨時段等。
每個Oracle數據庫均有SYSTEM表空間,這是數據庫創建時自動創建的。
SYSTEM表空間必須總要保持聯機,因為其包含着數據庫運行所要求的基本信息(關於整個數據庫的數據字典、聯機求助機制、所有回退段、臨時段和自舉段、所有的用戶數據庫實體、其它Oracle軟件產品要求的表)。


數據泵導出(expdp):

准備工作

--准備工作EXPNC_DIR路徑創建
--查詢數據庫路徑表
select * from DBA_DIRECTORIES;
--查詢數據庫用戶表
select * from DBA_USERS;
--查詢數據庫表空間
select * from DBA_TABLESPACES;
--查詢數據庫數據文件信息表
select * from DBA_DATA_FILES;

    
    
   
   
           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
--創建邏輯路徑
create directory EXPNC_DIR as 'E:\oracletablespace\expnc';

--命令行執行 expdp操作
cmd->[導出語法]

  • 1
  • 2
  • 3
  • 4
  • 5

導出語法

需要在命令行中執行

--1)按用戶導
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1

--2)並行進程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3

--3)按表名導
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1

--4)按查詢條件導
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20'

--5)按表空間導
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example

--6)導整個數據庫
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

數據泵導入(impdp):

准備工作

--創建表空間
create tablespace "user_new"
DATAFILE 'd:\oracle_tablespace\user_new'
size 500M AUTOEXTEND on next 100M
maxsize unlimited logging extent
management local segment space management auto;

--是否提前創建用戶設置默認表空間
create user users2 IDENTIFIED BY 123 default tablespace "user_new";

grant connect,resource to users2;

--命令行執行 impdp操作
cmd->[導入語法]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

導入語法

需要在命令行中執行

--1)導到指定用戶下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;

--2)改變表的owner
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;

--3)導入表空間
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;

--4)導整個數據庫
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;

--5)追加數據
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

實戰演練

針對數據庫用戶表的復制(改變表的owner)

我們一般使用Oracle是以用戶對象為單位的數據庫表空間。
本次實戰內容為

  1. users用戶下所有的表導出成dmp文件
  2. 使用此dmp文件將數據恢復到users2用戶下。

環境准備

system管理員登錄,創建表空間

C:\Users\Administrator>sqlplus

SQL*Plus: Release 11.2.0.1.0 Production on 星期一 56 13:08:55 2019

Copyright (c) 1982, 2010, Oracle. All rights reserved.

請輸入用戶名: system
輸入口令:

連接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create SMALLFILE tablespace "user"
2 DATAFILE 'E:\oracletablespace\user'
3 size 500M AUTOEXTEND on next 100M
4 maxsize unlimited logging extent
5 management local segment space management auto;

表空間已創建。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在這里插入圖片描述
創建users用戶,設置表空間,並授權

SQL> create user users IDENTIFIED BY 123 default tablespace "user";
用戶已創建。
SQL> grant connect,resource to users;
授權成功。

    
    
   
   
           
  • 1
  • 2
  • 3
  • 4

在這里插入圖片描述

退出並切換到users用戶
在這里插入圖片描述
創建student

SQL> create table student(
  2    id varchar2(32 BYTE),
  3    name varchar2(32 BYTE),
  4    phone varchar2(16 BYTE),
  5    email varchar2(64 BYTE)
  6  );

表已創建。
SQL> insert into student values('1','趙大','123','123@qq.com');
已創建 1 行。
SQL> insert into student values('2','錢二','234','234@qq.com');
已創建 1 行。
SQL> insert into student values('3','李三','345','345@qq.com');
已創建 1 行。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在這里插入圖片描述

導出(expdp)

EXPNC_DIR目錄創建

SQL> create directory EXPNC_DIR as 'E:\oracletablespace\expnc';
目錄已創建。
--如果是expdp users/123@orcl 這個用戶是普通用戶,需要讀寫授權
SQL> grant read,write on directory EXPNC_DIR to users;
授權成功。

    
    
   
   
           
  • 1
  • 2
  • 3
  • 4
  • 5

在這里插入圖片描述

執行 數據泵(expdp )導出

cmd> expdp system/password@orcl schemas=xhs dumpfile=expdp_users.dmp DIRECTORY=EXPNC_DIR

    
    
   
   
           
  • 1

在這里插入圖片描述
EXPNC_DIR目錄下文件已產生
在這里插入圖片描述
此時我們再往users用戶的student表中再插入兩條數據,以此區別兩個用戶表中的數據

SQL>insert into student values('4','劉四','444','444@qq.com');
已創建 1 行。
SQL>insert into student values('5','王五','555','555@qq.com');
已創建 1 行。

    
    
   
   
           
  • 1
  • 2
  • 3
  • 4

導入(impdp)1

使用system管理員創建新的用戶users2

在這里插入圖片描述
執行 數據泵(impdp )導入

cmd>impdp system/password@orcl DIRECTORY=EXPNC_DIR DUMPFILE=expdp_users.dmp REMAP_SCHEMA=users:users2

    
    
   
   
           
  • 1

ORA-31684: 對象類型已存在

操作成功完成,但是出現了錯誤【ORA-31684: 對象類型已存在】這是因為impdp執行的時候會去主動創建一個users2用戶,而我們已經提前創建過用戶了

在這里插入圖片描述

我們查看一下導入之后的結果,發現兩個用戶的student表是不同的
在這里插入圖片描述

導入(impdp)2

刪除復制好的users2,此次導入不提前創建用戶來規避錯誤【ORA-31684: 對象類型已存在

SQL> drop TABLESPACE "user_new" INCLUDING CONTENTS AND DATAFILES;
表空間已刪除
SQL> drop user users2 cascade;
用戶已刪除。

    
    
   
   
           
  • 1
  • 2
  • 3
  • 4

執行 數據泵(impdp )導入

cmd>impdp system/password@orcl DIRECTORY=EXPNC_DIR DUMPFILE=expdp_users.dmp REMAP_SCHEMA=users:users2

    
    
   
   
           
  • 1

不再提示錯誤【ORA-31684: 對象類型已存在
在這里插入圖片描述

在這里插入圖片描述

小結

導入1和導入2的區別:

  1. 導入1提前創建了目標用戶users2並指定了表空間"user_new",即用戶users的表空間是"user",用戶users2的表空間是"user_new"
  2. 導入2是由impdp命令默認創建了用戶users2,兩個用戶的表空間都是"user"。

這里要說一下,
一個數據庫可以有多個實例,
一個實例可以有多個用戶(不同實例下允許相同名字的用戶存在),
一個用戶只能分配一個表空間(不同用戶下允許相同名字的表存在),
一個表空間可以給 n 個用戶使用。

不理解oracle數據庫_實例_用戶_表空間之間的關系
可以參考

  1. http://www.bejson.com
  2. https://www.2cto.com/database/201801/712011.html

備注:該博客僅為學習交流之用,歡迎大家提出意見和建議,不得用於商業用途,如有轉載請標明出處,謝謝合作!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM