`

Oracle expdp/impdp 使用示例

 
阅读更多

在之前的blog

Oracle 10g Data Pump Expdp/Impdp 详解

http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4674224.aspx

exp/imp expdp/impdp 对比 及使用中的一些优化事项

http://blog.csdn.net/tianlesoftware/archive/2010/12/23/6093973.aspx

中对数据泵这块的理论知识有一些说明,但是没有实际操作的例子。 所以在这里就对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

[oracle@qs-dmm-rh2 ~]$ expdp /'/ as sysdba/' directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log parallel=2;

-- 注意使用sys 的格式,还有full=y 导出的是非syssystem用户的对象。

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,会显示该Jobnot running 这时候,我们只需要drop 掉对应的表,在查询dba_datapump_jobs 就没有记录了。 这个也是一种处理方法。

在开始我就说了,这里没有指定Job name 所以系统自动给我们生成了一个:SYS_EXPORT_FULL_02

默认是从SYS_EXPORT_FULL_01开始,因为我之前有一个没有运行的Job,所以这里从2开始了。

2)指定Job_name

[oracle@qs-dmm-rh2 ~]$ expdp /'/ as sysdba/' directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_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 全库导入

[oracle@qs-dmm-rh2 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:bl table_exists_action=replace;

3.11 REMAP_DATAFILE

该全库导出时有用,用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时可能需要该选项。比如把dbunix导入到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 过去了。

3import 我们的数据。 如:

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.

2copy 到其他实例的对应位置

在移动之前先将表空间改成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

3expdp 导出元数据

$expdp /'/ as sysdba /' directory=backup dumpfile=tts.dmp transport_tablespaces=dave

4import 数据

先把表空间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到目标库。

2copy 之间,将表空间改成read only 状态。

3copy之后可以对数据文件进行重命名。 所以,transport_datafiles 也可以用来对数据文件进行重命名和移动位置。

4transport_datafiles 完成之后,不要忘记将表空间改成读写模式。

---------------------------------------------------------------------------------------------------

Blog http://blog.csdn.net/tianlesoftware

网上资源: http://tianlesoftware.download.csdn.net

相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx

DBA1 群:62697716(); DBA2 群:62697977() DBA3 群:62697850()

DBA 超级群:63306533(); DBA4 群: 83829929 DBA5群: 142216823

聊天 群:40132017

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

分享到:
评论

相关推荐

    expdp/impdp命令详解

    Oracle的EXPDP(Export Data Pump)和IMPDP(Import Data Pump)是数据库迁移、备份和恢复过程中的关键工具。这两个命令允许用户高效地导出和导入数据库对象和数据,包括表、视图、索引、存储过程等。下面将详细解释...

    ORACLE expdp-impdp使用

    ### ORACLE expdp-impdp 使用详解 #### EXPDP 命令行选项解析 **1. ATTACH** - **用途**: 该选项用于在客户端会话与已存在的导出任务之间建立联系。 - **语法**: ```plaintext ATTACH=[schema_name.]job_name ...

    Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令

    在 Oracle 10g 及其以上版本中,expdp 和 impdp 命令取代了传统的 exp 和 imp 命令,提供了更多的功能和选项。expdp 命令可以将数据导出到文件中,impdp 命令可以将数据从文件中导入到数据库中。 使用 imp/exp 命令...

    oracle expdp-impdp_用法详解

    ### Oracle EXPDP-IMPDP 用法详解:深入解析...通过上述详尽的介绍,我们不仅了解了Oracle EXPDP-IMPDP命令的基本使用方法,还深入探讨了其高级选项的应用场景,这对于高效管理和操作Oracle数据库中的数据至关重要。

    expdb/impdp使用方法

    在Oracle数据库系统中,expdp(Export Data Pump)和impdp(Import Data Pump)是用于进行大规模数据导出和导入的高效工具。这两个工具利用Oracle的数据泵技术,能够快速、高效地处理大量数据的迁移和恢复。 **...

    Oracle_expdp_impdp用法详解.pdf

    ### Oracle_expdp_impdp用法详解 ...通过本指南提供的示例,您可以掌握如何使用`expdp`和`impdp`进行基本和高级的数据操作。无论是简单的数据导出还是复杂的跨数据库复制,DataPump都能提供强大的支持。

    Oracle_10G使用数据泵(EXPDP和IMPDP)

    ### Oracle 10G 使用数据泵 (EXPDP 和 IMPDP) #### 一、概述 Oracle 数据泵(Data Pump)是 Oracle 10g 版本引入的一种高效的数据导入导出工具,它通过 EXPDP 和 IMPDP 命令提供了一种快速的方法来迁移数据库对象...

    expdp,impdp常用方法.pdf

    - Exp 和 Imp 工具在 10g 之前使用广泛,但自 10g 开始,Oracle 同时保留了这些工具,并引入了数据泵工具 Expdp 和 Impdp。 - **工具使用限制**: - Exp 和 Imp 可以在客户端和服务端使用。 - Expdp 和 Impdp 仅...

    oracle数据泵expdp impdp使用说明

    ### Oracle 数据泵 EXPDP 使用详解 #### 一、概述 Oracle 数据泵(Data Pump)是一种高效的数据迁移工具,主要用于在不同版本的 Oracle 数据库之间进行数据传输或备份恢复操作。它由两个主要组件组成:`expdp` 和 ...

    ORACLE数据泵impdp与expdp

    - EXPDP 和 IMPDP 必须在 Oracle 服务器端执行,不能在客户端使用。 - EXP 导出文件只能用 IMP 导入,而 EXPDP 文件只能用 IMPDP 导入,两者之间不兼容。 - 通过指定参数,可以对导出和导入过程进行精确控制,例如...

    Oracle数据导出导入简介

    - 在使用EXP/IMP或EXPDP/IMPDP之前,请确保已经正确配置了Oracle客户端环境,并设置了相应的TNS监听器配置。 - 对于大型数据库,建议使用EXPDP/IMPDP来提高导出导入的效率。 - 导入导出过程中,可以使用`IGNORE`参数...

    expdp+impdp_用法详解.pdf

    ### DataPump (expdp 和 impdp) 用法详解 #### 一、DataPump 概述 Oracle Data Pump 是 Oracle 数据库提供的一种高效工具,用于数据的导出和导入操作。它通过使用专用 API 来替代传统的 SQL 命令实现数据的快速...

    Centos7.6下oracle impdp导入和expdp导出.docx

    本文档将详细介绍如何在 Centos7.6 操作系统环境下利用 Oracle 的数据泵功能(Data Pump)来进行数据的导出(expdp)和导入(impdp)。数据泵是 Oracle 提供的一种高效的数据迁移工具,它能够帮助用户快速地将数据库...

    Oracle数据库文件的导入导出

    Oracle提供了多种工具来实现这一功能,包括SQL*Loader、Data Pump(expdp/impdp)以及传统的exp/imp等。下面将详细解释这些工具的使用方法和相关知识点。 1. SQL*Loader: SQL*Loader是Oracle提供的一种快速数据...

    oracle数据库备份恢复

    随着Oracle版本的发展,Oracle引入了更加强大的`EXPDP/IMPDP`工具,这些工具基于直接路径I/O技术,能够提供更高的性能和更多的特性。 **3.1 EXPDP(Export Data Pump)指令** - **USERID**:这是命令行中的第一个...

    Oracle DMP备份文件导入(impdp)导出(expdp)方法

    expdp sys/oracle directory=data_pump_dir dumpfile=mydata.dmp logfile=expdp_mydata.log ``` ### 二、导入(impdp) 1. **命令格式**: ``` impdp [username/password]@[database_connection] directory=dir_...

    exp/imp2导入导出

    Oracle 提供了多种工具用于完成这项任务,其中 `exp` 和 `imp`(以及它们的新版本 `expdp` 和 `impdp`)是两个广泛使用的命令行工具,用于将数据库中的数据和对象导出为一个文件或将该文件导入到数据库中。...

    Oracle expdp

    博客链接<https://ollevere.iteye.com/blog/1855382>可能会提供更具体的使用示例和技巧,建议参考学习以深入理解Oracle expdp的使用。 在处理expdp导出的.dmp文件时,要注意数据安全性和兼容性问题。导出文件可能...

Global site tag (gtag.js) - Google Analytics