发布网友 发布时间:2022-04-22 23:58
共2个回答
懂视网 时间:2022-05-01 11:58
DATABASE [Test] ADD FILEGROUP FG2010 ALTER DATABASE [Test] ADD FILEGROUP FG2011 ALTER DATABASE [Test] ADD FILEGROUP FGAll2、新增分区文件
ALTER DATABASE [Test] ADD FILE (NAME=‘File2010‘,FILENAME=N‘D:Program FilesDataFile2010.ndf‘) TO FILEGROUP FG2010 ALTER DATABASE [Test] ADD FILE (NAME=‘File2011‘,FILENAME=N‘D:Program FilesDataFile2011.ndf‘) TO FILEGROUP FG2011 ALTER DATABASE [Test] ADD FILE (NAME=‘FileAll‘,FILENAME=N‘D:Program FilesDataFileAll.ndf‘) TO FILEGROUP FGAll
3、创建分区函数
--该分区函数创建3个分区(<=2010-01-01、2010-01-01~2011-01-01,>2011-01-01)
--RANGE LEFT标识边界值在左边
CREATE PARTITION FUNCTION OrderPartitionFn(datetime) AS RANGE LEFT FOR VALUES(‘2010-01-01‘,‘2011-01-01‘)
4、创建分区方案
CREATE PARTITION SCHEME OrderPartitionScheme AS PARTITION OrderPartitionFn TO ( FG2010, FG2011, FGAll )
5、创建分区表
CREATE TABLE OrderRecords ( Id uniqueidentifier, CreateTime datetime, Total int, ) --OrderPartitionScheme是刚刚定义的分区架构,括号内为指定的分区列 ON OrderPartitionScheme(CreateTime)
6、定义执行自动分区操作
使用sql job 定期执行操作
DECLARE @maxValue DATETIME, @fileGroupName VARCHAR(200), @fileNamePath VARCHAR(200), @partitionFnName VARCHAR(200), @schemeName VARCHAR(200), @fileName VARCHAR(200), @sql NVARCHAR(1000) --分区函数 SET @partitionFnName=‘OrderPartitionFn‘; --分区方案 SET @schemeName=‘OrderPartitionScheme‘; --获取当前分区函数最大边界值 SELECT @MaxValue = Convert(datetime,MAX(value)) FROM SYS.PARTITION_RANGE_VALUES PRV LEFT JOIN SYS.partition_functions fun on prv.function_id=fun.function_id WHERE FUN.name=@partitionFnName--分区函数名 SET @fileGroupName=‘FG‘+CONVERT(varchar,(YEAR(@MaxValue)+1)) --D:Program FilesDataFile2016.ndf SET @fileNamePath=‘D:Program FilesDataFile‘+ CONVERT(varchar,(YEAR(@MaxValue)+1))+‘.ndf‘ --File2016 SET @fileName=N‘File‘+ CONVERT(varchar,(YEAR(@MaxValue)+1)) --使用ALTER语句新增一个文件组 SET @sql=‘ALTER DATABASE [Test] ADD FILEGROUP ‘+@fileGroupName PRINT @sql EXEC(@sql) SET @sql=‘ALTER DATABASE [Test] ADD FILE (NAME=‘‘‘+@fileName+‘‘‘,FILENAME=N‘‘‘+@fileNamePath+‘‘‘) TO FILEGROUP‘+‘ ‘+@fileGroupName PRINT @sql EXEC(@sql) --修改分区方案,用一个新的文件组存放下一新增的数据 SET @sql=‘ALTER PARTITION SCHEME [‘+@schemeName+‘] NEXT USED‘+‘ ‘+@fileGroupName PRINT @sql; EXEC(@sql) SET @sql=‘ALTER PARTITION FUNCTION ‘+@partitionFnName+‘() SPLIT RANGE (‘‘‘+Convert(varchar,DATEADD(YEAR,1,@maxValue),120)+‘‘‘)‘; print @sql; EXEC(@sql)
SqlServer自动化分区
标签:
热心网友 时间:2022-05-01 09:06
本文是我关于数据库分区的方案的一些想法,或许有些问题。仅供大家讨论。SqlServer (SqlServer 2005\SqlServer 2008)实现分区需要在企业版下进行.