如何知道expdp作业需要多少临时表空间?

时间:2017-10-23 10:07:18

标签: oracle tablespace expdp

expdp $DBNAME directory=ar_exp content=data_only dumpfile=${tablename}.dmp logfile=${tablename}.log tables=$tablename query=$SCHNAME.$tablename:'"where substr('$fieldname',1,5) in('$cpidlst')"'

此操作采用临时表空间,但需要多少临时表空间如何计算?

1 个答案:

答案 0 :(得分:0)

除了估计答案的链接之外,这里还有一个脚本,用于查明正在使用的温度。您必须找到expdp会话的SID,然后将其加入WHERE子句。

select
  s.sid,
  s.serial#,
  p.spid "OS SID",
  s.sql_hash_value "HASH VALUE",
  s.username "ORA USER",
  s.status,
  s.osuser "OS USER",
  s.machine,
  s.terminal,
  s.type,
  s.program,
  s.logon_time,
  s.last_call_et,
  su.contents, 
  ROUND(((su.blocks*param.value)/1024/1024),2) "MB",
  tablespace,
  s.sql_id
FROM 
  v$session s, v$sort_usage su, v$process p, v$parameter param
WHERE 
  param.name  = 'db_block_size' and
  su.session_addr = s.saddr and
  p.addr = s.paddr
ORDER BY 
  su.blocks DESC;

找到会话的SID后:

  
      
  1. 将其加入V $ SQL_TEXT并获取SQL_TEXT
  2.   
  3. 了解如何创建PLAN_TABLE
  4.   
  5. 在“步骤1
  6. 中找到的SQL_TEXT”中运行“将计划解释为plan_table”   
  7. 从PLAN_TABLE中选择TEMP_SPACE;
  8.   

这应该给你一个估计;但我从来没有发现估计是准确的。最好的方法是观察会话的运行情况,然后在必要时重复使用上面的脚本。