多语言展示
当前在线:1872今日阅读:84今日分享:32

sql2008 计划自动创建数据库分区

固定增量的数据,自动创建分区作业.
工具/原料

MsSQL2008

步骤一:创建分区的计划任务
1

打开MsSQL2008,找到作业该项,如果打不开或者SQL Server代理是未启动状态,请先在windows服务中启动SQL Server代理(参考图片),

2

右击MsSQL2008对象资源管理器中的作业,选择新建作业,输入该作业你想用的名称,类别不用管,说明里面是输入一些该作业完成的功能,可不写,请务必勾选已启用复选框.

3

点击新建作业窗体左侧的步骤项,点击右侧区域下方的新建按钮,输入步骤名称,类型请选择Transact-SQL脚本(T-SQL),运行身份默认,数据库请选择要进行分区的数据库,请不要选择master默认的,命令文本框中输入如下代码:/*--------------------创建数据库的文件组和物理文件------------------------*/declare  @tableName varchar(50),  @fileGroupName varchar(50),  @ndfName varchar(50),  @newNameStr varchar(50),  @fullPath varchar(50),  @newDay varchar(50),  @oldDay datetime,  @partFunName varchar(50),  @schemeName varchar(50)set @tableName='要分区的数据库名称'set @newDay=CONVERT(varchar(100), GETDATE(), 23)--23:按天 114:按时间set @oldDay=cast(CONVERT(varchar(10),dateadd(day,-1,getdate()), 120 ) as datetime)set @newNameStr=Replace(Replace(@newDay,':','_'),'-','_')set @fileGroupName=N'G'+@newNameStrset @ndfName=N'F'+@newNameStr+''set @fullPath=N'E:\\SQLDataBase\\UserData\\'+@ndfName+'.ndf'set @partFunName=N'pf_Time'set @schemeName=N'ps_Time'--创建文件组if exists(select * from sys.filegroups where name=@fileGroupName)beginprint '文件组存在,不需添加'endelsebeginexec('ALTER DATABASE '+@tableName+' ADD FILEGROUP ['+@fileGroupName+']')print '新增文件组'if exists(select * from sys.partition_schemes where name =@schemeName)beginexec('alter partition scheme '+@schemeName+'  next used ['+@fileGroupName+']')print '修改分区方案'endif exists(select * from sys.partition_range_values where function_id=(select function_id from sys.partition_functions where name =@partFunName) and value=@oldDay)beginexec('alter partition function  '+@partFunName+'() split range('''+@newDay+''')')print '修改分区函数'endend--创建NDF文件if exists(select * from sys.database_files where [state]=0 and (name=@ndfName or physical_name=@fullPath))beginprint 'ndf文件存在,不需添加'endelsebeginexec('ALTER DATABASE '+@tableName+'ADD FILE (NAME ='+@ndfName+',FILENAME = '''+@fullPath+''')TO FILEGROUP ['+@fileGroupName+']')print '新创建ndf文件'end/*--------------------以上创建数据库的文件组和物理文件------------------------*/--分区函数if exists(select * from sys.partition_functions where name =@partFunName)beginprint '此处修改需要在修改分区函数之前执行'endelsebeginexec('CREATE PARTITION FUNCTION '+@partFunName+'(DateTime)AS RANGE RIGHTFOR VALUES ('''+@newDay+''')')print '新创建分区函数'end--分区方案if exists(select * from sys.partition_schemes where name =@schemeName)beginprint '此处修改需要在修改分区方案之前执行'endelsebeginexec('CREATE PARTITION SCHEME '+@schemeName+' AS PARTITION '+@partFunName+' TO (''PRIMARY'','''+@fileGroupName+''')')print '新创建分区方案'endprint '---------------以下是变量定义值显示---------------------'print '当前数据库:'+@tableNameprint '当前日期:'+@newDay+'(用作随机生成的各种名称和分区界限)'print '合法命名方式:'+@newNameStrprint '文件组名称:'+@fileGroupNameprint 'ndf物理文件名称:'+@ndfNameprint '物理文件完整路径:'+@fullPathprint '分区函数:'+@partFunNameprint '分区方案:'+@schemeName/*--查看创建的分区函数select * from sys.partition_functions--查看分区函数的临界值select * from sys.partition_range_values--查询分区方案select * from sys.partition_schemes--查询表数据在哪个分区中存储,where条件查询第一个分区中存在的数据select *,$partition.pf_SaveTime(分区字段) as Patition from 表名 where $partition.pf_SaveTime(分区字段)=1*/GO点击确定按钮上述代码中的变量名称,路径等均可自行修改,上述是按天为单位,以G开头的日期作为文件组名称,以F开头的日期作为物理分区文件名即ndf文件名称

4

选择新建分区左侧的计划项,然后点击右侧区域下方的新建按钮,设定新建分区的时间间隔,图中设置的是每天创建一个新的分区,用户也可以自行修改,按月,按周,按自定义时间等其他的条目,通知,警报,目标可自行设置,也可不设置,至此自动创建分区的计划任务已成功设置.

步骤二:对表应用分区方案和分区函数

右击要分区的表,选择存储菜单下的创建分区,上述步骤一中创建的分区函数是按datetime类型进行的分区,所以创建分区的时候需要选择相应类型的字段作为分区依据,用户也可以根据int型或其他类型的字段进行分区,选择下一步,使用现有分区函数下一步使用现有分区方案,下一步会自动按照分区方案执行的日期进行分区,继续点击下一步选择立即执行,完成后即可完成的整体的表分区自动执行.需注意:刚设置完第一步的计划任务,可能不会执行第一步的分区方案的代码,也就意味着没有创建分区函数和分区方案,第二步设置的时候使用现有分区函数和使用现有分区方案也就不可用,可先把第一步的代码执行一遍即可.

注意事项

创建分区代码中的变量等一些设置,需根据用户自身环境自行设置,不要直接复制

推荐信息