首页 > 电脑专区 > 电脑教程 >

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

来源:互联网 2023-02-20 20:53:40 83

固定增量的数据,自动创建分区作业.yUZ办公区 - 实用经验教程分享!

工具/原料

  • MsSQL2008

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

  • 1

    打开MsSQL2008,找到作业该项,如果打不开或者SQL Server代理是未启动状态,请先在windows服务中启动SQL Server代理(参考图片),yUZ办公区 - 实用经验教程分享!

    sql2008 计划自动创建数据库分区yUZ办公区 - 实用经验教程分享!

    sql2008 计划自动创建数据库分区yUZ办公区 - 实用经验教程分享!

  • 2

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

    sql2008 计划自动创建数据库分区yUZ办公区 - 实用经验教程分享!

  • 2该信息未经许可获取自百度经验
  • 3

    点击新建作业窗体左侧的步骤项,点击右侧区域下方的新建按钮,输入步骤名称,类型请选择Transact-SQL脚本(T-SQL),运行身份默认,数据库请选择要进行分区的数据库,请不要选择master默认的,命令文本框中输入如下代码:yUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    /*--------------------创建数据库的文件组和物理文件------------------------*/yUZ办公区 - 实用经验教程分享!

    declare @tableName varchar(50), @fileGroupName varchar(50), @ndfName varchar(50), @newNameStr varchar(50), @fullPathyUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    varchar(50), @newDay varchar(50), @oldDay datetime, @partFunName varchar(50), @schemeName varchar(50)yUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    set @tableName='要分区的数据库名称'yUZ办公区 - 实用经验教程分享!

    set @newDay=CONVERT(varchar(100), GETDATE(), 23)--23:按天 114:按时间yUZ办公区 - 实用经验教程分享!

    set @oldDay=cast(CONVERT(varchar(10),dateadd(day,-1,getdate()), 120 ) as datetime)yUZ办公区 - 实用经验教程分享!

    set @newNameStr=Replace(Replace(@newDay,':','_'),'-','_')yUZ办公区 - 实用经验教程分享!

    set @fileGroupName=N'G' @newNameStryUZ办公区 - 实用经验教程分享!

    set @ndfName=N'F' @newNameStr ''yUZ办公区 - 实用经验教程分享!

    set @fullPath=N'E:\\SQLDataBase\\UserData\\' @ndfName '.ndf'yUZ办公区 - 实用经验教程分享!

    set @partFunName=N'pf_Time'yUZ办公区 - 实用经验教程分享!

    set @schemeName=N'ps_Time'yUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    --创建文件组yUZ办公区 - 实用经验教程分享!

    if exists(select * from sys.filegroups where name=@fileGroupName)yUZ办公区 - 实用经验教程分享!

    beginyUZ办公区 - 实用经验教程分享!

    print '文件组存在,不需添加'yUZ办公区 - 实用经验教程分享!

    endyUZ办公区 - 实用经验教程分享!

    elseyUZ办公区 - 实用经验教程分享!

    beginyUZ办公区 - 实用经验教程分享!

    exec('ALTER DATABASE ' @tableName ' ADD FILEGROUP [' @fileGroupName ']')yUZ办公区 - 实用经验教程分享!

    print '新增文件组'yUZ办公区 - 实用经验教程分享!

    if exists(select * from sys.partition_schemes where name =@schemeName)yUZ办公区 - 实用经验教程分享!

    beginyUZ办公区 - 实用经验教程分享!

    exec('alter partition scheme ' @schemeName ' next used [' @fileGroupName ']')yUZ办公区 - 实用经验教程分享!

    print '修改分区方案'yUZ办公区 - 实用经验教程分享!

    endyUZ办公区 - 实用经验教程分享!

    if exists(select * from sys.partition_range_values where function_id=(select function_id fromyUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    sys.partition_functions where name =@partFunName) and value=@oldDay)yUZ办公区 - 实用经验教程分享!

    beginyUZ办公区 - 实用经验教程分享!

    exec('alter partition function ' @partFunName '() split range(''' @newDay ''')')yUZ办公区 - 实用经验教程分享!

    print '修改分区函数'yUZ办公区 - 实用经验教程分享!

    endyUZ办公区 - 实用经验教程分享!

    endyUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    --创建NDF文件yUZ办公区 - 实用经验教程分享!

    if exists(select * from sys.database_files where [state]=0 and (name=@ndfName or physical_name=@fullPath))yUZ办公区 - 实用经验教程分享!

    beginyUZ办公区 - 实用经验教程分享!

    print 'ndf文件存在,不需添加'yUZ办公区 - 实用经验教程分享!

    endyUZ办公区 - 实用经验教程分享!

    elseyUZ办公区 - 实用经验教程分享!

    beginyUZ办公区 - 实用经验教程分享!

    exec('ALTER DATABASE ' @tableName 'ADD FILE(NAME =' @ndfName ',yUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    FILENAME = ''' @fullPath ''')TO FILEGROUP [' @fileGroupName ']')yUZ办公区 - 实用经验教程分享!

    print '新创建ndf文件'yUZ办公区 - 实用经验教程分享!

    endyUZ办公区 - 实用经验教程分享!

    /*--------------------以上创建数据库的文件组和物理文件------------------------*/yUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    --分区函数yUZ办公区 - 实用经验教程分享!

    if exists(select * from sys.partition_functions where name =@partFunName)yUZ办公区 - 实用经验教程分享!

    beginyUZ办公区 - 实用经验教程分享!

    print '此处修改需要在修改分区函数之前执行'yUZ办公区 - 实用经验教程分享!

    endyUZ办公区 - 实用经验教程分享!

    elseyUZ办公区 - 实用经验教程分享!

    beginyUZ办公区 - 实用经验教程分享!

    exec('CREATE PARTITION FUNCTION ' @partFunName '(DateTime)AS RANGE RIGHTFOR VALUES (''' @newDayyUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    ''')')yUZ办公区 - 实用经验教程分享!

    print '新创建分区函数'yUZ办公区 - 实用经验教程分享!

    endyUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    --分区方案yUZ办公区 - 实用经验教程分享!

    if exists(select * from sys.partition_schemes where name =@schemeName)yUZ办公区 - 实用经验教程分享!

    beginyUZ办公区 - 实用经验教程分享!

    print '此处修改需要在修改分区方案之前执行'yUZ办公区 - 实用经验教程分享!

    endyUZ办公区 - 实用经验教程分享!

    elseyUZ办公区 - 实用经验教程分享!

    beginyUZ办公区 - 实用经验教程分享!

    exec('CREATE PARTITION SCHEME ' @schemeName ' AS PARTITION ' @partFunName ' TOyUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    (''PRIMARY'',''' @fileGroupName ''')')yUZ办公区 - 实用经验教程分享!

    print '新创建分区方案'yUZ办公区 - 实用经验教程分享!

    endyUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    print '---------------以下是变量定义值显示---------------------'yUZ办公区 - 实用经验教程分享!

    print '当前数据库:' @tableNameyUZ办公区 - 实用经验教程分享!

    print '当前日期:' @newDay '(用作随机生成的各种名称和分区界限)'yUZ办公区 - 实用经验教程分享!

    print '合法命名方式:' @newNameStryUZ办公区 - 实用经验教程分享!

    print '文件组名称:' @fileGroupNameyUZ办公区 - 实用经验教程分享!

    print 'ndf物理文件名称:' @ndfNameyUZ办公区 - 实用经验教程分享!

    print '物理文件完整路径:' @fullPathyUZ办公区 - 实用经验教程分享!

    print '分区函数:' @partFunNameyUZ办公区 - 实用经验教程分享!

    print '分区方案:' @schemeNameyUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    /*yUZ办公区 - 实用经验教程分享!

    --查看创建的分区函数yUZ办公区 - 实用经验教程分享!

    select * from sys.partition_functionsyUZ办公区 - 实用经验教程分享!

    --查看分区函数的临界值yUZ办公区 - 实用经验教程分享!

    select * from sys.partition_range_valuesyUZ办公区 - 实用经验教程分享!

    --查询分区方案yUZ办公区 - 实用经验教程分享!

    select * from sys.partition_schemesyUZ办公区 - 实用经验教程分享!

    --查询表数据在哪个分区中存储,where条件查询第一个分区中存在的数据yUZ办公区 - 实用经验教程分享!

    select *,$partition.pf_SaveTime(分区字段) as Patition from 表名 where $partition.pf_SaveTime(分区字段)=1yUZ办公区 - 实用经验教程分享!

    */yUZ办公区 - 实用经验教程分享!

    GOyUZ办公区 - 实用经验教程分享!

    点击确定按钮yUZ办公区 - 实用经验教程分享!

    yUZ办公区 - 实用经验教程分享!

    上述代码中的变量名称,路径等均可自行修改,上述是按天为单位,以G开头的日期作为文件组名称,以F开头的日期作为物理分区文件名即ndf文件名称yUZ办公区 - 实用经验教程分享!

    sql2008 计划自动创建数据库分区yUZ办公区 - 实用经验教程分享!

  • 4

    选择新建分区左侧的计划项,然后点击右侧区域下方的新建按钮,设定新建分区的时间间隔,图中设置的是每天创建一个新的分区,用户也可以自行修改,按月,按周,按自定义时间等yUZ办公区 - 实用经验教程分享!

    其他的条目,通知,警报,目标可自行设置,也可不设置,至此自动创建分区的计划任务已成功设置.yUZ办公区 - 实用经验教程分享!

    sql2008 计划自动创建数据库分区yUZ办公区 - 实用经验教程分享!

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

  • 1

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

    yUZ办公区 - 实用经验教程分享!

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

    sql2008 计划自动创建数据库分区yUZ办公区 - 实用经验教程分享!

    sql2008 计划自动创建数据库分区yUZ办公区 - 实用经验教程分享!

    sql2008 计划自动创建数据库分区yUZ办公区 - 实用经验教程分享!

    sql2008 计划自动创建数据库分区yUZ办公区 - 实用经验教程分享!

    sql2008 计划自动创建数据库分区yUZ办公区 - 实用经验教程分享!

  • 注意事项

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

    以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!yUZ办公区 - 实用经验教程分享!


    标签: 分区计划创建数据

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码