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

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

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

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

  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(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文件名称

  4.  

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

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

    END

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

  1.  

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

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

     
     
     
     

sql2008 计划自动创建数据库分区【转】的更多相关文章

  1. oracle11g interval(numtoyminterval())自动创建表分区

    Oracle11g通过间隔分区实现按月创建表分区 在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不 ...

  2. EntityFramework SQLiteCodeFirst 自动创建数据库 关闭级联删除

    外键的级联删除: 如A表中有主键idA, B表中设置外键(ForeignKey)为A表中的主键idA, 当A表中的记录被删除时, B表中所有引用此条记录的记录(即所有外键为idA的记录)将自动被删除 ...

  3. SpringBoot使用Hibernate,实现自动创建数据库表【博客数据库设计】

    我们准备设计博客,那就要设计数据库. 我们可以使用Hibernate来自动生成数据库. 博客数据库的结构: 实体类: 博客 Blog 博客分类 Type 博客标签 Tag 博客评论 Comment 用 ...

  4. EF自动创建数据库步骤之三(自定义数据库初始器)

    EF自动创建数据库需要我们告诉数据库如何进行初始化:如创建表后是否需要插入一些基础数据,是否 需要创建存储过程.触发器等.还有就是EF有三种初始化方式(参见下面三个类): DropCreateData ...

  5. EF自动创建数据库步骤之一(实体类写法)

    文章演示使用EF自动创建数据库第一个步骤创建实体类. 一.创建表映射实体类 using System; using System.Collections.Generic; using System.C ...

  6. 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统五 | 完善业务自动创建数据库

    教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 04 | 强化设计方案 05 | 完善业务自动创建数据库 说明 这节来把基础的业务部分完善一下. 因为 IQue ...

  7. EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧 ...

  8. oracle自动创建表分区

    创建一个table,记录哪些表需要创建表分区 create table STAT_TABLE ( tablename VARCHAR2(), pre_partition_name VARCHAR2() ...

  9. EF自动创建数据库步骤之二(继承DbContext类)

    创建好表实体类后,接着就是创建数据库上下文(继承DbContext)并将实体类添加进来. 代码示例如下: using DBClientEntity; using System; using Syste ...

随机推荐

  1. mvc路由规则相关

    1,可以创建多条路由规则,每条路由规则的name属性不能相同 2,路由规则是有顺序的,如果被前面的规则匹配了,那么后面的规则就没有机会了 下面是一条路由规则的代码 routes.MapRoute( n ...

  2. C# 关于委托和事件的妙文

    C# 关于委托和事件的妙文: 通过一个例子详细介绍委托和事件的作用:Observer模式简介 转自:http://blog.csdn.net/susan19890313/article/details ...

  3. (转)国内外三个不同领域巨头分享的Redis实战经验及使用场景

    随着应用对高性能需求的增加,NoSQL逐渐在各大名企的系统架构中生根发芽.这里我们将为大家分享社交巨头新浪微博.传媒巨头Viacom及图片分享领域佼佼者Pinterest带来的Redis实践,首先我们 ...

  4. 何为BFC

    BFC 定义 BFC(Block formatting context)直译为"块级格式化上下⽂文".它是⼀一个独⽴立的渲染区域,只有Block-level box参 与, 它规定 ...

  5. Android开发:碎片Fragment完全解析fragment_main.xml/activity_main.xml(转)

    注明:这个转的,见谅未能标明原始出处 我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再赘述. 但是Activ ...

  6. Linux 内核同步机制

        本文将就自己对内核同步机制的一些简要理解,做出一份自己的总结文档.     Linux内部,为了提供对共享资源的互斥访问,提供了一系列的方法,下面简要的一一介绍. Technorati 标签: ...

  7. C指针赋值

    Node* p = A; Node* f = B; Node* t; t = p; t = f 本人试图让p指向B,但这样操作是不行的.如下图:只是改变了t的指向,p并没有变

  8. sql简易的MRP资源分析

    写了个简易的MRP根据传进来的数据,进行上下级的判断,父表,子表 构思: 3张变量表,第一张用来存传进来的成品,这边对表做了循环就是成品是一样一样进去的,取成品表的第一行,将数据做父表和子表关联,取出 ...

  9. IIS目录下文件共享后System.IO.File.Exists返回false

    场景:在iis目录下,因为特殊需要共享一个文件夹,给到其他的技术人员访问,突然发现小小的操作,搞“大”了,使用 string path = Server.MapPath("~/file/te ...

  10. PHP 判断客户端请求是 Android 还是 IOS

    <?php if(strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone')||strpos($_SERVER['HTTP_USER_AGENT'], 'iPad ...