`
pippo25
  • 浏览: 29633 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

当数据库中的文件超过4G

阅读更多
DB: SQL Server 2000
OS: windows server 2003
   前几天测试部提一个问题单:在进行压力测试的时候,应用程序抛出异常。大体如下:
未能为数据库 'testdb' 中的对象 'content_info' 分配空间,因为文件 'PRIMARY' 已满。at net.sourceforge.jtds.jdbc.JtdsStatement.executeBatch(JtdsStatement.java:944) at xx.xx.jtds.BatchOperate.process(BatchOperate.java:45)。显然提示的是分配的空间已满,查看存放文件的磁盘空间还有相当的空余,但是发现数据文件(.dat)已经接近4G,查看文件系统,是fat32,在fat32下单个文件最大值是不能超过4G的,问题就出在这里了,如果是nfs肯定就不会出现问题了。
   在sql server2000中对于数据文件和事务日志文件一般建议是分开存放的,如下在建立数据库的时候是可以选择存放位置的但是一旦建立成功将不能修改。


在图中可以看出对于文件可以有两种方式:
  1.自增长,这种好处是不需要人工干预,文件会根据设置伴随插入的数据变大。缺点就是由于受文件系统的制约单个文件达到文件系统可以管理的单个文件的最大值后,将不能在增长,这样应用程序会出出错。
  2.设置限制文件的大小,可以设置最大为2G,那么在fat32文件系统下就不会出现文件系统不能支持的大文件了,但是这样的缺点就是,需要创建多个文件每个文件指定能增长的到的最大值 (因为sql server不会在一个文件达到最大值后自动创建新的文件,这个需要人工巡检)。

可以编写一个小程序尝试一下(设置数据库数据文件大小为2M,当所有数据文件大小都达到最大值后,必然报错)
如:(数据库驱动使用的jtds,sql server一定要升级到SP3以上哦,不然报不能建立连接,jtds要求SP3)
public class BatchOperate 
{

	public static void main(String[] args) 
	{
		Connection conn;
		Statement stmt;
		String sql = null;
		try 
		{
			Class.forName("net.sourceforge.jtds.jdbc.Driver");
			Enumeration drivers = DriverManager.getDrivers();
			while(drivers.hasMoreElements())
			{
				System.out.println(drivers.nextElement().getClass().getName());
			}
			System.out.println(DriverManager.getDriver("jdbc:jtds:sqlserver"));
			conn = DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.1.101:1433/testdb", "sa", "sa");
			stmt = conn.createStatement();
			for(int i = 0; i < 1000000; i++)
			{
				sql = "insert into content_info values(" + i + 
		            ",'pippo25pippo25','ftp://192.168.1.5/media/1.wmv'," +
				    "'pippo25pippo25','pippo25pippo25',0,0,0)";
				stmt.addBatch(sql);
				if(i % 1000 == 0)
				{
					stmt.clearBatch();
				}
				stmt.executeBatch();
			}
			stmt.close();
			conn.close();
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		}
	}
}

  哪种方式更好,就取决于实际使用中的文件系统了。

  说到这里简单阐述一下几种文件系统:
  文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。因此,可以说"我有2个文件系统"意思是他有2个分区,一个存文件,或他用 "扩展文件系统",意思是文件系统的种类。
  文件系统是操作系统与驱动器之间的接口,当操作系统请求从硬盘里读取一个文件时,会请求相应的文件系统(FAT 16/32/NTFS)打开文件。扇区是磁盘最小的物理存储单元,但由于操作系统无法对数目众多的扇区进行寻址,所以操作系统就将相邻的扇区组合在一起,形成一个簇,然后再对簇进行管理。每个簇可以包括2、4、8、16、32或64个扇区。显然,簇是操作系统所使用的逻辑概念,而非磁盘的物理特性。

  为了更好地管理磁盘空间和更高效地从硬盘读取数据,操作系统规定一个簇中只能放置一个文件的内容,因此文件所占用的空间,只能是簇的整数倍;而如果文件实际大小小于一簇,它也要占一簇的空间。所以,一般情况下文件所占空间要略大于文件的实际大小,只有在少数情况下,即文件的实际大小恰好是簇的整数倍时,文件的实际大小才会与所占空间完全一致。
  为什么fat32只能单个文件大小不会超过4G?
  硬盘在没有进行格式化之前是不可以使用的,格式化就是要给他一个文件系统。FAT32文件系统管理一个文件需要FDT(File Directory Table)和FAt(File Allocation Table)两个表合作才能完成,首先在FDT表中会记录文件的创建时间、大小、文件名称、文件的第一FAT表项等等,每一个表项大小为32bit,注意喽使用32bit存储文件大小,这就是文件最大值是2^32(4G)大小了,终于知道为什么文件有4G的限制了。那么FAT表呢,FAT32顾名思义,每一个表项32bit,每一个表项对应磁盘卷上的每一个簇,这就是说表项数目=簇数目=磁盘卷大小/簇大小。这样文件存放的时候首先由FDT表存储文件第一簇占用的FAT表项的地址,这样就可以根据FDT表查找到了FAT表中的相应表项目,FAT表项存储文件存放下一个簇的表象地址,这样形成一个存储连,当到达文件末尾的时候在FAT最后一个表象中表示出来。
大体图像如下:

FAT表的下面代表表项地址,上面一行是表象中的内容记录的时下一个表象的地址,这样形成存储链
分享到:
评论
2 楼 ray_linn 2008-05-09  
很显然,缺少数据库专家。
1 楼 魔力猫咪 2008-05-07  
古怪的问题。使用NTFS不就可以了吗。

相关推荐

    C#读取大文本文件(4G)并将其批量写入数据库(每次100万条).zip

    在IT行业中,处理大文件是一项常见的任务,尤其是在数据处理、日志分析或数据库导入导出等领域。本示例聚焦于使用C#语言读取大型文本文件(如4GB大小)并将其批量写入数据库(每次处理100万条记录)。这种操作在大...

    在32位sql server 使用4G以上的内存设置

    32位SQL Server使用4G以上的内存设置 在32位操作系统中,SQL Server 2005可以使用 Address Windowing Extensions(AWE)来访问超过4GB的物理内存。AWE是一种机制,可以让32位操作系统访问超过4GB的物理内存,但需要...

    oracle中4G以上内存的使用方法

    ### Oracle在32位系统中使用4G以上内存的方法 #### 背景与问题概述 随着业务需求的增长和技术的进步,很多企业的服务器都需要进行硬件升级,以满足更高性能的需求。在这一过程中,如何让32位操作系统下的Oracle...

    支持4G以上文件上传 WEBSERVICE

    支持4G以上文件上传,代进条”,这意味着该源码利用了特定的技术策略,如分块上传或者流式上传,将大文件分解成小块进行传输,并且在上传过程中显示进度条,以提供用户友好的体验。 “运用WEBSERVICE”这部分则涉及...

    XP支持4G以上内存的开启(最大64G)

    标题 "XP支持4G以上内存的开启(最大64G)" 暗示了本文将探讨Windows XP操作系统如何能够利用超过4GB的物理内存,这通常在默认情况下是不支持的。Windows XP 32位版本(也称为x86版本)原生只能识别并使用大约3.25GB...

    ODU在ORACLE数据库中的应用.pdf

    1. 跨平台恢复:ODU 可以在多个平台上运行,支持 64 位操作系统,能够恢复超过 4G 的数据文件。 2. 支持多种字符集间的转换:ODU 支持 CLOB、NCLOB、NVARCHAR2 列类型的数据到数据库之间的正确转换。 3. 其他特点:...

    sybase改內存4g

    标题“sybase改內存4g”涉及到的是在Windows NT/2000操作系统环境下,对Sybase数据库系统进行内存优化的过程,特别是将Sybase的内存配置调整到超过2GB。这一操作通常是为了提高数据库服务器的性能,尤其是处理大数据...

    oracle数据库修复

    不需要运行Oracle数据库软件,ODU直接读取数据库文件解析数据。 支持ASM,能够直接从ASM磁盘中导出数据,即使相关的磁盘组不能成功mount 支持从ASM中直接抽取出数据文件和其他任意存储在ASM中的文件(包括控制文件...

    突破4G内存限制

    6. **使用内存数据库或内存计算**:对于需要处理大量数据的场景,可以考虑使用内存数据库,如Redis或Memcached,它们将数据存储在内存中,提高数据处理速度。对于数据分析和机器学习任务,使用支持内存计算的工具,...

    赤兔Oracle数据库恢复软件 v11.6.zip

    1.不需要运行Oracle数据库软件,EOR直接读取数据库文件解析数据。支持ASM,能够直接从ASM磁盘中导出数据,即使相关的磁盘组不能成功mount 2.支持从ASM中直接抽取出数据文件和其他任意存储在ASM中的文件(包括控制...

    Oracle9i 数据库设计指引全集

    - **1.2.8.2 控制文件配置**:控制文件中的最大数据文件数量参数不得小于数据库参数db_files,确保数据库的稳定运行。 **1.2.9 数据库日志文件配置** 日志文件的大小应基于数据库事务处理量来确定,设计时应确保每...

    windowsxp4g补丁

    文件"XP64G20110815.exe"很可能就是Windows XP 4G补丁的安装程序,发布日期为2011年8月15日。在安装前,务必备份重要数据,因为任何系统更新都有可能引发兼容性问题或意外的系统重启。安装过程中,遵循提示操作,...

    Oracle数据库恢复工具Oracle Database Unloader(ODU)3.09

    ODU全面支持64位系统,支持超过4G大小的数据文件。 支持复制操作系统命令不能复制的坏文件 模拟oracle的dump块功能,能够dump数据文件块的数据 目前不支持的功能: 11g的SecureFiles ------------------------ ...

    Windows2003 4G内存无法正常显示的问题产生与解决办法

    通过启用PAE,Windows Server 2003可以充分利用超过4GB的物理内存,从而提升系统性能,尤其是在处理大型数据库、虚拟化环境或高性能计算任务时。然而,启用PAE可能会影响某些旧驱动程序的兼容性,因此,在执行此操作...

    Ramdisk4G XP专用

    这对于运行大型应用程序、数据库、进行大量文件操作或者提升系统启动速度都非常有帮助。 描述中提到的"划分XP下无法识别的内存作虚拟硬盘",这可能是指Windows XP原生不支持超过4GB的内存,因此对于安装了4GB以上...

    oracle数据库设计规范.doc

    - 内存配置:Linux环境下,Oracle SGA不应超过1.7G,总物理内存不超过4G,SGA占50%-75%。64位系统中,SGA可适当增大,但过大可能导致性能下降。 - 交换区设计:物理内存小于2G时,交换分区为内存的3倍;大于2G时,为...

    SQL server 2000使用4G以上的内存

    ### SQL Server 2000 使用 4G 以上内存的方法 #### 背景介绍 在使用32位操作系统时,默认情况下,应用程序能够访问的最大内存容量被限制在4GB以内。这一限制对于运行大型数据库如SQL Server 2000的企业来说是一个...

    手机号码归属地数据库mdb+包含最新号段+187+157+145+182(部分地区)等+20多万条

    在本案例中,我们讨论的是一个名为"TelNumber.mdb"的Microsoft Access数据库文件,它包含了187、157、145、182等特定手机号段的最新信息,总计超过20万条数据。 1. **Microsoft Access数据库**: Microsoft Access...

    ora_trunc_table.sh

    linux 下 shell 连接 oracle 数据库...脚本产生的背景是生产服务器每天产生几万笔数据,使用的数据库是oralceXE,当数据文件超过4G,会提示错误ORA-12953。因此需要调整数据库中部分表,日志表,部分数据,或者数据文件

    如何让SQL SERVER 2000企业版支持大于4G内存

    ### 如何让SQL Server 2000企业版支持大于4G内存 #### 背景与需求 在早期的数据库管理系统中,如SQL Server 2000企业版,由于设计时并未考虑高内存环境下的运行场景,因此默认情况下只支持最大4GB的物理内存。然而...

Global site tag (gtag.js) - Google Analytics