2Gb Export File> 本文写作时大多数的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 ...>
报错‘ORA-02237’:invalid file> -在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
on NT with ORACLE8
**2 There is a problem with DBVERIFY
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 export.dmp.Z &
exp file=/tmp/exp_pipe userid=xxx/xxx tables=...
mknod /tmp/imp_pipe p
uncompress /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=
(下面由chao_ping 补充)
4.可以直接倒出到磁带
比如exp file=/dev/rmt0 ....
5。可以在ORACLE8i+版本里面,通过使用filesize 和file 相结合,倒出生成多个文件。