Hack了一把Oracle的exp工具

    想让Oracle的exp查询要导出的表时用并行去执行, 不想建一个Logon的触发器来做, 就Hack它一把了. 下面是用正常的exp跟踪(TRACE=YES)出来的SQL语句.

SELECT /*+NESTED_TABLE_GET_REFS+*/ "SH"."T_COMPRESS".*
FROM
"SH"."T_COMPRESS"

Rows     Row Source Operation
-------  ------------------------------
  10089  TABLE ACCESS FULL T_COMPRESS

    将exp拷贝一份, 命名为expp(Exp Parallel). 然后用UltraEdit打开expp文件, 在二进制模式下找到如下这一段.

BEGIN     SYS.DBMS_EXPORT_EXTENSION.SET_NO_OUTLINES;  END;

    将它编辑为"ALTER SESSION FORCE PARALLEL QUERY PARALLEL 4", 然后保存. 接下来用expp来导出一个表看看, 加上TRACE=YES选项.

SELECT /*+NESTED_TABLE_GET_REFS+*/ "SH"."T_COMPRESS".*
FROM
"SH"."T_COMPRESS"

Rows     Row Source Operation
-------  -------------------------------
  10089  PX COORDINATOR  
      0   PX SEND QC (RANDOM) :TQ10000
      0    PX BLOCK ITERATOR
      0     TABLE ACCESS FULL T_COMPRESS

    自已玩玩可以, 不要在正式的场合下这样做. 正式场合请改表的并行度或用Logon触发器.

留言 (9)

晕,还可以这样搞啊

玩玩而已, 放开一些.

怎么看不明白,到底是做什么?是打开exp.exe这个修改吗?exp跟踪的sql语句是怎么跟踪的?谢谢@!

是用UltraEdit打开exp.exe修改的; exp有个参数trace=y可以用来跟踪SQL语句.

奇怪用UltraEdit打开exp.exe,没有找到
BEGIN SYS.DBMS_EXPORT_EXTENSION.SET_NO_OUTLINES; END;
这句,exp是oracle9i的.谢谢@!

每个版本可能不一样, 10g是有的, 9i则找ALTER SESSION SET USE_STORED_OUTLINES=FALSE.

用ultraedit的搜索功能搜了,还是找不到
ALTER SESSION SET USE_STORED_OUTLINES=FALSE.
两中模式,2进制文本模式都试了.谢谢@!我找个10g看看

10g的exp也没有找到,啥问题,是不是缺少什么条件?

我按你的方法做了,运行时提示expp.exe不是有效的win32应用程序,我的oracle是10.2.0版本的。

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • What have you been doing since I saw you last time?
  • 自从我上次见到你以后你都在干什么?
  • If I had got enough money yesterday, I would have bought that tape.
  • 如果我昨天钱够的话, 我就买了那盒磁带了.
  • Looking back on it, I think I shouldn't have given up the contest so easily.
  • 回过头来看, 我想我不应该如此轻易的放弃那次比赛.
  • Had I taken a taxi, I wouldn't have been late.
  • 如果我打的去的话就不会迟到了.
  • Even if you take the exam again, you won't pass it.
  • 就算再考一次你也通不过.