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

时间:2023-03-08 17:39:20

本文转自:http://jingyan.baidu.com/article/6b97984d9a26ec1ca3b0bf77.html

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

固定增量的数据,自动创建分区作业.

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

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

    sql2008 计划自动创建数据库分区【转】
    sql2008 计划自动创建数据库分区【转】
  2. 右击MsSQL2008对象资源管理器中的作业,选择新建作业,输入该作业你想用的名称,类别不用管,说明里面是输入一些该作业完成的功能,可不写,请务必勾选已启用复选框.

    sql2008 计划自动创建数据库分区【转】
  3. 点击新建作业窗体左侧的步骤项,点击右侧区域下方的新建按钮,输入步骤名称,类型请选择Transact-SQL脚本(T-SQL),运行身份默认,数据库请选择要进行分区的数据库,请不要选择master默认的,命令文本框中输入如下代码:

    /*--------------------创建数据库的文件组和物理文件------------------------*/

    declare @tableName varchar(50), @fileGroupName varchar(50), @ndfName varchar(50), @newNameStr varchar(50), @fullPath

    varchar(250), @newDay varchar(50), @oldDay datetime, @partFunName varchar(50), @schemeName varchar(50)
    set @tableName='WaterNet_DaFeng'
    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'+@newNameStr
    set @ndfName=N'F'+@newNameStr+''
    set @fullPath=N'D:\\Program Files\\Microsoft SQL Server\\MSSQL10.MSSQLSERVER\\MSSQL\\DATA\\'+@ndfName+'.ndf'

    --此处该为自己的数据文件路径,lui注释2015-5-4(右击服务器-属性-数据库设置可看到)
    set @partFunName=N'pf_Time'
    set @schemeName=N'ps_Time'
    --创建文件组
    if exists(select * from sys.filegroups where name=@fileGroupName)
    begin
    print '文件组存在,不需添加'
    end
    else
    begin
    exec('ALTER DATABASE '+@tableName+' ADD FILEGROUP ['+@fileGroupName+']')
    print '新增文件组'
    if exists(select * from sys.partition_schemes where name =@schemeName)
    begin
    exec('alter partition scheme '+@schemeName+' next used ['+@fileGroupName+']')
    print '修改分区方案'
    end
    if exists(select * from sys.partition_range_values where function_id=(select function_id from
    sys.partition_functions where name =@partFunName) )

    --and value=@oldDay   如果上次没做成功,则会导致以后都不会建立边界,所以屏蔽  2016-10-18 by lui
    begin
    exec('alter partition function '+@partFunName+'() split range('''+@newDay+''')')
    print '修改分区函数'
    end
    end
    --创建NDF文件
    if exists(select * from sys.database_files where [state]=0 and (name=@ndfName or physical_name=@fullPath))
    begin
    print 'ndf文件存在,不需添加'
    end
    else
    begin
    exec('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)
    begin
    print '此处修改需要在修改分区函数之前执行'
    end
    else
    begin
    exec('CREATE PARTITION FUNCTION '+@partFunName+'(DateTime)AS RANGE RIGHT FOR VALUES ('''+@newDay
    +''')')
    print '新创建分区函数'
    end
    --分区方案
    if exists(select * from sys.partition_schemes where name =@schemeName)
    begin
    print '此处修改需要在修改分区方案之前执行'
    end
    else
    begin
    exec('CREATE PARTITION SCHEME '+@schemeName+' AS PARTITION '+@partFunName+' TO
    (''PRIMARY'','''+@fileGroupName+''')')
    print '新创建分区方案'
    end
    print '---------------以下是变量定义值显示---------------------'
    print '当前数据库:'+@tableName
    print '当前日期:'+@newDay+'(用作随机生成的各种名称和分区界限)'
    print '合法命名方式:'+@newNameStr
    print '文件组名称:'+@fileGroupName
    print 'ndf物理文件名称:'+@ndfName
    print '物理文件完整路径:'+@fullPath
    print '分区函数:'+@partFunName
    print '分区方案:'+@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文件名称

    sql2008 计划自动创建数据库分区【转】
  4. 选择新建分区左侧的计划项,然后点击右侧区域下方的新建按钮,设定新建分区的时间间隔,图中设置的是每天创建一个新的分区,用户也可以自行修改,按月,按周,按自定义时间等

    其他的条目,通知,警报,目标可自行设置,也可不设置,至此自动创建分区的计划任务已成功设置.

    sql2008 计划自动创建数据库分区【转】
    END

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

  1. 右击要分区的表,选择存储菜单下的创建分区,上述步骤一中创建的分区函数是按datetime类型进行的分区,所以创建分区的时候需要选择相应类型的字段作为分区依据,用户也可以根据int型或其他类型的字段进行分区,选择下一步,使用现有分区函数下一步使用现有分区方案,下一步会自动按照分区方案执行的日期进行分区,继续点击下一步选择立即执行,完成后即可完成的整体的表分区自动执行.

    需注意:刚设置完第一步的计划任务,可能不会执行第一步的分区方案的代码,也就意味着没有创建分区函数和分区方案,第二步设置的时候使用现有分区函数和使用现有分区方案也就不可用,可先把第一步的代码执行一遍即可.

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