这两篇都是介绍数据泵的使用。
那么在实际的使用中,我们也会遇到一个问题,发生一些ORA-xx的错误,有具体的错误,我们都可以去google去分析,但是还有情况,就是也不错误,而是在某一步停住了,而且很长时间不动。
这是时候,我们是不好判断数据泵的操作是否正常。
在数据泵卡住的时候,有一个很好的方法来判断:
1. 在expdp的时候,我们要观察dump 文件的变化,只要dump 文件大小在变化,那就说明expdp是正常的。
2. 在impdp的时候,我们可以及时查看表空间的变化,只要我们的表空间在变化,说明我们的impdp是正常的。
如果在数据泵操作的时候,表空间和dump都没有变化,数据泵操作也停止在某一步不动。那么我们就只能对数据泵进行debug操作。
trace 生成的文件可能很大,所以在进行trace之前,必须先检查dump文件的大小:max_dump_file_size。
[oracle@asm trace]$ orz param max_dump
Session altered.
NAME ISDEFAULT SESMO SYSMOD VALUE
---------------------- --------- -------------- ---------------
max_dump_file_size TRUE TRUE IMMEDIATE unlimited
如果不是unlimited,就进行修改:
ALTER SYSTEM SETmax_dump_file_size = unlimited SCOPE = both;
启动trace 功能只需要在expdp/impdp 命令后加上一个trace 参数,该参数由一个7位的16进制数据组成。
前三位指定Data Pump组件的代码,后四位一般是:0300。
任何已0开头的trace的值都会被忽略,trace值不区分大小写。
如:
TRACE = 04A0300 或者 TRACE=4a0300
trace值的一些注意事项:
(1) trace 值不要超过7位十六进制数字。
(2) 不要添加十六进制的0x符号。
(3) 不要将16进制转换成10进制。
(4) 会忽略最前面的0,即使长度不满足7位。
(5) 参数不区分大小写。
在使用trace 参数时,执行数据泵操作的用户需要具有DBA 角色或者EXP_FULL_DATABASE /IMP_FULL_DATABASE的角色,如果权限不足,就会报ORA-31631的错误。
ORA-31631: privileges are required
解决方法:给用户赋权。 如:
GRANT exp_full_database TO tianlesoftware;
操作完成之后,在收回权限即可:
revoke exp_full_database from tianlesoftware;
使用TRACE的示例:
expdp scott/tiger DIRECTORY=my_dir DUMPFILE=expdp_s.dmp LOGFILE=expdp_s.log TABLES=empTRACE=480300
2.1.2 TRACE值的具体计算规则
在前面我们讲了TRACE 值的前3位表示的是数据泵的组件代码,具体如下:
-- Summary of Data Pump trace levels:
-- ==================================
Trace DM DW ORA Lines
level trc trc trc in
(hex) file file file trace Purpose
------- ---- ---- ---- -----------------------------------------------------
10300 x x x SHDW: To trace the Shadowprocess (API) (expdp/impdp)
20300 x x x KUPV: To trace Fixed table
40300 x x x 'div' To trace Process services
80300 x KUPM: To trace Master ControlProcess (MCP) (DM)
100300 x x KUPF: To trace File Manager
200300 x x x KUPC: To trace Queue services
400300 x KUPW: To trace Workerprocess(es) (DW)
800300 x KUPD: To trace DataPackage
1000300 x META: To trace Metadata Package
--- +
1FF0300 x x x 'all' To trace all components (full tracing)
如果想trace 所有的数据泵组件,只需要指定trace的值为1ff0300即可。
如果我们想通知trace 多个数据泵组件,就把这些组件的代码叠加起来即可,如:
-- Example of combination(last 4 digits are usually 0300):
40300 to trace Process services
80300 to trace Master Control Process (MCP)
400300 to trace Worker process(es)
-- +
4C0300 to trace Process services and MasterControl and Worker processes
叠加的时候,最后4位不变,把前面3位的值相加。
注意:
Oracle 建议使用480300的trace值,设置该值将会trace Master Control process (MCP) 和 theWorker process(es)。
2个trace 文件在BACKGROUND_DUMP_DEST目录下:
Master Process trace file:
Worker Process trace file:
还有一个在USER_DUMP_DEST目录:
Shadow Processtrace file:
[oracle@asm u01]$ orzparam background
Session altered.
NAME ISDEFAULT SESMO SYSMOD VALUE
----------------------- --------- -------------- ----------------------------------------
background_core_dump TRUE FALSE FALSE partial
background_dump_dest TRUE FALSE IMMEDIATE /u01/app/oracle/diag/rdbms/dave/dave/trace
[oracle@asm u01]$ orzparam user_dump
Session altered.
NAME ISDEFAULT SESMO SYSMOD VALUE
--------------------- --------- -------------- ----------------------------------------
user_dump_dest TRUE FALSE IMMEDIATE/u01/app/oracle/diag/rdbms/dave/dave/trace
SQL> set lin 160 pages