oracle导出dmp文件大小限制,[Oracle数据库] 急!关于在AIX4.3.3版本下导8.0.5数据库DMP文件大小的限制!...

请为,那位好手能帮我解决以下问题的困惑:

操作系统AIX 4.3.3

数据库:Oracle8.0.5.2

症状:导入一个8G大小的DMP文件,数据库报不能识别DMP文件,经查询,Oracle8.0.5对可识别的DMP文件大小也限定在2G以内。

请问通过什么有效的手段可以将8G大小的数据文件导入数据库?

谢谢

-----------------------------------------------------------------------------------------------------------------------------------------------------

我找到解决的办法了,现在与大家一起共享

通过管道,将数据导出随后压缩

example export-script:

PATH=$PATH:/usr/local/bin

export PATH

ORACLE_SID=DEMO

export ORACLE_SID

NLS_LANG=american_america.we8iso8859p1

export NLS_LANG

ORAENV_ASK=NO

export ORAENV_ASK

. oraenv

PIPE=/tmp/split_pipe

mkfifo $PIPE

cd /databases/dbs2/export

split -b 500m

exp system/manager file=$PIPE full=y compress=n buffer=7777777 log=/tmp/exp.log

rm $PIPE

导入执行以下命令

and import:

PATH=$PATH:/usr/local/bin

export PATH

ORACLE_SID=STEST

export ORACLE_SID

NLS_LANG=american_america.we8iso8859p1

export NLS_LANG

ORAENV_ASK=NO

export ORAENV_ASK

. oraenv

cd /databases/dbs2/export

PIPE=/tmp/split_pipe

mkfifo $PIPE

cat xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao xap xaq xar xas xat xau xav xaw xax xay xa

z xba xbb xbc xbd xbe xbf xbg xbh xbi xbj xbk xbl >$PIPE &

sleep 5

imp system/manager file=$PIPE full=y log=/tmp/imp_split.log buffer=7777777

rm $PIPE

===========================================================================================

本文描述"2GB"的问题。它阐述了为什么2GB是一个关键数字并且给出了如果文件大于2GB时一些你需要知道的东西。 本文主要阐述在Unix系统上的2GB问题。 讨论的主题: 为什么2GB是一个特别的数字 为什么使用2GB的数据文件 Export和2GB SQL*Loader和2GB oracle和其他2GB问题 为什么2GB是一个特殊的数字 许多CPU和系统调用接口(API)使用32位的字(word)。这个32位就在许多系统上带来了限制。在许多情况下,标准文件操作的API使用32位有符号word来指定文件大小和在文件中的相对位置。有符号的32位word使用最高位为符号位,因此31位所能表示的最大值就是0x7FFFFFFF(+2147483647),比2GB小1。 2GB或大于2GB的文件统称"大文件”.所以在32位环境中就会遇到许多问题。为了克服这些问题,现在的操作系统大多使用64位定义了新的系统调用。新版本的Oracle使用了这些接口但是在处理“大文件“时还是有许多问题是需要注意的。 另一个比较特殊的数字是4GB,0xFFFFFFFF作为无符号字所能表示的最大值就是4294967295,比4GB少1。加1则造成低32位变为0x00000000和一个进位,在32位体系中这个进位会被丢掉,因此4GB是另一个可能会发生问题的数字。 32位影响着oracle的许多方面。为了使用大文件,你需要: 1.操作系统支持2GB+的文件或裸设备 2.操作系统具有支持操作2GB+文件IO的API 3.oracle使用这些API 这对oracle意味着什么? 现今,大多数平台支持大文件并且有64位的API.从oracle 7.3开始通常就使用这些API了,但是这依赖于平台、操作系统和oracle的版本。在多数情况下大文件支持是可行的,但在某些情况下需要一个专门的patch. 在本文写作时,在oracle中还有一些工具没有使用这些新的64位API.比如export,SQL*LOADER,当然这是依赖于平台的具体操作系统数据库版本的。 为什么使用2GB+的数据文件 这里我们总结出使用大文件/设备作为oracle的数据文件的好处和缺点 好处: 在大多数平台上,oracle7最大支持1022个数据文件。每个文件如果小于2GB,那数据库最大也超不过2044GB.(在oracle8上这不是问题,Oracle8支持每个表空间1022个文件)。大文件的使用可以突破2044GB的限制。 对相对小的数据库来讲,大文件意味着更少的文件。也就意味着较少的文件处理及所需资源。 大文件的缺点 恢复的单位更大。一个2GB的文件需要15分钟到一个小时的备份/恢复时间(依赖于备份介质和磁盘速度)。一个8GB的文件需要此时间的4倍 并行备份/恢复操作会受影响 可能有操作系统特殊的限制:比如大于2GB的部分,也许异步IO只能串行(serialised)操作了。 操作大于2GB的文件也许需要补丁(patch),特殊的配置等,相对小文件来讲无形中引入了许多不可测因素,比如在一些AIX中。 使用大文件时需要注意的几点: 向操作系统厂商确认是否支持大文件并且如何配置他们 向操作系统厂商确认可支持的最大实际文件大小 向oracle支持确认是否需要补丁或在你的平台上(硬件、操作系统、oracle)是否有什么限制 当你升级操作系统或oracle时,检查以上所提。 确认是否正确的设置了系统以允许所有用户能使用大文件 确认备份脚本能处理大文件 注意还有一个使用大文件的限制。文件大小的具体数值依赖于数据库的DB_BLOCK_SIZE和平台。在大多数平台上(Unix,NT,VMS),文件大小限制为4194302*DB_BLOCK_SIZE. 请查看Alert [NOTE:112011.1]中的详细记录 重点注意事项: 当允许文件自动增长时需要特别小心。对AUTOEXTEND的文件限制MAXSIZE小于2GB是明智的。否则,由于[BUG:568232],当文件增长超过oracle不能处理时可能会出现ORA-600[3292]等错误。 大多数平台上oracle的数据文件包含一个特殊的头数据块,所以创建一个2GB的文件,实际需要大于2GB的空间。在Unix平台上,这个头大小通常是DB_BLOCK_SIZE,但在裸设备上可能会更大。 2GB的相关oracle错误 ORA-01119 Error in creating datafile xxxx ORA-27044 unable to write header block of file SVR4 Error: 22: Invalid argument ORA-19502 write error on file 'filename', blockno x (blocksize=nn) ORA-27070 skgfdisp: async read/write failed ORA-02237 invalid file size KCF:write/open error dba=xxxxxx block=xxxx online=xxxx file=xxxxxxxx file limit exceed. Unix error 27, EFBIG Export and 2Gb ~~~~~~~~~~~~~~ 2Gb Export File Size ~~~~~~~~~~~~~~~~~~~~ 本文写作时大多数的export版本使用默认的文件处理API来创建export文件。这意味着在相当多的平台上,不能导出大于2GB的文件。 以下是一些克服的方法 通常可以导出大于2GB的文件到裸设备上。 在Unix上可以使用命名管道来压缩/分割文件 可以导出到磁盘上 oracle8i允许导出到多个文件而不是一个大的文件 (译:方法可参考文章结尾处补充) 其他的2GB导出问题 Oracle最大extent的大小为2GB.不幸的是许多发行版本的Oracle中的export都有一个问题,就是当指定compress=y时,可能导出的文件中其Next存储子句会出现大于2GB的情况。这会导致即使指定了ignore=y时,import也会出错。本问题可参见[BUG:708790]和[NOTE:62436.1] 典型的2GB+时export错误: . . exporting table BIGEXPORT EXP-00015: error on row 10660 of table BIGEXPORT, column MYCOL, datatype 96 EXP-00002: error in writing to export file EXP-00002: error in writing to export file EXP-00000: Export terminated unsuccessfully 在[BUG:185855]中还提到了一个问题:当导出全库时产生的create tablespace命令会使用bytes作为单位。当import时,生成的数据文件若大于2GB,可能导致ora-2237错误。解决办法是先创建表空间(用M代替bytes),然后导入文件. 导出到磁带 export中的volsize参数最大到4GB.在一些平台上只有2GB. 8i中已经修改了本问题。[BUG:490190]描述了本问题。 SQL*Loader and 2Gb ~~~~~~~~~~~~~~~~~~ 典型的,当SQL*Loader打开一个大于2GB的输入文件时会报如下错误 SQL*Loader-500: Unable to open file (bigfile.dat) SVR4 Error: 79: Value too large for defined data type [NOTE:30528.1]中的例子可以修改后用于大的输入文件 oracle 8.0.6提高了对大的discard和log文件的支持。但最大的输入文件依平台不同而不同。 [BUG:948460]详细描述了输入文件的限制。 [BUG:749600]介绍了最大的discard文件大小 oracle和其他2GB问题 下面列出了其他的2GB问题 - 从oracle 8.0.5开始可以在大多数平台上使用64位oracle 8.0.5 README文件介绍了这些 。见[NOTE:62252.1] - DBV也许不能扫描大于2GB的文件,并报"DBV-100"错。 见[BUG:710888] - 在建立大于2GB文件时,SQL命令 datafile ... Size xxxxx 必须用'M' 或'K',否则报错'ORA-02237':invalid file size -在oracle 7.3.4之前表空间的quotas不能超过2GB.如: Eg: ALTER USER QUOTA 2500M ON reports ORA-2187: invalid quota specification. 见[BUG:425831] 解决办法时赋予unlimited tablesapace权限。 -使用spool时如果spool出的文件超过2GB也许会报错。 其他 具体各平台上文件大小限制 Platform See ~~~~~~~~ ~~~ AIX (RS6000 / SP) [NOTE:60888.1] HP [NOTE:62407.1] Digital Unix [NOTE:62426.1] Sequent PTX [NOTE:62415.1] Sun Solaris [NOTE:62409.1] Windows NT Maximum 4Gb files on FAT Theoretical 16Tb on NTFS ** See [NOTE:67421.1] before using large files on NT with Oracle8 *2 There is a problem with DBVERIFY on 8.1.6 See [BUG:1372172] *3 There is a problem with 8.1.6 / 8.1.7 where an autoextend to 4Gb can cause a crash - see [BUG:1668488] 后记:这篇文章来自metalink.oracle.com。本没想全文翻译的,因为其中许多详细的介绍都要参考该网站上的许多其他文章--我也知道读者读到一个问题,可又见不到到具体的解决方法会很恼火,但无论时间精力都不可能让我全部找来,而且似乎也没有必要。翻译了本文就当起个头吧。 补充: export大文件可以采取的方法: 1. 裸设备 比如直接倒出到/dev/rlvtest等。 2. 命名管道(Unix下) mknod /tmp/imp_pipe p compress < /tmp/exp_pipe > export.dmp.Z & exp file=/tmp/exp_pipe userid=xxx/xxx tables=... mknod /tmp/imp_pipe p uncompress < export.dmp.Z>/tmp/imp_pipe & imp file=/tmp/imp_pipe userid=xxx/xxx tables=... 3. 压缩/文件拆分以下只在ksh中有效:) echo |exp file=>(compress | split -b 1024m - expdmp-) userid=xxx/xxx tables=... echo | imp file=

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值