我想创建一个定义文件大小为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。
答案 0 :(得分:2)
当没有为主文件提供大小时,数据库引擎 使用模型数据库中主文件的大小。默认值 模型的大小为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