网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.如何掌握 Oracle 中的时间间隔型.
.Red Hat Linux 7.1使用手册(下).
.oracle8i回滚段表空间出现坏块的.
.[数据库]Oracle中如果对“性别”.
.ORACLE入门之APACHE虚拟服务器设.
.A little test for index..
.Oracle 10g Release2新功能之Ref.
.在Oracle9i中使用多种Block Size.
.怎么样做到限时登录.
.ORACLE性能调优遵循的基本原则.
.影响ORACLE汉字显示的字符集问题.
.向基于Linux的Oracle RAC 10g集群.
.采样数据库连接数.
.如何在hp-ux10.20系统中正确地配.
.服务器和客户机是怎样连接的.
.Oracle初始化参数的来源.
.Oracle中利用EXP/IMP工具实现数据.
.Oracle8i和MS SQL Ser.
.提高ORACLE数据库的查询统计速度.
.实例讲解批处理程序突然变慢的解.

2Gb or Not 2Gb

发表日期:2008-2-9



  经常会听说导入导出的时候,备份恢复的时候,SQL*Loader导入数据的时候,文件超出了2G大小,结果导致错误。
  
  本人文科毕业,什么二进制,十六进制,数据结构,操作系统等等的一概没有学过,所以对此问题一直都只有一个模糊的熟悉,今天在metalink上面闲逛,忽然发现了这篇文章,兴之所致,决定好好看看,看完以后,感觉对于此问题明白了很多,于是就顺便翻译成了中文,希望对大家也有所帮助。
  
  对于本文中提及的所有其它Notes和Bugs也做了尽可能的整理(还未翻译,以后假如有时间再慢慢作),只是文中提到的一些Bug由于本人Metalink帐号的限制亦或是Bug的不公开性,并不能看到具体描述,对于这样的Bug就无法再作整理。
  
  介绍
  
  本文阐述了“2Gb”问题,解释了为什么2Gb会是一个这样布满魔力的数字,并且假如你想在Oracle的应用中使用超过2Gb大小的文件,那么这篇文章也告诉了一些你应该知道的事情。
  
  本文以Unix操作系统为基础,因为大部分的2Gb问题都发生在Unix上面,当然文中也提到了一些对于其它非Unix操作系统的相关资料,在本文的最后一节列出了各个操作系统自己的限制。
  
  本文主题包括以下几点:
  
  l     为什么2Gb是一个非凡的数字?
  
  l     怎样使用超过2Gb(2Gb+)的文件?
  
  l     导出(EXPort)和2Gb
  
  l     SQL*Loader和2Gb
  
  l     Oracle和其它2Gb问题
  
  l     不同操作系统上的“大文件”(Large Files)
  
  为什么2Gb是一个非凡的数字?
  
  很多当前正在使用的CPU和API都使用了32位(bit)的字长,而正是这个字长对于很多操作产生了影响。
  
  众多的场合下文件操作的标准API在对文件大小和文件中当前位置的处理都使用了有符号32位字(32-bit signed Word)。一个有符号32位字以最高位来表示正负,所以只剩下31位来存储真正的数值,而16进制中存储在31位中的最大正值就是0x7FFFFFFF,也就是10进制中的+2147483647,这正是一个临近2Gb的值。
  
  2Gb或者更大的文件一般被称为“大文件”,当你在32位环境中使用2147483647甚至更大的数字时,你就很可能会碰到一些问题。为了解决这些问题,最新的操作系统已经重新定义了一系列完全利用64位寻址方式来操作文件大小和偏移量的系统函数。最新的Oracle发行版也已经使用了这些新的接口,但是假如在你决定要使用“大文件”以前,你仍然有不少的问题需要考虑。
  
  另外一个非凡的数字是4Gb。也就是作为无符号字(unaigned value)的十六进制数字0xFFFFFFFF(十进制是4294967295),这是一个略小于4Gb的值。将该值加一将使低4位字节成为0x00000000,同时产生'1'进位。这个进位在32位运算中将会失去。所以4Gb也是一个可能会产生问题的非凡数字。本文中对这个问题也有所提及。
  
  对于使用Oracle这意味着什么?
  
  32bit的问题在不少方面都影响到了Oracle,为了使用“大文件”,你需要满足以下条件:
  
  1.    一个支持2Gb+文件的操作系统或者裸设备(Raw devices)
  
  2.    一个具有支持存取2Gb+文件的API的操作系统
  
  3.    一个使用了这些API的Oracle版本
  
  今天大多数的平台都已经支持了大文件,并且对于这些文件有64bit的API,Oracle7.3及以后版本一般已经使用了这些API,但是根据不同的平台,不同的操作系统以及不同的Oracle版本仍然有很多不一样的情况。在一些场合下默认就是支持“大文件”的,但是另外一些场合却可能必须要打一些补丁。
  
  一直到写这篇文章的时候,Oracle里面还有一些工具是没有更新到使用这些新的API的,比如众所周知的EXPORT和SQL*LOADER,不过仍然再次强调一下,由于平台和操作系统的不同,情况还是不一样的。
  
  为什么要使用2Gb+的文件?
  
  在这一节中我们试着总结一下对于Oracle的数据文件使用大文件和设备("large" files / devices)的优点以及缺点。
  
  使用大于2Gb文件的优点:
  
  l     在大多数平台上Oracle7支持最多1022个数据文件。
假如文件小于2G,那么也就是限制了数据库的大小只能是小于2044Gb。当然这对于支持了更多数据文件的Oracle8来说已经不再是个问题(Oracle8支持每个表空间中包含最多1022个数据文件)。
  
  l     在现实情况中Oracle7的最大数据库尺寸会比2044Gb小,因为一般数据文件都存放在单独的表空间中,而很多数据文件就可能远远小于2Gb。使用大文件可以让数据库超越2044Gb的这个限制。
  
  l     使用大文件意味着对于较小的数据库只需要治理较少的文件。
  
  l     需要较少的文件处理资源。
  
  使用大于2Gb文件的缺点:
  
  l     恢复的单位更大了。一个2Gb文件的备份和还原,根据备份媒体和磁盘速度的差异,会耗费15分钟到1个小时的时间,那么一个8Gb的文件就要花4倍这样的时间。
  
  l     备份和恢复的并行操作新能将会收到影响。
  
  l     会碰到一些平台特有的限制,比如说在超过2Gb以上异步I/O的操作就可能会变成线性操作。
  
  l     处理2Gb以上的文件可能会需要补丁或者一些非凡的配置。相对于小文件来说也会有更大的风险性。比如在一些AIX的发行版上,超过2Gb,异步I/O就会使用线性操作。
  
  使用大于2Gb文件的要点:
  
  l     跟操作系统提供商确认,大文件是否被支持,同时要如何去配置。
  
  l     跟操作系统提供商确认,真正的最大文件限制是多少?
  
  l     询问Oracle技术支持,确定对于你现有的平台,操作系统版本,Oracle版本,是否需要什么补丁或者还有什么限制?
  
  l     记住,假如你真的考虑对于操作系统或者Oracle要打一些补丁的话,那么就再检查一遍上面提到的这些问题。
  
  l     确认对于所有要使用大文件读取的用户来说,操作系统的限制已经正确设定。
  
  l     确认所有的备份脚本都能够处理大文件。
  
  l     注重,对于使用超过2Gb的数据文件,对于最大文件大小还有一个限制。这个限制依靠于你的系统平台以及Oracle初始化参数DB_BLOCK_SIZE。在大多数平台上(包括Unix, NT, VMS)文件大小的限制在4194302*DB_BLOCK_SIZE这么大。
  
  [NOTE:112011.1]文档描述了改变文件大小中存在的问题,非凡是超过了2Gb的时候。
  
  一般需要注重的要点:
  
  需要小心设置文件的自动扩展。明智的作法是在不使用“大文件”的场合下,将自动扩展的数据文件最大尺寸限制在2Gb以下。另外注重由于[BUG:568232]将有可能定义一个超过Oracle处理极限的MAXSIZE数值,这在resize之后将会引发一个内部错误(错误显示为ORA-600 [3292])
  
  在很多平台上,Oracle数据文件的头部都包含着附加的数据块,所以创建一个2Gb的数据文件实际上需要比2Gb更多的磁盘空间。在UNIX平台上数据文件头部的附加数据块大小通常等于DB_BLOCK_SIZE的大小,但是在裸设备上可能需要占用更多一些的空间。
  
  2Gb相关的Oracle错误
  
  当2Gb限制到达的时候可能会发生下面这些错误,这些错误的产生没有特定的顺序。
  
  ORA-01119 Error in creating datafile xxxx
  
  ORA-27044 unable to write header block of file
  
  SVR4 Error: 22: Invalid argument
  
  ORA-19502 write error on file 'filename', blockno x (blocksize=nn)
  
  ORA-27070 skgfdisp: async read/write failed
  
  ORA-02237 invalid file size
  
  KCF:write/open error dba=xxxxxx block=xxxx online=xxxx file=xxxxxxxx file limit exceed.
  
  Unix error 27, EFBIG
上一篇:最高效的删除重复记录方法 人气:710
下一篇:把oracle表里的数据导成insert语句 人气:849
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐