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

oracle

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])

时间: 2016-02-09

2Gb or Not 2Gb - File limits in Oracle (Part II)的相关文章

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

oracle 2Gb or Not 2Gb - File limits in Oracle   翻译:Kamus(Seraphim) 校正:Bloomit 邮件:[email protected] 日期:2004-1   经常会听说导入导出的时候,备份恢复的时候,SQL*Loader导入数据的时候,文件超出了2G大小,结果导致错误. 本人文科毕业,什么二进制,十六进制,数据结构,操作系统等等的一概没有学过,所以对此问题一直都只有一个模糊的认识,今天在metalink上面闲逛,忽然发现了这篇文章,兴之

数据库内核月报 - 2015 / 08-MySQL · 答疑解惑 · open file limits

背景 最近在Aliyun RDS的环境上,有些用户碰到了打开文件句柄数过多的错误,查看用户实例的打开句柄个数,确实超过了系统设置的值,一旦出现了这种错误,将会带来连锁的各种错误(取决于当时正在操作什么类型的文件,以及什么操作).下面,我们就一起来看一下MySQL在操作过程中,牵涉到文件打开和关闭的关键点,以及你一直以来可能存在的认识误区. 参数和名词 关联参数 我们先列一下几个关键的参数,不了解的可以先参考官方文档,我们假设在MySQL 5.6版本上,主要针对InnoDB表. open_file

oracle在32位的Linux环境下SGA如何突破2GB内存限制的最终解决方案

32位机上内存无法支持4GB以上的说法太极端,如win2003 server就可以在32位机上认出8GB的内存.   因此Oracle的SGA在32位机上是可以突破2GB这个限制的,不过付出的代阶就是不能使用ASM这个功能,SGA,LargePool, SharePool都要手工来设置值.   本人实验的软件版本为:   Oracle版本为10 Linux版本为RedHatAs4或者RedHatAs5 其它版只要是Linux的kernel高于2.4的支持large page的都可以做到,下面是具

【oracle】ORA-01580 error creating control backup file

早上查看报警邮件的时候发现了ORA-01580 error creating control backup file. 通常次错误与RMAN 备份控制文件的策略有关: 比如: RMAN> backup current controlfile; Starting backup at 22-AUG-11 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backupset channel ORA_DISK_1: s

oracle报错File #N is offline, but is part of an online tablespace

在看一个客户的数据库恢复日志的时候发现类似警告(File #N is offline, but is part of an online tablespace.),以前没有注意,这次通过试验来重现该部分内容 创建表空间 SQL> create tablespace readonly datafile '/home/oracle/.oradata/test/readonly01.dbf' size 128M;   Tablespace created.   SQL> alter tablespa

oracle数据库错误ORA-01157: cannot identify/lock data file导致表空间无法online

朋友和我聊到一个案例,一个表空间本来有一个数据文件(已经有大量数据进入),然后他加入7个数据文件,这个时候他发现他加多了文件,想删除这些数据文件,可是又不怎么懂数据库,直接offline 表空间,然后rm掉相关数据文件,最后表空间无法online.我对其场景进行了模拟恢复测试,使用bbed和dul对其进行恢复 模拟场景表空间有一个数据文件,里面有数据,然后加入一个新数据文件,进入offline tbs,然后rm数据文件 offline表空间后,该表空间存在的数据文件也会offline  代码如下

【ORACLE】ORA-00245: control file backup operation failed

从oracle 11.2.0.2.0开始,控制文件的快照文件必须能够被所有节点的数据实例访问到,并且必须放在共享的位置.否则,使用RMAN进行备份控制文件的时候会报如下错误: ORA-00245: control file backup operation failed. 当使用备份脚本备份的时候,这个错误可能会导致备份工作中断. 公司同事也正好遇到这个问题.  METALINK 中的两篇文档: RAC BACKUP FAILS WITH ORA-00245: CONTROL FILE BACK

Linux 静默安装CentOS 6.6系统上安装Oracle 11gR2(11.2.0.4)

本文档是Oracle Database 11.2.0.4 for CentOS 6.6 Server(x86_64平台)的静默安装指南. 所有操作无需使用图形界面. 静默安装能减少安装出错的可能性, 也能大大加快安装速度. # 后跟命令表示以操作系统下root用户操作; $ 后跟命令表示以操作系统下oracle用户操作;  1.0 安装前检查 内存大小要求  Oracle 11.2 建议内存是在2GB或者更多. 运行以下命令: #  grep MemTotal /proc/meminfo Mem

【RAC安装】 AIX下安装Oracle 11gR2 RAC

[RAC安装] AIX下安装Oracle 11gR2 RAC   1.1  BLOG文档结构图       1.2  前言部分   1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 基于aix安装rac(重点) ② 静默安装rac软件 ③ dbca静默创建rac数据库     Tips:        ① 若文章代码格式有错乱,推荐使用QQ.搜狗或360浏览器,也可以下载pdf格式的文档来查看,pdf文档