首页 > 数据库技术 > 详细

oracle 数据泵介绍及使用

时间:2021-04-07 20:17:30      阅读:24      评论:0      收藏:0      [点我收藏+]

数据泵:

数据泵可以高效备份,复制,保护和传输大量得数据和元数据。可以通过下列方式使用数据泵:

1.对整个数据库或数据自己进行实时逻辑备份;

2.为测试或开发,复制整个数据库或数据子集;

3.快速生成用于重建对象的DDL代码;

4.通过旧版本导出数据,然后像新版本导入数据的方式,升级数据库。

数据泵包含了 exp/imp实用程序的功能:

1.高效处理大量数据的功能, 可以高效导出和导入大量数据。

2.交互式命令行使用程序,使用它可以先断开连接,然后恢复连接活动的数据泵作业。

3.在不创建数据泵文件的情况下,从远程数据库导出大量数据,并将这些数据直接导入本地数据库。

4.通过导入和导出工作,在运行时更改方案,表空间,数据文件和存储位置;

5.精细过滤对象和数据;

6.对目录对象应用受控安全模式(通过数据库);

7.高级功能,如压缩和加密。

数据泵的结构 数据泵由以下组件构成:

1.expdp (数据泵导出实用程序);

2.impdp (数据泵导入实用程序);

3.DMBS_DATAPUMP软件包(数据泵API);

4.DBMS_METADATA软件包(数据泵元数据API);

? 在导出和导入数据和元数据时,expdp 和 impdp 实用程序会使用内置的DBMS_DATAPUMP DBMS_METADATA 软件包。DBMS_DATAPUMP软件包可以在不同的数据库环境之间移动整个数据库或数据子集。DBMS_MATEDATA软件包可以导出和导入数据库对象的信息。 当启动数据泵导出和导入作业时,数据库服务器上就会初始化一个OS主进程。这个主进程的名称格式为 ora_dmNN_。在Linux和Unix系统中,可以使用ps命令查看进程。

ps -ef |grep ora_dm

因为数据泵使用其内部的PL/SQL代码执行操作,所以需要使用共享池中的一些内存加载PL/SQL软件。如果共享池中空间不足,系统会提示

ORA-04031:unable to allocate bytes of shared memory…

错误提示,并中断数据泵。当出现该错误时,可以将数据库参数SPARED_POOL_SIZE设置为50M以上。

执行导出操作[简例]

在运行数据泵导出作业是需要进行环境配置:

1.创建指向OS目录的数据库目录对象,这个OS目录用于读/写数据泵文件;

2.为执行导出/导入操作的数据库用户赋予读写目录对象的权限;

3.在OS命令提示符界面中运行expdp实用程序。

 --创建数据库目录对象
    create directory dp_dir as ‘/u02/dumpfile‘;
    --查看目录对象的细节
    select owner,directory_name,directory_path from dba_directories;
    
    --为用户赋予访问目录对象的权限
    grant read,write on directory dp_dir to scott;
    
    --执行导出操作
    create table inv(inv_id number);
    insert into inv values (1);
    
    --使用非SYS用户导出这个表。
    expdp scott/tiger directory=dp_dir tables=inv dumpfile=exp.dmp logfile=exp.log

导入表

导入处理过程和导出处理过程类似:
1.创建指向OS目录的数据库目录对象,这个OS目录用于写/读数据泵文件;
2.为执行导出/导入操作的数据库用户赋予读写目录对象的权限;
3.在OS命令提示符界面中运行impdp实用程序。

--删除INV表
    drop table inv purge;
    
    --通过导出的数据泵文件重建INV表;
    impdp scott/tiger directory=dp_dir dumpfile=exp.dmp logfile=imp.log
    
    --使用参数文件
    创建 exp.par 参数文件
    vi exp.par 
    
    userid=scott/tiger
    directory=dp_dir
    dumpfile=exp.dmp
    logfile=exp.log
    tables=inv
    reuse_dumpfiles=y
    
    使用PARFILE命令行选项引用参数文件,执行导出操作:
    expdp parfile=exp.par

深入了解导出和导入操作

数据泵多种模式:

1.全数据库级;

2.方案级;

3.表级;

4.表空间级;

5.可传输表空间级;

expdp/impdp命令常用参数

REMAP_SCHEMA

众所周知:IMP工具的FROMUSER和TOUSER参数可以实现将一个用户的的数据迁移到另外一个用户。

impdp数据泵使用REMAP_SCHEMA参数来实现不同用户之间的数据迁移;语法:

REMAP_SCHEMA=source_schema:target_schema
impdp orcldev/oracle@orcl DIRECTORY=backup_path DUMPFILE=oracldev.dmp schemas=orcldev 

REMAP_SCHEMA=orcldev:orcltwo

与REMAP_SCHEMA类似的参数选项,如:

REMAP_TABLESPACE 将源表空间的所有对象导入目标表空间。

REMAP_TABLE 参数将源表数据映射到不同的目标表中

impdp orcldev/oracle@orcl DIRECTORY=backup_path dumpfile=oracldev.dmp remap_table=TAB_TEST:TEST_TB

数据导入到TEST_TB表中,但是该表的索引等信息并没有相应的创建,需要手工初始化。

DIRECTORY

指定转储文件和日志文件所在的目录
DIRECTORY=directory_object
Directory_object用于指定目录对象名称.需要注意,目录对象是使用CREATE DIRECTORY语句建立的对象,而不是OS目录

Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump
DUMPFILE

于指定转储文件的名称,默认名称为expdat.dmp
DUMPFILE=[directory_object:]file_name [,….]
Directory_object用于指定目录对象名,file_name用于指定转储文件名.需要注意,如果不指定directory_object,导出工具会自动使用DIRECTORY选项指定的目录对象

Expdp scott/tiger DIRECTORY=dump1 DUMPFILE=dump2:a.dmp
ESTIMATE_ONLY

指定是否只估算导出作业所占用的磁盘空间,默认值为N
EXTIMATE_ONLY={Y | N}
设置为Y时,导出作用只估算对象所占用的磁盘空间,而不会执行导出作业,为N时,不仅估算对象所占用的磁盘空间,还会执行导出操作.

Expdp scott/tiger ESTIMATE_ONLY=y NOLOGFILE=y
ESTIMATE

指定估算被导出表所占用磁盘空间分方法.默认值是BLOCKS
ESTIMATE={BLOCKS | STATISTICS}
设置为BLOCKS时,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间,设置为STATISTICS时,根据最近统计值估算对象占用空间

Expdp scott/tiger TABLES=emp ESTIMATE=STATISTICS DIRECTORY=dump DUMPFILE=a.dump
FLASHBACK_SCN

指定导出特定SCN时刻的表数据
FLASHBACK_SCN=scn_value
Scn_value用于标识SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同时使用

Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_SCN=358523
FLASHBACK_TIME

指定导出特定时间点的表数据
FLASHBACK_TIME=”TO_TIMESTAMP(time_value)”

Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_TIME=“TO_TIMESTAMP(’25-08-2004 14:35:00’,’DD-MM-YYYY HH24:MI:SS’)”
FULL

指定数据库模式导出,默认为N
FULL={Y | N}
为Y时,标识执行数据库导出.

LOGFILE

指定导出日志文件文件的名称,默认名称为export.log
LOGFILE=[directory_object:]file_name
Directory_object用于指定目录对象名称,file_name用于指定导出日志文件名.如果不指定directory_object.导出作用会自动使用DIRECTORY的相应选项值.

Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp logfile=a.log

指定数据库链名,如果要将远程数据库对象导出到本地例程的转储文件中,必须设置该选项.
如:

expdp gwm/gwm directory=dir_dp NETWORK_LINK=igisdb tables=p_street_area dumpfile =p_street_area.dmp logfile=p_street_area.log job_name=my_job

igisdb是目的数据库与源数据的链接名,
dir_dp是目的数据库上的目录
而如果直接用使用连接字符串(@fgisdb),expdp属于服务端工具,expdp生成的文件默认是存放在服务端的

PARALLEL

指定执行导出操作的并行进程个数,默认值为1
注:并行度设置不应该超过CPU数的2倍,如果cpu为2个,可将PARALLEL设为2,在导入时速度比PARALLEL为要快。而对于导出的文件,如果PARALLEL设为2,导出文件只有一个,导出速度提高不多,因为导出都是到同一个文件,会争抢资源。所以可以设置导出文件为两个,如下所示:

expdp gwm/gwm directory=d_test dumpfile=gwmfile1.dp,gwmfile2.dp parallel=2
PARFILE

指定导出参数文件的名称
PARFILE=[directory_path] file_name

SCHEMAS

该方案用于指定执行方案模式导出,默认为当前用户方案.

STATUS

指定显示导出作用进程的详细状态,默认值为0

TABLES

指定表模式导出

TABLESPACES/TABLESPACE

指定要导出表空间或表空间列表

VERSION

指定被导出对象的数据库版本,默认值为COMPATIBLE.
VERSION={COMPATIBLE | LATEST | version_string}
为COMPATIBLE时,会根据初始化参数COMPATIBLE生成对象元数据;为LATEST时,会根据数据库的实际版本生成对象元数据.version_string用于指定数据库版本字符串.调用EXPDP

特别注意:如果后续要导入的数据库版本低,所有导出命令就需要在后面加一个version=指定版本。例如11g -> 10g,假设10g具体版本为10.2.0.1,那么就加一个版本的参数version=10.2.0.1

TABLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | FRPLACE }

当设置该选项为SKIP时,导入作业会跳过已存在表处理下一个对象;当设置为APPEND时,会追加数据,为TRUNCATE时,导入作业会截断表,然后为其追加新数据;当设置为REPLACE时,导入作业会删除已存在表,重建表病追加数据,注意,TRUNCATE选项不适用与簇表和NETWORK_LINK选项;

REMAP_SCHEMA

该选项用于将源方案的所有对象装载到目标方案中:REMAP_SCHEMA=source_schema:target_schema

REMAP_TABLESPACE

将源表空间的所有对象导入到目标表空间中:REMAP_TABLESPACE=source_tablespace:target:tablespace

REMAP_DATAFILE

该选项用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时可能需要该选项.
REMAP_DATAFIEL=source_datafie:target_datafile

CONTENT

该选项用于指定要导出的内容.默认值为ALL
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
当设置CONTENT为ALL 时,将导出对象定义及其所有数据.为DATA_ONLY时,只导出对象数据,为METADATA_ONLY时,只导出对象定义

EXCLUDE

选项用于指定执行操作时释放要排除对象类型或相关对象

EXCLUDE=object_type[:name_clause] [,….]
Object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对象.EXCLUDE和INCLUDE不能同时使用

 Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=VIEW
REUSE_DATAFILES【impdp】

该选项指定建立表空间时是否覆盖已存在的数据文件.默认为N REUSE_DATAFIELS={Y | N}

SKIP_UNUSABLE_INDEXES 【impdp】

指定导入是是否跳过不可使用的索引,默认为N

TRANSPORT_DATAFILES【impdp】

该选项用于指定搬移空间时要被导入到目标数据库的数据文件

TRANSPORT_DATAFILE=datafile_name

Datafile_name用于指定被复制到目标数据库的数据文件

Impdp system/manager DIRECTORY=dump DUMPFILE=tts.dmp TRANSPORT_DATAFILES=’/user01/data/tbs1.dbf

几种模式介绍

全数据库导出

全库导出信息由下列部分组成:

1.用于重建表空间,用户,表,索引,约束,触发器,序列,以存储的PL/SQL脚本等元素的所有DDL语句

2.所有表中的数据;(SYS用户的表除外);

FULL参数设置为Y可以执行全库导出操作,必须使用拥有DBA权限或者DATAPUMP_EXP_FULL_DATABASE角色的用户才能执行该操作。

expdp scott/tiger directory=dp_dir dumpfile=full.dmp logfile=full.log full=y

全库导出不会导出数据库中的所有元素

1.SYS方案中的对象不会导出。如果考虑可以将SYS方案中对象从一个数据库中导出,然后将他们导入另一个数据库会出现怎样的情况?SYS方案会覆盖数据字典内部的表/视图,因而 破坏数据库。因此,数据泵不会导出SYS方案中的对象。

2.不会导出索引数据,更确切的说,不会导出用于重建索引的索引DDL代码

impdp scott/tiger directory=dp_dir dumpfile=full.dmp logfile=fulllog.dmp full=y

1.导入作业会先尝试重建所有表空间 。如果表空间已经存在,或者表空间依存的目录路径不存在,那么创建表空间的操作就会失败,导入作业执行下一个任务。

2.导入作业会更改SYS和SYSTEM用户账号,使它们包含导出的密码。因此,对产品系统执行了全库导入操作后名为,为谨慎起见,应为新环境更改密码。

3.导入作业会创建导出文件中的所有用户。如果某个用户已经存在,系统就会提示错误信息,而导入作业会执行下一个任务。

4.从数据库导出的用户会使用原来的密码,你可以根据自己的安全标准,更改这些密码。

5.表会被重建。如果表已经存在并含有数据,你必须设置导入作业处理该情况的方法。可以设置导入作业跳过,替换或截断该表,也可以设置将数据附加到该表中。

6.当所有表都重建完并加载了数据后,导入作业会创建相关索引。

7.在能够获得统计数据的情况下,导入作业还会导入统计数据。而且,导入作业还会实例化对象权限。

方案级导入导出

方案级导出操作经常用于将一个或多个用户从一个环境复制到另一个环境。

expdp scott/tiger directory=dp_dir dumpfile=scott.dmp logfile=scott.log

与仅导出运行导出作业的用户不同,通过SCHEMAS参数可以导出多个用户

expdp scott/tiger directory=dp_dir dumpfile=user.dmp logfile=user.log schemas=scott,cmrmapp;

引用方案级数据泵文件可以执行方案级导入操作:#这里需要原数据库跟新数据库环境用户一样

impdp scott/tiger directory=dp_dir dumpfile=scott.dmp logfile=scott.log

在执行方案级导入操作时,需要注意下列几点:

1.方案级导出文件中不含有表空间,所以导入时需要创建对应的表空间

2.导入作业会重建数据泵文件含有的所有用户。如果用户已经存在,系统会显示错误提示,而导入作业会继续执行下一个任务。

3.导入作业会通过数据泵文件重置用户的密码。

4.用户拥有的表会被导出并加载数据。如果表已经存在,则必须使用 TABLE_EXISTS_ACTION 参数设置数据泵处理该情况。

table_exists_action=replace 覆盖数据参数

在使用全库导出数据泵文件时,也可以执行方案级导入操作。要做到这一点,可以设置从全库导出文件提取哪个用户/方案

impdp scott/tiger directory=dp_dir dumpfile=full.dmp logfile=user.log schemas=scott,cmrmapp
表级

TABLES参数可以使用数据泵操作特定的表:

expdp scott/tiger directory=dp_dir dumpfile=tables.dmp logfile=tables.log tables=emp,test
impdp scott/tiger directory=dp_dir dumpfile=tables.dmp logfile=tables.log --导入时可有可无 tables=emp,test

在使用全库导出或者方案级导出数据泵文件时,也可以执行表级导入操作。要做到这一点,应设置从全库导出或者方案导出数据泵文件提取哪些表:

impdp scott/tiger directory=dp_dir dumpfile=full.dmp logfile=full.log tables=scott.emp
表空间级:

表空间级导出和导入作业可以操作特定表空间中的对象。

expdp scott/tiger directory=dp_dir dumpfile=users.dmp logfile=users.log tablespaces=users

利用表空间级导出文件,可以执行表空间级导入操作:

impdp scott/tiger directory=dp_dir dumpfile=users.dmp logfile=users.log --导入时可有可无 tablespaces=users

设置TABLESPACES参数可以使用全库dmp导入文件,执行表空间级导出操作:

impdp scott/tiger directory=dp_dir dumpfile=full.dmp logfile=fullimp.log tablespaces=users

表空间级导入操作会创建表空间含有的所有表和索引,该操作不会重建表空间本身。所以需要在新建库上做好表空间的创建,需要与备份时的表空间一致

数据传输

简单示例:

需求:迁移oracle11g-01上的dbuser用户的所有数据到oracle11g-02上的user用户里,两者使用的表空间名称一致;

导出:

1.查询或创建逻辑目录

select * from dba_directories;

create directory <dir_name> as ‘/data/...‘;

2.为 oracle用户授予访问数据目录的权限,输入命令:

Grant read,write on directory data_dir to dbuser;

3.导入导出操作授权,输入命令:

grant exp_full_database,imp_full_database to dbuser;

4.数据导出,执行命令:

expdp dbuser/123456@orcl schemas=dbuser dumpfile=expdp.dmp directory=data_dir logfile=expdp.log
expdp [为用户名]/[密码]@[服务名]
schemas=[为用户名]
dumpfile=[导出数据库文件(可自命名)]
directory=[目录名]
logfile=[日志文件文件名(可自命名)]

导入:

5.创建逻辑目录路径:

create directory <dir_name> as ‘/data/...‘;

select * from dba_directories;  #查询逻辑目录

6.为oracle用户授予访问数据目录的权限,输入命令:

Grant read,write on directory data_dir to user;

7.导入导出操作授权,输入命令:

grant exp_full_database,imp_full_database to user;

8.数据导入:

impdp user/123456@orcl REMAP_SCHEMA=dbuser:user table_exists_action=replace directory=data_dir dumpfile=expdp.dmp logfile=impdp.log
impdp [用户名]/[密码]@[服务名]
REMAP_SCHEMA=[源用户名1]:[目标用户名2]
table_exists_action=replace /*存在的表动作(覆盖)*/
directory=[目录名]
dumpfile=[.dmp文件名]
logfile=[.log文件名]

9.其他情况

大多数情况下,不同数据库不会使用相同的表空间来存储数据,这时就需要使用一个参数:REMAP_TABLESPACE,使用方法与REMAP_SCHEMA一致:

impdp user/123456@orcl directory=jy schemas=dbuser REMAP_SCHEMA=dnuser:user REMAP_TABLESPACE=dbuser_tablespace:user_tablespace table_exists_action=replace dumpfile=expdp.dmp logfile=impdp.log

参考文档:https://www.cnblogs.com/jyzhao/p/4522868.htmlOracle简单常用的数据泵导出导入(expdp/impdp)命令举例(上)
https://www.cnblogs.com/jyzhao/p/4530575.html#4.1Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(下)

https://blog.csdn.net/weixin_34013044/article/details/91820125

oracle 数据泵介绍及使用

原文:https://www.cnblogs.com/yhy223/p/14628675.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!