SQL Server提示错误:未能为数据库***中的对象***分配空间,原因是文件组PRIMARY已满。如何解决?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
服务器使用MS SQL SERVER 2008R2,最近经常出现无法新增信息的错误。查看日志后发现严重错误提示:未能为数据库'***'中的对象'***'分配空间,原因是文件组'PRIMARY'已满。 针对此问题,可按以下步骤排查与解决: 一、问题排查 1.检查磁盘剩余空间 -检查磁盘剩余空间是否足够。如果没有磁盘剩余空间,则需要清理磁盘,腾出空间。 2.检查磁盘分区格式 -如果是FAT16格式,数据文件最大只能是2G;如果是FAT32格式,数据文件最大只能是4G。改为NTFS分区则没有这种限制。 3.检查数据库文件大小限制 -通过企业管理器,右键数据库,选择“属性”,再查看“文件增长限制”。如果有限制大小,取消限制。 4.检查SQL版本 -如果使用MSDE,则限制了数据文件最大是2G。 5.检查TEMPDB空间占用情况 -该临时数据库应该经常清理。 二、问题解决 1.调整数据库文件及日志的最大文件大小 -打开企业管理器,右键报错的数据库,选择“属性”,发现常规标签页的可用空间显示只有1.03M,原来是之前做过限制。一种解决方案是设置该数据库文件以及日志的“最大文件大小”为文件增长不受限制。同时,要经常清理数据库日志和备份数据库文件。 2.为primary组添加新的数据文件 -可以使用语句“alter database库名add file(NAME =逻辑文件名,FILENAME = c:实际文件名.ndf)”为primary组添加新的数据文件来解决问题。 3.压缩日志及数据库文件的方法 -清空日志:使用“DUMP TRANSACTION库名WITH NO_LOG”。 -截断事务日志:使用“BACKUP LOG数据库名WITH NO_LOG”。 -收缩数据库文件 -通过企业管理器操作:右键要压缩的数据库,选择“所有任务”-“收缩数据库”-“收缩文件”,选择日志文件或数据文件,在收缩方式里选择收缩至XXM(这里会给出一个允许收缩到的最小M数,直接输入这个数,确定即可)。 -也可以使用SQL语句来完成:收缩数据库使用“DBCC SHRINK DATABASE(客户资料)”;收缩指定数据文件(1是文件号,可通过“select * from sysfiles”查询到)使用“DBCC SHRINKFILE(1)”。 -最大化缩小日志文件(此方法有风险) -分离数据库:企业管理器-服务器-数据库-右键-分离数据库。 -在我的电脑中删除LOG文件。 -附加数据库:SSMS控制台-服务器-数据库-右键-附加数据库。此方法将生成新的LOG,大小只有500多K。也可以使用代码,如分离pubs:“EXEC sp_detach_db @dbname = pubs”,删除日志文件后再附加:“EXEC sp_attach_single_file_db @dbname = pubs,@physname = c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf”。不过此步骤不安全,有可能损坏数据库或丢失数据,一般不建议使用。 4.设置自动收缩 -通过企业管理器操作:企业管理器-服务器-右键数据库-属性-选项-选择“自动收缩”;也可以使用SQL语句设置:“EXEC sp_dboption数据库名, autoshrink, TRUE”。 5.限制日志增长 -通过企业管理器操作:企业管理器-服务器-右键数据库-属性-事务日志,将文件增长限制为xM(x是允许的最大数据文件大小);也可以使用SQL语句设置:“alter database 数据库名modify file(name =逻辑文件名,maxsize = 20)”。不过如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复,一般不建议这样设置。 6.一种更简单的解决方法 -右键数据库属性窗口-故障还原模型-设为简单。 -右键数据库所有任务-收缩数据库。 -右键数据库属性窗口-故障还原模型-设为大容量日志记录。 请注意:请按步骤进行操作,未进行前面的步骤,请不要做后面的步骤,否则可能损坏数据库。 该文章在 2024/12/19 17:38:04 编辑过 |
关键字查询
相关文章
正在查询... |