由于磁盘空间不足,无法为数据库分配新页面

15 sql-server

使用 SQL Server 导入和导出向导,我收到此错误:

错误 0xc0202009:数据流任务 1:SSIS 错误代码 DTS_E_OLEDBERROR。
发生 OLE DB 错误。错误代码:0x80004005。
由于文件组“PRIMARY”中的磁盘空间不足,无法为数据库“database”分配新页。通过删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建必要的空间。

我正在尝试上传一系列 2GB 文件,在加载第 4 个文件时,即使在我转到数据库属性 > 文件并将文件组的自动增长更改为 2500 MB 和 maxsize 无限制后,我仍然继续收到上述错误消息。

最好的解决方法是什么?这些数据最终将占用大约 60-80GB。

gre*_*reg 14

Sql express 数据库将在 10g 时达到顶峰。我相信这类似于您收到的错误消息。

我曾经在客户那里遇到过这个问题,我花了一段时间才弄明白。

你运行的是什么版本的sql?

  • 这个解决方案救了我!我使用的是 Express 版本并升级到了 Dev。 (2认同)

小智 8

尝试手动增长:

1. 在对象资源管理器中,连接到 SQL Server 数据库引擎的实例,然后展开该实例。

2.展开数据库,右键单击要增加的数据库,然后单击属性。

3.在数据库属性中,选择文件页面。

4.要增加现有文件的大小,请增加文件的初始大小 (MB) 列中的值。您必须将数据库的大小至少增加 1 兆字节。

5.要通过添加新文件来增加数据库的大小,请单击添加,然后输入新文件的值。有关详细信息,请参阅将数据或日志文件添加到数据库。

6. 单击确定。

来自:MSDN

  • 手动展开很好,因为它可能会告诉您更多细节。就我而言,我得到:“CREATE DATABASE 或 ALTER DATABASE 失败,因为由此产生的累积数据库大小将超过每个数据库 10240 MB 的许可限制。” 这是不言自明的。 (5认同)

swa*_*eck 7

确定

由于文件组“PRIMARY”中的磁盘空间不足,无法为数据库“database”分配新页。

并不是

由于文件组“PRIMARY”中的磁盘空间不足,无法为数据库“tempdb”分配新页。

?

如果它实际上[tempdb]在错误消息中,那么需要通过确保它[tempdb]位于与其他数据库分开的适当大小的磁盘上来单独管理。

如果它不在[tempdb]错误消息中,我想这种“上传”会受到[tempdb]很大的打击。是否[tempdb]在与 相同的磁盘/LUN 上'database'?如果是这样,您可能会因多次尝试文件增长(在多个数据库上)而加剧您的问题。因此,当您执行此“上传”操作时,请确保您也在进行监控[tempdb]

如果[tempdb]在单独的驱动器上并且您确定您有足够的空间,我会继续将您的数据文件大小调整为您期望的最终状态大小:

USE master;
GO
ALTER DATABASE [database]
MODIFY FILE
    (
    NAME = datafile,
    SIZE = 60GB,
    FILEGROWTH = 5GB
);
GO
Run Code Online (Sandbox Code Playgroud)

另外,请确保数据库的日志文件与数据文件是分开的。如果不是,那么您又回到了竞争性增长事件中。如果它们在不同的磁盘上,那么我也会仔细检查它们并适当调整它们的大小。

USE master;
GO
ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 8000MB
);
GO

ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 16000MB
);
GO

ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 24000MB
);
GO
...
Run Code Online (Sandbox Code Playgroud)

直到达到所需的日志文件大小。我们称之为 80GB,您可以在其中将增长设置为特定大小。我使用的是Paul RandalKimberly Tripp推荐的值

ALTER DATABASE [database]
MODIFY FILE 
(
    NAME = logfile, 
    SIZE = 80000MB,
    FILEGROWTH = 8000MB
);
Run Code Online (Sandbox Code Playgroud)