2Gb or Not 2Gb - File limits in Oracle (Part II)

** 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

 1<username> QUOTA  2500M  ON <tablespacename>
 2
 3这样将会报  " ORA-2187: invalid quota specification."  错误。 
 4
 5在  [BUG:425831]  中报告了此错误。解决方法是如果一个用户需要超过  2Gb  的限额,那么就给他赋予  UNLIMITED TABLESPACE  权限。 
 6
 7l  如果  spool  的输出文件达到了  2Gb  ,那么会出现错误。比如:  SQLPLUS  的命令  spool  。 
 8
 9l  在  Oracle  工具中的一些  CORE  函数不支持大文件。  [BUG:749600]  中报告了此错误,在  Oracle  8.0.6  和  8.1.6  版本中已经修正了。但是要注意在  Oracle 8.1.5  和别的任何补丁中都没有修改这个错误。另外即使已经有修正,但是仍然还会有大文件限制因为不是所有的代码都使用了这些  CORE  函数。 
10
11注意:  [BUG:749600]  虽然阐明了  CORE  函数,但是代码的某些部分仍然有问题。比如:  SQL*Loader  中输入文件的读取就没有使用  CORE  。 
12
13l  UTL_FILE  包使用了上述的  CORE  函数,所以在没有修正的  Oracle  版本中仍然有  2Gb  限制。  <package:utl_file> 是一个允许在  PL/SQL  中进行文件存取的  PL/SQL  包。 
14
15**_ 特定平台中的大文件  _ ** **_ _ **
16
17下面是一些特定平台中关于大文件支持的参考资料。虽然我们已经努力使这些文章的资料始终保持更新,但是仍然建议在存取大文件时对每一个操作要小心谨慎地测试。 
18
19平台 
20
21| 
22
23参考   
24  
25---|---  
26  
27AIX (RS6000 / SP) 
28
29| 
30
31[NOTE:60888.1]   
32  
33HP 
34
35| 
36
37[NOTE:62407.1]   
38  
39Digital Unix 
40
41| 
42
43[NOTE:62426.1]   
44  
45Sequent PTX 
46
47| 
48
49[NOTE:62415.1]   
50  
51Sun Solaris 
52
53| 
54
55[NOTE:62409.1]   
56  
57Windows NT 
58
59| 
60
61FAT  文件系统支持最大  4Gb  的文件 
62
63NTFS  文件系统理论上支持最大  16Tb  的文件 
64
651  .在  NT  的  Oracle8  上使用大文件之前请先参考  [NOTE:67421.1] 
66
672  .  Oracle  8.1.6  的  DBVERIFY  程序有问题(参考  [BUG:1372172]  ) 
68
693  .在  8.1.6  / 8.1.7  中自动扩展到  4Gb  时会出现问题导致数据库崩溃。(参考  [BUG:1668488]  )</package:utl_file></tablespacename></username>
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus