创建具有定义文件大小的SQL Server数据库

时间:2018-07-16 23:09:49

标签: c# visual-studio-2017 localdb

我想创建一个定义文件大小为512 KB的.mdf SQL Server数据库文件:

using System.Data.SqlClient;

SqlConnection connection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;Database=master");

if (connection.State == ConnectionState.Closed) 
     connection.Open();

var command = connection.CreateCommand();
command.CommandText = "CREATE DATABASE thedb ON PRIMARY (NAME='thedb', FILENAME='r:\thedb.mdf', SIZE = 512KB, " + 
     "MAXSIZE = UNLIMITED, FILEGROWTH = 500KB) LOG ON (NAME ='thedb_log', FILENAME = 'r:\thedb_log.ldf', SIZE = 512KB)";

command.ExecuteNonQuery();

这将创建一个大小为8 MB的.mdf文件和一个大小为64.5 MB(!)的.ldf文件...

如果我忽略了LOG ON,那么.ldf文件的大小也是8 MB。

2 个答案:

答案 0 :(得分:2)

来自MSDN reference

  

当没有为主文件提供大小时,数据库引擎   使用模型数据库中主文件的大小。默认值   模型的大小为8 MB(从SQL Server 2016(13.x开始))或1 MB   (对于早期版本)。当辅助数据文件或日志文件为   指定,但未为文件指定大小,数据库引擎   使文件为8 MB(SQL Server 2016(13.x开头))或1 MB   (对于早期版本)。为主文件指定的大小必须   至少与模型数据库的主文件一样大。

检查模型DB mdf文件的大小。您的新数据库不能小于这个值。如果初始文件大小的数字太小,则默认为8MB。您也许可以减小模型数据库的大小,以使数据库小于8MB。

您可能创建的文件太小而无法使SQL Server正常运行。如果您正在寻找小型单文件DB,则可以考虑使用SQLLite

答案 1 :(得分:1)

进行create database时,将基于model database创建新数据库。参见The model Database and Creating New Databases。当defining a size用于新数据库时,如果该大小小于模型数据库,则将忽略该大小:

  

为主文件指定的大小必须至少与模型数据库的主文件一样大。

由于模型数据库为8MB,因此任何新数据库的默认(最小)大小也为8MB。

要具有较小的文件大小,DBCC SHRINKFILE可以在模型数据库上执行。允许的最小大小为3MB。

use model;
dbcc shrinkfile(modeldev, 3)

来自:https://github.com/SimonCropp/LocalDb#template-database-size