创建数据库时主文件大小错误

时间:2014-08-22 17:51:57

标签: sql-server

我正在尝试在SQL Server 2005中创建数据库并收到以下错误

  

Msg 1803,Level 16,State 1,Line 2

     

CREATE DATABASE语句失败。主文件必须至少为32 MB才能容纳模型数据库的副本。

创建SQL

CREATE DATABASE [MyDatabase] ON  PRIMARY 
    ( NAME = N'MyDatabase_Data', FILENAME = N'D:\SQL SERVER\DataFiles\MyDatabase\MyDatabase.MDF' , SIZE = 3096KB , MAXSIZE = 29687808KB , FILEGROWTH = 262144KB ), 
    ( NAME = N'MyDatabase_Data2', FILENAME = N'D:\SQL SERVER\DataFiles\MyDatabase\MyDatabase_Data2.ndf' , SIZE = 3096KB , MAXSIZE = 10485760KB , FILEGROWTH = 262144KB ), 
     FILEGROUP [FG_Indexes] 
    ( NAME = N'MyDatabase_Indexes', FILENAME = N'D:\SQL SERVER\DataFiles\MyDatabase\MyDatabase_Indexes.ndf' , SIZE = 1920KB , MAXSIZE = 27136000KB , FILEGROWTH = 262144KB )
     LOG ON 
    ( NAME = N'MyDatabase_Log', FILENAME = N'D:\SQL SERVER\LogFiles\MyDatabase\MyDatabase_Log.LDF' , SIZE = 1920KB , MAXSIZE = 7883776KB , FILEGROWTH = 262144KB )

我检查了msdb大小,它大约是32MB ......

EXEC sp_helpdb @dbname= 'MSDB'

MSDB大小

enter image description here

如何克服此错误并创建数据库(不对create database脚本进行任何更改)?

主数据库

EXEC sp_helpdb @dbname= 'master'

enter image description here

3 个答案:

答案 0 :(得分:16)

当SQL Server创建新数据库时,它会将model数据库复制为模板。 model(取决于您的版本)具有特定的初始大小。

有关详细信息,请参阅this MSDN blog

您声明新数据库的初始大小应为3MB:

CREATE DATABASE [MyDatabase] ON  PRIMARY 
    ( NAME = N'MyDatabase_Data', FILENAME = N'D:\SQL SERVER\DataFiles\MyDatabase\MyDatabase.MDF' , SIZE = 3096KB , MAXSIZE = 29687808KB , FILEGROWTH = 262144KB )

您需要增加起始尺寸以适应您的model数据库'初始大小。

注意:默认型号为3MB(在SQL Server 2012上 - 较低版本较少) - 您可能需要查看为什么您的4MB。

答案 1 :(得分:5)

所有新创建的数据库都使用Model数据库作为模板。新数据库的开头不小于Model数据库。
您收到的错误表明型号数据库大小为32MB 要修复它,请创建一个大小大于模型数据库大小的数据库 您还可以缩小模型数据库以减小其大小 用于创建具有自定义尺寸的数据库的示例代码

CREATE DATABASE Tests
ON
( NAME = 'Tests',
FILENAME = 'c:\tests.mdf',
SIZE = 33000KB )
GO

答案 2 :(得分:0)

只需再添加一个选项:因为模型数据库是新数据库的模板,所以通过排除SIZE,MAXSIZE和FILEGROWTH参数,我能够解决“容纳”错误。这些值直接从模型数据库中获取,并相应地创建了数据库。

我知道这种方法可能无法在所有情况下都有效,因为当您要显式包含size参数时。但是对于那些根据自己的喜好调整模型数据库的人来说,不带SIZE,MAXSIZE和FILEGROWTH的CREATE DATABASE语句将只使用模型中的值,而不会抛出错误。

HTH