oracle数据泵导出导入

oracle数据泵导出工具(其后为方便读写,简称为导出),它可以将数据和元数据加载到一系列的操作系统文件中,这些文件也被称之为一个数据泵文件集。数据泵文件集只可以被数据泵导入工具(其后为方便读写,简称为导入)在导入时使用。数据泵文件集可以被导入到相同的数据库系统中,也可以被导入到另一个数据库系统中。

数据库文件集是由包含表数据、数据库对象元数据和控制信息的一个或多个硬盘文件组成。这些文件内容是以专用的二进制格式写入的,导入工具使用这些文件定位每个数据库对象在数据泵文件集中的位置。

参照

https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_export.htm#i1006293

https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_import.htm#SUTIL300

expdp

前置要求

因为数据泵文件是由服务器写入而非客户端,所以数据库管理员必须创建一个目录对象,该对象在数据库服务器定义一个路径,供写入数据泵文件内容。

对于导出操作,可以在导出操作定义执行命令时指定数据泵文件路径,也可以在操作执行期间指定数据泵文件路径。例如,在导出操作期间,如果你发现空间不足,那么,可以通过以交互模式使用导出工具的ADD_FILE命令增加额外的数据泵文件路径。但是对于导入操作,所有的数据泵文件都必须在定义执行命令时指定好。

使用数据泵时,要求要指定目录对象。一个目录对象其实就是一个名称,该名称映射给了一个文件系统上的目录路径。例如创建一个映射到了一个目录路径/usr/apps/datafiles的目录对象dpump_dir1。

SQL> CREATE DIRECTORY dpump_dir1 AS '/usr/apps/datafiles';

创建目录对象之后,创建这个对象的用户必须授权read或write给需要的用户。例如,要允许hr用户去读写dpump_dir1目录对象,那么dba必须执行如下命令

SQL> GRANT READ, WRITE ON DIRECTORY dpump_dir1 TO hr;

注意:数据泵使用时,目录对象有默认值,unix或者windows,默认的目录对象都是data_pump_dir,是在数据库创建时创建的。见如下截图

/u01/app/oracle/admin/orcl/dpdump/

数据泵使用时对于目录对象处理的先后顺序:

  1. 如果在指定文件时,也指定了目录对象,那么就会使用指定的这个目录对象。目录对象与文件名称之间使用冒号。
  2. 如果指定文件时,不是【目录对象:数据泵文件】的这种方式,那么需要在数据泵命令中使用directory参数指定目录对象。
  3. 如果1和2都没有,那么会使用环境变量data_dump_dir,这个环境变量是使用数据泵所在的操作系统命令创建的。数据库服务器上必须创建目录对象,例如

SQL> CREATE DIRECTORY DUMP_FILES1 AS '/usr/apps/dumpfiles1';

然后(在数据泵所在的操作系统)将目录对象赋值给环境变量

%setenv DATA_PUMP_DIR DUMP_FILES1

%expdp hr TABLES=employees DUMPFILE=employees.dmp

     4.如果以上3中情况都不存在,数据泵则会使用默认的目录对象data_pump_dir。

参数说明

directory 默认值data_pump_dir,指定导出时文件写入的位置。

dumpfile 默认值expdat.dmp,指定导出文件名称

full 默认值no,yes时导出全库

logfile 默认值export.log,可选,记录导出时的日志

schemas 默认值是当前用户的schema,

tables 没有默认值,

query 没有默认值,

content 默认值all,all全部包括数据和元数据;data_only只是表的行数据,没有数据库对象定义;metadata_only只是数据库对象定义,没有表的行数据。要注意如果参数指定的是content=metadata_only,那么稍后的导入操作中,这个数据泵文件所导入的任何索引、表统计信息在导入后都会被锁定。

实例演示

grant exp_full_database,imp_full_database to test2;

完整库模式(要执行这个必须要有DATAPUMP_EXP_FULL_DATABASE角色)

如果用户已经被授予了dba角色,则以上都不需要。

expdp test3/test3 dumpfile=test240809.dmp logfile=test240809.log full=yes

用户模式(不指定schemas默认是当前用户)

expdp test3/test3 dumpfile=test240809.dmp logfile=test240809.log

表模式

--1.指定表导出

expdp test3/test3 tables=ttable dumpfile=test240809.dmp logfile=test240809.log

--2.导出时不导出表的数据,对比上图,并没有显示导出了多少行数据

expdp test3/test3 tables=ttable content=metadata_only dumpfile=test240809.dmp logfile=test240809.log

--3.导出表时加入对数据的要求

expdp test3/test3 tables=ttable dumpfile=test240809.dmp logfile=test240809.log query=ttable:\"where c1 =\'c\' \"

impdp

前置要求

同前

参数说明

directory 默认值data_pump_dir,指定导入时文件读取的位置。

dumpfile 默认值expdat.dmp,指定导入文件名称

full 默认值no,yes时导入全库

logfile 默认值export.log,可选,记录导入时的日志

schemas 默认值是当前用户的schema,

tables 没有默认值,

query 没有默认值,

remap_schema 没有默认值,remap_schema=source_schema:target_schema

实例演示

用户模式(不指定schemas默认当前用户是目标schema)

schema模式导入时,只有属于指定schema的对象才会被导入

源可以是full、table、tablespace、schema模式导出的数据泵文件集

impdp test4/test4 dumpfile=test240809.dmp logfile=test2408092.log remap_schema=test3:test4

表模式tables=[schema_name.]table_name:[partition_name]

表模式导入要使用tables参数,其值是你指定的一个逗号分割的表列表

表模式的源可以是full、schema、tablespace模式导出的数据泵文件集

表模式这个句法的含义是要从数据泵文件集中导入到指定的schema.table或partition

若没有指定schema_name,那么默认就是当前用户;若指定的schema不是当前用户,则必须要有datapump_imp_full_database角色,指定那些不在你schema中的tables

--1.指定表导入

impdp test4/test4 tables=ttable dumpfile=test240809.dmp logfile=test2408092.log remap_schema=test3:test4 remap_table=test3.ttable:ttable

impdp test4/test4 tables=ttable dumpfile=test240809.dmp logfile=test2408092.log remap_table=test3.ttable:test4.ttable table_exists_action=append

expdp test3/test3 tables=ttable dumpfile=test240812.dmp logfile=test240812.log content=all

impdp test4/test4@orcltns tables=ttable dumpfile=test240812.dmp logfile=test2408122.log remap_table=test3.ttable:test4.ttable table_exists_action=append

说明:表模式导入时异常如下,未解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值