Oracle expdp与impdp导数

来源:互联网 发布:asp.net源码 编辑:程序博客网 时间:2024/04/30 00:49
导出模板
userid="/ as sysdba" 
directory=fwy
dumpfile=expdp%U.dmp
logfile=expdp.log
tables=(
a.table1
a.table2
)
query=(
GOLAPDATA.EPAY_PA_PAYMENT_INFO:"where PAYMENT_DATE >= date'2011-01-01'"
GOLAPDATA.NSHOP_APPLY_BASE_INFO_N:"where APPLY_TIME >= date'2011-01-01'"
)
filesize=4096M
parallel=4
job_name=expdp_fwy

导入模板
userid="/ as sysdba"
directory=fwy
dumpfile=impdp%U.dmp
logfile=impdp.log
tables=(
a.table1
a.table2
b.table3
)
query=(
GOLAPDATA.EPAY_PA_PAYMENT_INFO:"where PAYMENT_DATE >= date'2011-01-01'"
GOLAPDATA.NSHOP_APPLY_BASE_INFO_N:"where APPLY_TIME >= date'2011-01-01'"
GOLAPDATA.NSHOP_POLICY_BASE_INFO_N:"where CALCU_DATE >= date'2011-01-01'"
)
parallel=4
job_name=impdp_fwy
TABLE_EXISTS_ACTION=REPLACE

NETWORK_LINK导入模板
先在目标库以sys用户建立dblink连到源库。
userid="/ as sysdba"
directory=fwy
logfile=impdp.log
tables=(
a.table1
a.table2
b.table3
)
query=(
GOLAPDATA.EPAY_PA_PAYMENT_INFO:"where PAYMENT_DATE >= date'2011-01-01'"
GOLAPDATA.NSHOP_APPLY_BASE_INFO_N:"where APPLY_TIME >= date'2011-01-01'"
GOLAPDATA.NSHOP_POLICY_BASE_INFO_N:"where CALCU_DATE >= date'2011-01-01'"
)
job_name=impdp_fwy
network_link=to_t1lass
parallel=4
TABLE_EXISTS_ACTION=REPLACE

#NETWORK_LINK,可以用于分区表,不能用于LONG字段的表。
#完毕后记得删除连到生产库的dblink。

参数
1.导什么?
full=(N) | Y 是否全库导出,对于导入而言就是所有dmp文件内容导入
tablespaces=(tbs1,tbs2)
schemas=(a,b,c)
content=(all)(既导出表行又导出元数据)| data_only | metadata_only 这个等同于exp的rows=y|n等
#exclude 在限定范围内剔除相关的内容其余导出。
exclude=(
table:"LIKE 'TMP%'",  --可以选择TMP%的表被排除
table:"in ('EMPLOYEES','DEPART')"  --可以选择这两个表被排除
index                       --可以选择索引被排除
)
schemas=hr
exclude=(
SCHEMAS:"='HR'        --可以选择SCHEMA是HR的被排除
)
full=Y
include=TABLE:"in ('TAB1','TAB2')" --只包含表TAB1与TAB2
include=procedure --只包含过程
include=function
include=package
include=view:"like 'PRODUCT%'"
include=index:"like 'EMP%'" --只包含EMP开头的索引
include=(
package,
function
)
#include 限定导出或导入中只包括一组特定的对象
--导出hr,oe schema下的属于schema的对象
include=
(
function,
procedure,
package,
view:"like 'PRODUCT%'"
table:"= 'T'"
table:"like 'SAM%'"
)
include与EXCLUDE在一个作业中只能指定一个。
include与exclude,这个范围可以是全库级别,schema级别,或者表级别。
可以在导出或导入操作中排除特定的数据库对象。如果设置了schemas参数,就是除了schemas中符合条件的对象不导出,其余导出。如果设置了tables参数,则是tables里面不符合条件的对象不导出,其余导出。但比如package就不属于某个特定的表,而是属于schema级别的。如果上面的content=data_only,那么除行数据外不导出任何对象。此情况下,你不能使用exclude与include参数。使用EXCLUDE与INCLUDE参数过滤元数据时,请记住,所有依赖被过滤对象的对象也会被过滤掉。例如,当EXCLUDE参数排除表时,也可以自动排除与该表相关的索引、约束、触发器等。

2.怎么导?
directory=fwy --create directory fwy as '/paic/app/oracle/base/fwy';创建,导出导入都要。
COMPRESSION=ALL, DATA_ONLY, [METADATA_ONLY] and NONE.(11g才有)
estimate=blocks (默认)| statistics 空间估算时使用数据块还是表统计信息
estimate_only=N (默认)| Y --只估算,不启动导出作用。
#sample参数
SAMPLE=hr.tab:30 --这样hr的tab只导出30%,而hr其余表则100%导出。
schema=hr
SAMPLE=30 则只导出该表30%的内容
TABLE_EXISTS_ACTION=(SKIP)|APPEND|REPLACE|TRUNCATE
SKIP是如果有已经存在的对象就跳过;
APPEND是在原有数据基础上继续增加(APPEND)此时所有相关的元数据都不会导入了仅仅是导入追加数据而已;
REPLACE是先DROP表,然后创建表,最后完成数据插入(REPLACE);已测试replace不能针对SEQUENCE
TRUNCATE是先TRUNCATE,再完成数据插入(TRUNCATE)。
重映射函数(一般输入的时候用)
remap_table=hr.emp1:emp2  --表重命名为emp2
remap_schema=A:X,B:Y 导入时改变对象的属主
remap_tablespace=A:B 导入时将原本属于表空间A的对象都放到表空间B中,一般与上面的remap_schema配合使用,因为用户的默认表空间不同。
remap_datafile='/data/oradata/jssweb':'/data/oradata/newdb' 在导入表空间时改变数据文件路径,不同文件系统的平台之间也可以噢。
remap_datafile='DB2$:[HRDATA.PAYROLL]users.f':'/db2/hrdata/payroll/users.f' 从VMS文件系统转义到unix文件系统

导数注意事项

根据[文章 ID 780465.1] 导数expdp10g版本在任何地方尽量别加空格,特别是QUERY的最后与中间。

impdp是先创建所有表结构,导入所有表数据,再处理授权,创建索引,约束,索引统计信息,comment,表统计信息这样的顺序。

impdp时要注意undo空间是否足够大

impdp时如果加并行参数,要注意db_writer_processes是否能相匹配

RAC库导数要么不开并行,要么cluster=n。
11g开始如果是RAC并且是要启用并发则需要注意这个问题。并且即使cluterter=N,并发度设置太大也会报错。


监控datapump作业
1.select * from dba_datapump_jobs;
2.dba_datapump_sessions
select b.sid,b.username,b.event from dba_datapump_sessions a join v$session b
on a.saddr=b.SADDR;
3.查看长事务会话
select * from v$session_longops;

交互:dba_datapump_jobs视图查出这些job的运行情况
impdp attach=sys.impdp_fwy
/ as sysdba
status  --返回作业与进程状态
stop_job  --有条不紊地停
stop_job=immediate --立刻停 
start_job --恢复停止的作业      
kill_job  --释放并删除作业
parallel  --更改当前作业的并行度
















0 0