2Gb or Not 2Gb - File limits in Oracle (Part II)
2024-08-29 13:30:52
供稿:网友
网站运营seo文章大全提供全面的站长运营经验及seo技术!
2gb or not 2gb - file limits in oracle (part ii)
导出(export)和2gb
2gb导出文件的大小
当编写大部分版本的export时,在创建导出文件上都是使用了默认的文件操作api。这就意味着在很多平台上根本就没有可能导出2gb或者大于2gb的文件系统文件(file system file)。
但是仍然有一些可选项可以用于在export时解决2gb的限制:
ü 将大于2gb的文件导出到裸设备上基本上是没有问题的,当然这首先要求裸设备的大小必须能够容纳整个导出文件。
ü 导出到一个允许压缩或者切割的命名管道中(适用unix平台)。
参看“在unix平台上导出大于2gb文件的快速参考”一文 [note:30528.1]。
ü 导出到磁带(适用大多数平台)
参看“在unix系统中导出到磁带”一文[note:30428.1]。(这篇文章同时页详细描述了如何导出到unix管道和远程shell中)
ü oracle8i允许导出到多个小文件中,以替代单一的大文件。
其它的2gb导出问题
oracle允许区(extent)的尺寸最大为2gb。但是不幸的是,在大多数的oracle发行版中export都存在这样一个问题,当你export一个大文件,并且指定了compress=y,那么就有可能在导出文件的next存储子句中包含了一个大于2gb的值。这样将会导致import失败,即使是在import时候指定了ignore=y。oracle已经在在[bug:708790]中报告了这个问题,并且在[note:62436.1]中提出了警告。
当export碰到2gb限制的时候,会报类似下面的错误:
. . 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为单位,如果文件大小超过2gb,那么在导入的时候就会产生一个ora-2237错误。这个问题可以通过在导入之前先以m为单位而不是bytes为单位来创建表空间这样的方法来解决。[bug:490837]也指出了相类似的问题。
导出到磁带
导出的时候volsize参数限制在4gb以下,在有些平台上可能只有2gb。
在oracle8i中已经修正了这个问题。[bug:490190]中对此问题有所描述。
sql*loader和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]中的例子可以稍作修改以使在sql*loader中使用大的输入文件。
oracle 8.0.6在sql*loader中已经对discard file和log file实现了大文件支持,但是对于输入的data file在各个平台上仍然时不一样的。[bug:948460]中记录了输入文件大小限制的详细信息。[bug:749600]则记录了最大的discard file文件大小。
oracle和其它的2gb问题
这个章节列举了其它各色2gb问题。
l oracle 8.0.5版本以后在大部分的平台上oracle都提供了64位的版本。从8.0.5的readme文件中可以看到相应的介绍-[note:62252.1]
l dbv(数据库验证程序)可能无法扫描超过2gb的数据文件,并会报dbv-100错误。在[bug:710888]中报告了此错误。
l 如果要在oracle中创建大于2gb的文件, sql命令行的"datafile ... size xxxxxx"子句部分必须以m或者k作单位来指定,否则将会报"ora-02237: invalid file size"错误。在[bug:185855]中报告了此错误。
l 在oracle 7.3.4发行版以前表空间的限额不能超过2gb。比如:
alter user <username> quota 2500m on <tablespacename>
这样将会报" ora-2187: invalid quota specification."错误。
在[bug:425831]中报告了此错误。解决方法是如果一个用户需要超过2gb的限额,那么就给他赋予unlimited tablespace权限。
l 如果spool的输出文件达到了2gb,那么会出现错误。比如:sqlplus的命令spool。
l 在oracle工具中的一些core函数不支持大文件。[bug:749600]中报告了此错误,在oracle 8.0.6和8.1.6版本中已经修正了。但是要注意在oracle 8.1.5和别的任何补丁中都没有修改这个错误。另外即使已经有修正,但是仍然还会有大文件限制因为不是所有的代码都使用了这些core函数。
注意:[bug:749600]虽然阐明了core函数,但是代码的某些部分仍然有问题。比如:sql*loader中输入文件的读取就没有使用core。
l utl_file包使用了上述的core函数,所以在没有修正的oracle版本中仍然有2gb限制。<package:utl_file>是一个允许在pl/sql中进行文件存取的pl/sql包。
特定平台中的大文件
下面是一些特定平台中关于大文件支持的参考资料。虽然我们已经努力使这些文章的资料始终保持更新,但是仍然建议在存取大文件时对每一个操作要小心谨慎地测试。
平台
参考
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
fat文件系统支持最大4gb的文件
ntfs文件系统理论上支持最大16tb的文件
1.在nt的oracle8上使用大文件之前请先参考[note:67421.1]
2.oracle8.1.6的dbverify程序有问题(参考[bug:1372172])
3.在8.1.6 / 8.1.7中自动扩展到4gb时会出现问题导致数据库崩溃。(参考[bug:1668488])