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'