优化IMPDP/EXPDP
数据据泵与exp/imp来说性能有很大的提高,其中影响最大的就是paralle。可以这么来看: expdp/impdp=exp/imp+direct mode + paralle. 所以,使用数据泵,要想提高速度,就要设置并行参数。(expdp没开并行,基本上和直接路径exp没两样),其他调整比如REDO,tmp表空间等这里就不讲了。
如果我们使用如下语句:
expdp full=y directory=dump dumpfile=orcl_%U.dmpparallel=4
那么expdp将为parallel创建4个文件: ORCL_01.DMP,RCL_02.DMP,ORCL_03.DMP,RCL_04.DMP。 每个进程一个文件。 这样的话,每个文件的大小会因进程而不同。可以某个文件很大,某个文件却很小。要解决这个问题,就是设置filesize参数。来指定每个文件的最大值。这样当一个文件达到最大值的之后,就会创建一个新的文件。
如: expdp full=y directory=dump dumpfile=orcl_%U.dmp parallel=4 filesize=50M
导出的dump文件和paralle有关系,那么导入也有关系。 paralle要小于dump文件数。如果paralle大于dump文件的个数,就会因为超过的那个进程获取不到文件,就不能对性能提高。
一般parall参数值等于CPU 的个数。而且要小于dump文件的个数。
查看CPU个数:
SQL> show parameter cpu
注意:
导出导入的过程,尽量避免用ssh连上服务器,在客户端的ssh里执行备份恢复命令。因为这样,如果连接中断,备份也就中断了。可以将备份脚本添加到crontab里。让备份在服务器上执行。这样即使ssh中断,备份和恢复也不受影响。
-----------------------------
一、停止EXP/IMP优化速度
可以直接KILL 进程,但先要KILL父进程,然后KILL子进程,只KILL子进程,EXP/IMP还会在后台执行的
样例:ps -ef |grep imp 查询到pid,kill -9 pid 、kill -9 ppid,就可以了
二、停止EXPDP/IMPDP
这里就不能简单的用KILL进程来处理了,因为这里是一个JOB
1、EXPDP/IMPDP参数:
ATTACH连接到现有作业,例如 ATTACH [=作业名]。
JOB_NAME可以通过dba_datapump_jobs来查询:
sql>select * from dba_datapump_jobs
OWNER_NAME JOB_NAME OPERATION
------------------------------ ------------------------------ ------------------------------------------------------------
JOB_MODE STATE DEGREE ATTACHED_SESSIONS DATAPUMP_SESSIONS
------------------------------------------------------------ ------------------------------ ---------- ----------------- -----------------
SYSTEM SYS_EXPORT_FULL_01 EXPORT
FULL EXECUTING 1 1 3
样例1:
C:\Documents and Settings\Administrator>expdp system/sys attach=SYS_EXPORT_FULL_01
Export: Release 11.2.0.1.0 - Production on星期六 7月 13 23:53:55 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
作业: SYS_EXPORT_FULL_01
所有者: SYSTEM
操作: EXPORT
创建者权限: TRUE
GUID: 7374DCC3E7D547B3B755865E4DB59F10
开始时间:星期六, 13 7月, 2013 23:53:57
模式: FULL
实例: tony
最大并行度: 1
EXPORT 个作业参数:
参数名 参数值:
CLIENT_COMMAND system/******** directory=dir_dump dumpfile=dir_dump:bigtable.dmp logfile=dir_dump:bigtable.log full=y
状态: IDLING
处理的字节: 0
当前并行度: 1
作业错误计数: 0
转储文件: d:\impdp\bigtable.dmp
写入的字节: 5,177,344
Worker 1 状态:
进程名: DW00
状态: UNDEFINED
Export> stop_job
是否确实要停止此作业 ([Y]/N): y
是否确实要停止此作业 ([Y]/N): Y
是否确实要停止此作业 ([Y]/N): Y
是否确实要停止此作业 ([Y]/N): Y
是否确实要停止此作业 ([Y]/N): Y ---------------就是停止不了,在dba_datapump_jobs还是能查到记录,只是JOB已经停止了。
-----已经解决了,需要输入YES
Export> KILL_JOB
是否确实要停止此作业 ([Y]/N): YES
在执行的时候CTL+C就可以进入交互模式,windows和LINUX下都是一样的。
重新进入EXPDP/IMPDP,就可以执行下面的交互命令:
$expdp username/password,
交互模式常用命令:
CONTINUE_CLIENT返回到记录模式。假如处于空闲状态,将重新启动作业。
START_JOB 启动恢复当前作业。
STATUS在默认值 (0)将显示可用时的新状态的情况下,要监视的频率 (以秒计)作业状态。
STATUS=[interval]
STOP_JOB顺序关闭执行的作业并退出客户机。
STOP_JOB=IMMEDIATE将立即关闭数据泵作业。
还有其他命令:
ADD_FILE向转储文件集中添加转储文件。
ADD_FILE=dirobjdumpfile-name
CONTINUE_CLIENT 返回到记录模式。假如处于空闲状态,将重新启动作业。
EXIT_CLIENT 退出客户机会话并使作业处于运行状态。
HELP总结交互命令。
KILL_JOB分离和删除作业。
PARALLEL更改当前作业的活动 worker的数目。
PARALLEL=worker 的数目。
START_JOB 启动恢复当前作业。
STATUS在默认值 (0)将显示可用时的新状态的情况下,
要监视的频率 (以秒计)作业状态。
STATUS=[interval]
STOP_JOB顺序关闭执行的作业并退出客户机。
STOP_JOB=IMMEDIATE 将立即关闭