expdp和impdp管理(逻辑导入导出)

Posted vmsysjack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了expdp和impdp管理(逻辑导入导出)相关的知识,希望对你有一定的参考价值。

expdp可以将数据库中的元数据与行数据导出到操作系统的转储文件.

1).使用create directory语句创建目录对象

SQL> create or replace directory dumpdir as /opt/oracle/dump;

2).使用grant语句为用户授予目录对象的读写权限

SQL> grant read,write on directory dumpdir to jack; -- jack 为用户名

3).查询数据字典视图dba_directories查询数据库所有的目录对象

SQL> select * from dba_directories;

expdp运行方式:
1. 命令行接口: 在命令行中直接指定参数设置
2. 参数文件接口: 将参数的设置信息存放到一个参数文件中,在命令行中用 ParFile参数指定参数文件
3. 交互式命令接口: 通过交互式命令进行导出作业管理.

expdp导出模式:
1. 全数据库导出: 通过参数full指定,导出整个数据库,需要有datadump_exp_full_database角色

2. 指定模式导出: 通过参数schemas指定,导出指定模式中的所有对象,需要datadump_exp_full_database角色可以导出任意模式,不能导出sys模式的对象
    注意: 作用在表上的触发器,当表所在的模式被导出时,触发器所在的模式不在导出模式列表中,则该触发器不会被导出

3. 指定表空间导出: 通过参数tableSpace指定,导出指定表空间中所有表及其依赖对象的元数据和行数据.

4. 指定表导出: 通过参数tables指定,导出指定模式中的所有表,分区及其依赖对象,如果指定了参数transporTable=always,则只有对象元数据被导出.
              可以通过复制数据文件来快速移动数据到目标数据库.如果不同版本需要使用RMAN进行操作

5. 传输表空间导出: 通过参数tranSport_tablespaces指定,导出指定表空间中所有表及其依赖对象的元数据,表空间包含的数据文件需要单独进行复制,
                  传输表空间导入的时候需要导入包含表空间元数据的转储文件,并指定相应的数据文件.
---------------------------------------------------------------------------------------------
attach: 导出操作连接到一个作业
compression: 指明对转储文件中的数据进行压缩
content: 指定要导出的内容
    content=[all|metadata_only|data_only];默认为all

directory: 指定转储文件和日志文件所在位置的目录对象
dumpfile: 指定转储文件名称列表
encryption: 对转储文件中的数据进行加密
encryption_algorithm:指定加密算法
encryption_mode:指定生成加密秘钥的方法
encryption_password: 设置转储文件中加密数据的口令秘密钥
estimate:指定用于估计导出作业中每个表中数据占用磁盘空间大小的方法
    estimate=[blocks|statistics];默认为blocks

estimate_only:指定估计导出作业占用磁盘空间大小时是否真正进行导出操作
exclude: 指定导出操作中要排除的对象和对象元数据
    exclude=function exclude=procedure 
    exclude=package  exclude=index: "LIKE ‘emp%‘"

include: 指定导出操作中要导出的对象类型和对象的元数据

job_name: 指定导出作业的名称
logfile:  指定导出日志文件名称,默认为export.log
network_link: 指定网络导出时的目标数据库链接名称
nologfile: 是否生成导出日志文件,默认为no
parallel: 指定执行导出作业时最大的并行进程个数,默认为1
ParFile: 指定参数文件的名称
        parfile=/opt/aa.txt

query: 指定导出操作中select语句中的数据过滤条件
        expdp jack/jack directory=dumpdir dumpfile=exp.dmp
        query=emp:"where dept_id>10 and sal>500"

reuse_dumpfiles: 指定是否覆盖已经存在的同名转存文件,默认为no
sample: 指定要导出数据的百分比
schemas: 指定进行模式导出及模式名称列表
status: 指定显示导出作业状态的时间间隔,默认值为0,表示操作结束时显示

tablespaces: 指定进行表空间模式导出及表空间名称列表
        expdp jack/jack directory=dumpdir dumpfile=tbs.dmp
        tablespaces=tbs1,tbs2,tbs3
transport_full_check: 在传输表空间导出模式中指定是否进行导出表空间的对象与非对象之间依赖关系的检查,默认值为N

transport_tablespaces: 指定进行传输表空间模式导出及表空间名称列表
        transport_tablespaces=tbs1

transporTable: 指定导出表,分区以及分区的元数据时是否需要使用transporTable参数;默认为never
        transportable=[always|never]

filesize: 指定转储文件的最大尺寸,默认为0,表示16TB
    filesize=integer[B|KB|MB|GB|TB]

flashback_scn:指定导出操作终止的SCN,即将来数据可以闪回到的SCN位置
    impdp jack/jack directory=dumpdir flashback_scn=992311 network_link=source_db_link

flashback_time: 指定导出操作终止的time,即将来数据可以闪回到的time位置
    impdp jack/jack directory=dumpdir network_link=source_db_link 
    flashback_time="TO_TIMESTAMP(‘25-08-2000 14:34:00‘,‘DD-MM-YY HH24:MI:SS‘)"

full: 指定是否全数据库导出,包括所有放数据与元数据库

remap_datafile: 将源数据文件名转换为目标数据文件名,用户导入时候需要datapump_imp_full_database角色
    remap_datafile=source_datafile:target_datafile

remap_schema: 将源模式中的所有对象导入目标模式中
    remap_schema=source_schema:target_schema


例1:
expdp 
jack/jack  
directory=dumpdir 
dumpfile=emp.dmp 
compression=metadata_only  
content=metadata_only 

例2: 导出指定表
expdp jack/jack
directory=dumpdir
dumpfile=emp.dmp
logfile=emp_dept.log
tables=emp,dept
job_name=emp_dept_job
parallel=3

例2-1: 通过条件导出指定表
expdp jack/jack
directory=dumpdir
dumpfile=emp.dmp
logfile=emp.log
tables=emp
nologfile=y
query emp:"where dept_id>50 and sal<1000"

例3: 导出指定模式
expdp jack/jack
directory=dumpdir
dumpfile=jack.dmp
logfile=jack.log
schemas=jack 
job_name=exp_jack_schema

例3: 导出指定表空间
expdp jack/jack
directory=dumpdir
dumpfile=jack.dmp
logfile=jack.log
tablespaces=example,users

例4: 导出指定传输表空间,将一个或多个表空间中所有元数据信息导出到转储文件中
expdp jack/jack
directory=dumpdir
dumpfile=jack.dmp
logfile=jack.log
transport_tablespaces=example,users 
transport_full_check=y

例5: 导出数据库,导出所有对象的元数据及行数据导出到转储文件
expdp jack/jack
directory=dumpdir
dumpfile=expfull.dmp
full=yes
nologfile=yes

例6: 导出参数,通过指定的参数文件进行导出作业,需要先编辑参数文件
准备参数文件
cat jack.txt
    schemas=jack 
    dumpfile=filter.dmp
    directory=dumpdir
    logfile=filter.log                
    include=TABLE:"IN (‘EMP‘,‘DEPT‘)"    #指定导出的表
    include=INDEX:"LIKE ‘emp%‘"          #指定导出的索引

expdp jack/jack 
parfile=/opt/jack.txt

####
impdp导入
####
1. 导入全库: 通过参数full
2. 导入指定模式: 通过参数schema
3. 导入指定表: 通过参数tables
4. 导入指定表空间: 通过参数tablespaces
5. 导入传输表空间: 通过参数transport_tablespaces,利用network_link指定数据库链接

remap_datafile: 将源数据文件名转换为目标数据文件名,用户导入时候需要datapump_imp_full_database角色
    remap_datafile=source_datafile:target_datafile

remap_schema: 将源模式中的所有对象导入目标模式中
    remap_schema=source_schema:target_schema

remap_table: 允许在导入操作过程中重命名表
    remap_table=[schema.]old_tablename[.partition]:new_tablename

remap_tablespace: 将源表空间所有对象导入目标表空间中
    remap_tablespace=source_tablespace:target_tablespace

remap_datafiles: 创建表空间时是否使用已经存在的数据文件
    reuse_datafiles=[Y|N]

例1: 导入指定模式
expdp system/oracle 
schemas=jack 
directory=dumpdir 
dumpfile=jack.dmp

例2: 将源库jack模式导入到目标库hr模式
impdp system/oracle 
directory=dumpdir 
dumpfile=hr.dmp
remap_schema=jack:hr   ##jack为源模式,hr为目标模式

例3: 将源库表空间tbs1与目标库表空间tbs5转换
impdp jack/jack 
directory=dumpdir 
dumpfile=emp.dmp 
remap_tablespace=tbs1:tbs5

例4:
impdp jack/jack
directory=dumpdir 
dumpfile=expfull.dmp 
full=yes
logfile=reuse.log
reuse_datafiles=yes

schemas: 指定进行模式导入及模式名称列表
    schemas=schema_name[, ...] 默认为当前用户模式
impdp jack/jack directory=dumpdir schemas=jack logfile=schemas.log dumpfile=exp.dmp

skip_unusable_indexs: 指定导入操作时是否跳过不可使用的索引
    impdp jack/jack directory=dumpdir dumpfile=expfull.dmp logfile=skip.log skip_unusable_indexes=yes

sqlfile: 指定导入操作中要执行的DDL语句写入到一个SQL脚本文件中;SQLFILE=[directory_object:]file_name
    impdp jack/jack directory=dumpdir dumpfile=exp.dmp sqlfile=dpump_dir2:expfull.sql

table_exists_action: 指定导入过程中要创建的表已经存在该如何操作,语法为table_exists_action=[skip|append|truncate|replace],默认为skip

tables: 指定表模式导入及表名称列表,语法tables=[schema_name.]table_name[:partition_name][, ...]
    impdp jack/jack directory=dumpdir dumpfile=expfull.dmp tables=emp,jobs  

tablespaces: 指定进行表空间模式导入及表空间名称列表,tablespaces=tablespace_name[, ...]
    impdp jack/jack directory=dumpdir dumpfile=expfull.dmp tablespaces=tbs1,tbs2,tbs3,tbs4

transform: 指定是否修改创建对象的DDL语句,语法为:transform=transform_name:value[:object_type]

transport_datafiles: 指定在传输表空间导入模式中导入目标数据库的数据文件列表
    impdp jack/jack directory=dumpdir dumpfile=tts.dmp transport_datafiles=/opt/user01.dbf

transport_full_check: 在传输表空间导入模式中指定是否进行导入表空间中的对象与非导入表空间对象之间依赖关系的检查,默认为NO

transport_tablespaces: 指定进行传输表空间模式导入及表空间名称列表
    impdp jack/jack directory=dumpdir network_link=source_db_link
    transport_tablespaces=tbs6 transport_full_check=no
    transport_datafiles=/opt/tbs6.dbf

案例:

1. 利用转储文件导入hr模式下的表emp,dept数据
impdp jack/jack 
directory=dumpdir 
dumpfile=emp_dept.dmp 
tables=emp,dept 
nologfile=y 
content=data_only

2. 利用转储文件导入hr模式下的表emp,dept元数据和行数据
impdp jack/jack 
directory=dumpdir 
dumpfile=emp_dept.dmp 
tables=emp,dept 
nologfile=y

3. query过滤后导入数据
impdp jack/jack 
directory=dumpdir 
dumpfile=emp_dept.dmp 
tables=emp,dept 
nologfile=y
query=emp: "where dept_id>50 and sal>1000"

4.利用备份想表中追加数据
impdp jack/jack 
directory=dumpdir 
dumpfile=emp_dept.dmp 
tables=emp 
table_exists_action=append

5.将所有数据导入恢复
impdp jack/jack 
directory=dumpdir 
dumpfile=jack.dmp 
schemas=jack 
job_name=imp_jack_schema

6.将备份的hr模式对象导入jack模式中
impdp jack/jack 
directory=dumpdir 
dumpfile=hr.dmp 
logfile=hr.log
job_name=imp_hr_schema 
remap_schema=hr:jack 

7.利用备份恢复example,users表空间导入
impdp jack/jack 
directory=dumpdir 
dumpfile=tsp.dmp 
tablespaces=example,users 

8.传输表空间导入模式
将表空间users导入数据库链接source_db_link所对应的远程数据库中
impdp jack/jack 
directory=dumpdir 
network_link_source_db_link 
transport_tablespaces=users 
transport_full_check=N
transport_datafiles=/opt/..user01.dbf

9.数据库导入模式
impdp jack/jack
directory=dumpdir 
dumpfile=expfull.dmp
full=yes
nologfile=yes

10.参数文件方式导入
cat aa.txt
tables=emp,dept
directory=dumpdir
dumpfile=emp_dept.dmp
parallel=3

impdp jack/jack parfile=/opt/aa.txt

 

以上是关于expdp和impdp管理(逻辑导入导出)的主要内容,如果未能解决你的问题,请参考以下文章

数据泵EXPDP导出工具和IMPDP导入工具的使用

数据库导出导入操作(expdp,impdp)

逻辑导入导出exp/imp与数据泵expdp/impdp

expdp impdp 数据库导入导出命令详解

Oracle 数据泵导入导出(expdp/impdp)

Oracle数据库备份 expdp/impdp导出导入命令