我们对您的硬盘设置了解不多。
http://blog.sqlauthority.com/2009/05/31/sql-server-create-multiple-filegroup-for-single-database/
http://msdn.microsoft.com/en-us/library/bb522469.aspx
第一个链接将解释这个概念。
第二个链接将显示语法。
您要查看的 3 个项目是:
[ , SIZE = size [ KB | MB | GB | TB ] ]
[ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ]
[ , FILEGROWTH = growth_increment [ KB | MB | GB | TB| % ] ]
为什么?
第一个是初始大小。第二个是最大尺寸。如果设置了此项,即使您的硬盘驱动器上可能有空间,数据库也将停止增长。第三个是“如果我没有违反 maxsize 规则,我将扩展多大”。
现在。您可以将 MAXSIZE 设置为 UNLIMITED。
然而。当您的硬盘驱动器装满时,您将开始出现错误。
所以你必须玩 dba,然后选择最好的选项。
就个人而言,我会将 MAXSIZE 设置为小于驱动器上的可用空间,这样您就不会达到边缘点。
ALSO:您可以创建不同的文件组,并将不同的不同表放在不同的文件组上。如果您知道一张桌子很大,而另一张桌子很小,这很方便。
所以...检查您是否已经设置了 MAXSIZE 设置。
然后你必须用你的桌子、硬盘、文件组和桌子玩轮盘赌。
您还可以将日志文件放在不同的硬盘驱动器上,作为解决空间问题的另一种选择。
这是创建文件组,然后将表移动到该新文件组的一个很好的小示例。
http://www.daveturpin.com/2010/09/move-tables-to-new-filegroup/
下面是我使用 SQLCMD 模式创建数据库的脚本。请注意,目录必须“预先存在”(如果您实际上并未坐在 sql 服务器上,则在服务器上,而不是您的本地计算机上)。
:Setvar DBName MyFirstDatabase01
:Setvar DataFilesBaseDirectory "C:\WUTemp\Some Folder\"
:Setvar LogFilesBaseDirectory "C:\WUTemp\Some Folder\"
:Setvar DatabasePrimaryDataFileStartSizeMB 9
:Setvar DatabasePrimaryDataFileGrowthMB 8
:Setvar DatabasePrimaryLogFileStartSizeMB 7
:Setvar DatabasePrimaryLogFileGrowthMB 6
Use [master];
GO
if exists (select * from sysdatabases where name='$(DBName)')
BEGIN
DROP DATABASE [$(DBName)];
END
GO
--Create Database $(DBName)
--G--O
DECLARE @device_directory_data NVARCHAR(520)
DECLARE @device_directory_log NVARCHAR(520)
--SELECT @device_directory_data = SUBSTRING(filename, 1, CHARINDEX(N'master.mdf', LOWER(filename)) - 1) FROM master.dbo.sysaltfiles WHERE dbid = 1 AND fileid = 1
--SELECT @device_directory_log = SUBSTRING(filename, 1, CHARINDEX(N'master.mdf', LOWER(filename)) - 1) FROM master.dbo.sysaltfiles WHERE dbid = 1 AND fileid = 1
select @device_directory_data = '$(DataFilesBaseDirectory)'
select @device_directory_log = '$(LogFilesBaseDirectory)'
print @device_directory_data
print @device_directory_log
EXECUTE (N'CREATE DATABASE $(DBName)
ON PRIMARY (NAME = N''$(DBName)'', FILENAME = N''' + @device_directory_data + N'$(DBName).mdf'', SIZE = $(DatabasePrimaryDataFileStartSizeMB) MB, FILEGROWTH = $(DatabasePrimaryDataFileGrowthMB)MB)
LOG ON (NAME = N''$(DBName)_log'', FILENAME = N''' + @device_directory_log + N'$(DBName).ldf'', SIZE = $(DatabasePrimaryLogFileStartSizeMB) MB, FILEGROWTH = $(DatabasePrimaryLogFileGrowthMB)MB)')
DECLARE @logsize char(1)
SELECT @logsize = CASE WHEN convert(varchar, Serverproperty('ProductVersion')) LIKE '9%'
--THEN '10'
--ELSE '5'
THEN '13'
ELSE '14'
END
EXECUTE(N'ALTER DATABASE $(DBName)
ADD LOG FILE (NAME = N''$(DBName)_log2'',
FILENAME = N''' + @device_directory_log + N'$(DBName)log2.ldf'', SIZE = ' + @logsize + ' MB)')
-- Make the database case sensitive to clean up the development effort
-- EXECUTE(N'ALTER DATABASE $(DBName) COLLATE SQL_Latin1_General_CP1_CS_AS')
exec sp_dboption '$(DBName)','trunc. log on chkpt.','true'
exec sp_dboption '$(DBName)','select into/bulkcopy','true'
GO
GO