数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
2Gb or Not 2Gb - File limits in Oracle (Part II)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

导出(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=YOracle已经在在[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*Loader2Gb

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.6SQL*Loader中已经对discard filelog file实现了大文件支持,但是对于输入的data file在各个平台上仍然时不一样的。[BUG:948460]中记录了输入文件大小限制的详细信息。[BUG:749600]则记录了最大的discard file文件大小。

 

Oracle和其它的2Gb问题

这个章节列举了其它各色2Gb问题。

 

l         Oracle 8.0.5版本以后在大部分的平台上Oracle都提供了64位的版本。从8.0.5README文件中可以看到相应的介绍-[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.68.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.在NTOracle8上使用大文件之前请先参考[NOTE:67421.1]

2Oracle8.1.6DBVERIFY程序有问题(参考[BUG:1372172]

3.在8.1.6 / 8.1.7中自动扩展到4Gb时会出现问题导致数据库崩溃。(参考[BUG:1668488]




相关文章

相关软件