我会开始使用一个简单的查询来监控流程
select x.inst_id , x.job_name,b.state,b.job_mode,b.degree
, x.owner_name,z.sql_text, p.message
, p.totalwork, p.sofar
, round((p.sofar/p.totalwork)*100,2) done
, p.time_remaining
from dba_datapump_jobs b
left join dba_datapump_sessions x on (x.job_name = b.job_name )
left join gv$session y on (y.saddr = x.saddr and y.inst_id = x.inst_id )
left join gv$sql z on (y.sql_id = z.sql_id and y.inst_id = z.inst_id )
left join gv$session_longops p ON (p.sql_id = y.sql_id and p.inst_id = y.inst_id )
WHERE y.module='Data Pump Worker'
AND p.time_remaining > 0;
关于你测量 CPU、内存或磁盘的点,我不知道你想在这里测量什么。我不知道你的环境,但可能它在某种程度上被虚拟化了,所以当你有一层又一层的虚拟化时,当你处理物理服务器时,那些措施是有意义的,它们现在变得不那么有意义了,当然很重要,但没有以前那么多了。
无论如何,如果您仍想测量 (CPU),您可以在之前使用gv$sesstat和gv$statname 加入查询。
select x.inst_id , x.job_name,b.state,b.job_mode,b.degree
, x.owner_name,z.sql_text, p.message
, p.totalwork, p.sofar
, round((p.sofar/p.totalwork)*100,2) done
, p.time_remaining
from dba_datapump_jobs b
left join dba_datapump_sessions x on (x.job_name = b.job_name )
left join gv$session y on (y.saddr = x.saddr and y.inst_id = x.inst_id )
inner join gv$sesstat t on ( t.sid = y.sid and t.inst_id = y.inst_id )
inner join gv$statname n on ( t.statistic# = n.statistic# and t.inst_id = n.inst_id )
left join gv$sql z on (y.sql_id = z.sql_id and y.inst_id = z.inst_id )
left join gv$session_longops p ON (p.sql_id = y.sql_id and p.inst_id = y.inst_id )
WHERE y.module='Data Pump Worker' and n.name like '%CPU used by this session%'
AND p.time_remaining > 0;
如果您在导入 datapuump 操作时性能下降,有一些技巧可以加快导入速度,而且您始终可以在导入操作期间启用参数 TRACE 以检查后面发生的情况轮子。
提高性能的选项
您可以更改导入行的方式。例如,您可能想尝试使用:access_method=direct_path
在使用直接路径加载时要考虑到这一点。表的结构允许直接路径加载,即:
- 在单分区加载期间,多分区表上不存在全局索引。这包括已分区的对象表。
- LOB 列不存在域索引。
- 表不在集群中。
- 该表没有 BFILE 列或不透明类型的列。
- 该表没有嵌入不透明类型的 VARRAY 列。
- 该表没有加密列。
- 未启用补充日志记录或启用补充日志记录并且表没有 LOB 列。
- 要导入数据的表是预先存在的表,并且没有活动触发器,并且该表未分区,未启用 INSERT 模式的细粒度访问控制,并且约束不是不存在表检查,也不存在唯一索引。
- 参数 QUERY、REMAP_DATA 参数未用于导入数据泵作业中的指定表。
允许数据泵操作在transform=disable_archive_logging:y( 12c 起) 的无日志记录中运行
如果导出数据泵是在PARALLEL中完成的,并且创建了几个dmp文件,那么在导入操作中应该使用相同的度数。
跟踪 ORACLE 数据泵
可以通过在 Export DataPump (expdp) 或 Import DataPump (impdp) 的 TRACE 参数中指定 7 位十六进制掩码来启用跟踪。前三位启用对特定数据泵组件的跟踪,而后四位通常是:0300。
任何前导零都可以省略,并且为 TRACE 参数指定的值不区分大小写。
您应该从 480300 开始,在这种情况下,将跟踪主控制进程 (MCP) 和工作进程。创建数据泵跟踪文件时,不要使用不同的值,除非 Oracle 支持要求不同的跟踪级别。如何启用跟踪的示例:
expdp <LOGIN>/<PASSWORD> DIRECTORY=<DIRECTORY_NAME> DUMPFILE=<DUMP_NAME>.dmp \
LOGFILE=<LOG_NAME>.log TABLES=<SCHEMA_NAME>.<TABLE_NAME> TRACE=480300
请记住,用户/密码必须是具有足够权限的用户。