想让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)
晕,还可以这样搞啊
Posted by waityou81 | Nov 29, 2007 11:33 AM
玩玩而已, 放开一些.
Posted by anysql | Nov 29, 2007 12:40 PM
怎么看不明白,到底是做什么?是打开exp.exe这个修改吗?exp跟踪的sql语句是怎么跟踪的?谢谢@!
Posted by ANDY | Dec 19, 2007 11:19 AM
是用UltraEdit打开exp.exe修改的; exp有个参数trace=y可以用来跟踪SQL语句.
Posted by anysql | Dec 19, 2007 11:30 AM
奇怪用UltraEdit打开exp.exe,没有找到
BEGIN SYS.DBMS_EXPORT_EXTENSION.SET_NO_OUTLINES; END;
这句,exp是oracle9i的.谢谢@!
Posted by andy | Dec 19, 2007 1:23 PM
每个版本可能不一样, 10g是有的, 9i则找ALTER SESSION SET USE_STORED_OUTLINES=FALSE.
Posted by anysql | Dec 19, 2007 1:38 PM
用ultraedit的搜索功能搜了,还是找不到
ALTER SESSION SET USE_STORED_OUTLINES=FALSE.
两中模式,2进制文本模式都试了.谢谢@!我找个10g看看
Posted by andy | Dec 19, 2007 1:49 PM
10g的exp也没有找到,啥问题,是不是缺少什么条件?
Posted by andy | Dec 19, 2007 1:57 PM
我按你的方法做了,运行时提示expp.exe不是有效的win32应用程序,我的oracle是10.2.0版本的。
Posted by cyco | Mar 7, 2008 10:45 PM