我是靠谱客的博主 幸福老鼠,最近开发中收集的这篇文章主要介绍oracle imp direct y,理解exp, imp 使用direct=y 及imp commit=y,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部