概述
exp 中direct 参数默认为N , 即采用普通路径导出,和使用程序导出恢复数据一样,和执行其他查询一样, 从磁盘和高速缓冲区读取数据, 从那里,数据被移到一个工作区,在工作区,行被提出来, 检查和查询中的where子句是否匹配,然后将数据送到导出程序。
exp direct =y , 表示直接路径导出, 比普通路径导出速度快很多, 不能使用query子查询, SQL查询仍然被执行,存储表的块仍然被读入数据库的高速缓存区,但是它们从高速缓存区直接传给exp导出程序, 相对普通路径,少了检查行是否匹配的这个过程, 所以Query子句不能在direct=y 的情况下使用。 表包含Lob的时候也不能使用y 。
-------------------------------------------------------------------------------------------------------------------------------------
oracle是9204,数据通过exp导出,以前使用direct=n的方式导出,考虑到效率问题,使用了direct=y参数,虽说效率得到大幅提高,但是再恢复数据库是会提示imp-00051,imp-00008等的相关错误;经metalink查询发现这是9204的bug,就是再exp时如果指定了direct=y可能导致exp的输出文件存在中断的情况。解决办法是,升级到9207或者使用direct=n. 这个问题提示我们不管用什么方式进行备份,一定要定时将备份文件进行恢复测试,及时发现问题,以防真正出现问题时候,备份无法使用的情况
-----------------------------------------------------------------------------------------------------------------------------------------
在导入数据的时候,假如commit=Y,则由参数Buffer决定导入过程中什么时候做Commit操作。*(Note:"For tables containing LONG, LOB, BFILE, REF, ROWID, UROWID columns, array inserts are not done. If COMMIT=y, Import commits these tables after each row.") 导入的时候,Oracle使用Array Insert.将record从dmp file中读取到imp process buffer中,当buffer“满”的时候,Bind Array,执行Insert. 看来Oracle也通过批量绑定来提高imp性能,以前还以为是read one record,insert one record,read one record,insert one record…… ******************************************************************************** INSERT /*+NESTED_TABLE_SET_REFS+*/ INTO "T_1K" ("X")VALUES (:1) call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- -------
Parse 1 0.00 0.01 0 4 0 0
Execute 102 0.02 0.04 0 11 174 6601
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- -------
total 103 0.02 0.05 0 15 174 6601 Misses in library cache during parse: 1 ******************************************************************************** 表T_1K每个记录在imp的时候占用大概1k的buffer,如上是设置了buffer=64k imp的结果。 Array Bind (Commit)102次,导入纪录6601条 6601/102 =64.7156863 about 64 rows/insert, using a 64k buffer —— that makes sense 看不出Oracle内部使用array bind 的地方挺多的: arraysize in sqlplus, Forall bind / fetch in PL/SQL……
-
资料引用:
最后
以上就是幸福老鼠为你收集整理的oracle imp direct y,理解exp, imp 使用direct=y 及imp commit=y的全部内容,希望文章能够帮你解决oracle imp direct y,理解exp, imp 使用direct=y 及imp commit=y所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复