关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »SQL Server 2005 自动化删除表分区设计方案(1)

    SQL Server 2005 自动化删除表分区设计方案(1)

    2011-04-18 10:13:00 出处:ITJS
    分享

    导读:随着技术的发展进步,如今,SQL Server 2005数据库自动化已经渐渐走近人们的生活,SQL Server 2005 自动化删除表分区也已经实现啦,下文中将为大家详细介绍SQL Server 2005 自动化删除表分区设计方案,希望对大家能够有所帮助。

    我们的服务器的数据已经有了800G,并且每天进数据大概有120W条记录(数据空间大概为7G),而服务器现在已经没有太多的磁盘空间了,面对这样的问题,一般都是使用交换表分区来快速删除数据,并使用之前的分区来存放新进的数据,假如每次都人工的话就太麻烦了,所以我对这个如何进行交换分区删除数据来清理磁盘空间做成了自动化。 分析与设计思路

    分区特点:分区使用了自增ID作为分区字段;分区的索引进行存储位置对齐;

    设计步骤1:表分区已经确定了各个分区值,我们就用一个表保存可能存在的分区值,并插入到表中,当达到预警值(Change_Value)时,我们就执行交换分区;

    设计步骤2:使用一个存储过程来完成交换分区;

    1) 创建一个临时表

    2) 交换分区数据

    3) 删除临时表

    4) 修改分区方案

    5) 修改分区函数

    设计步骤3:使用作业定时执行存储过程,实现自动化;

    参考脚本

    下面是创建表的脚本和执行交换分区的存储过程,希望对你有帮助。

    创建表

    CREATE TABLE [dbo].[PartitionManage](

    [Id] [int] IDENTITY(1,1) NOT NULL,

    [Change_Value] [int] NULL,

    [Part_Value] [int] NULL,

    [IsDone] [bit] NULL,

    CONSTRAINT [PK_PartitionManage] PRIMARY KEY CLUSTERED

    (

    [Id] ASC

    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

    ) ON [PRIMARY]

    插入数据

    declare @i int

    declare @maxValue int

    set @i=10

    set @maxValue=100

    while @i <= @maxValue

    begin

    insert into dbo.PartitionManage values(@i-4,@i,0)

    set @i = @i + 10

    end

    -- =============================================

    -- Author: <Viajar>

    -- Create date: <2011.02.22>

    -- Description: <分区管理>

    -- =============================================

    CREATE PROCEDURE [dbo].[sp_PartitionManage]

    AS

    BEGIN

    DECLARE @Max_value INT

    DECLARE @Change_value INT

    DECLARE @PARTITION_value INT

    SELECT @Max_value = MAX(Id) FROM [dbo].[Archive]

    SELECT TOP 1 @Change_value = Change_Value,@PARTITION_value= Part_Value

    FROM [dbo].[PartitionManage] WHERE IsDone = 0

    IF(@Change_value <= @Max_value)--判断是否需要整理分区

    BEGIN

    创建一个临时表

    DECLARE @sql VARCHAR(MAX)

    SET @sql = '

    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[Temp_Archive]'') AND type in (N''U''))

    BEGIN

    DROP TABLE [dbo].[Temp_Archive]

    END'

    EXEC (@sql)

    SET @sql = '

    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[Temp_Archive]'') AND type in (N''U''))

    BEGIN

    CREATE TABLE [dbo].[Temp_Archive](

    [Id] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,

    [SiteId] [int] NULL,

    [Title] [nvarchar](4000) NULL,

    [Author] [nvarchar](4000) NULL,

    [Content] [nvarchar](max) NULL,

    CONSTRAINT [PK_Temp_Archive] PRIMARY KEY CLUSTERED

    (

    [Id] ASC

    )WITH( PAD_INDEX = ON, FILLFACTOR = 100, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [Sch_Archive_Id](Id)

    ) ON [Sch_Archive_Id]([Id])

    END'

    EXEC (@sql)

    --交换分区数据

    DECLARE @Min_Id INT

    DECLARE @PARTITION_num INT

    SELECT @Min_Id = MIN(Id) FROM [dbo].[Archive]

    SELECT @PARTITION_num = [Archives].$PARTITION.Fun_Archive_Id(@Min_Id);

    ALTER TABLE [dbo].[Archive] SWITCH PARTITION @PARTITION_num TO [dbo].[Temp_Archive] PARTITION @PARTITION_num

    删除临时表

    DROP TABLE [dbo].[Temp_Archive]

    修改分区方案

    DECLARE @PARTITION_string varchar(50)

    SET @PARTITION_string = 'FG_Archive_Id_' + RIGHT('0' + CONVERT(NVARCHAR,@PARTITION_num),2)

    SET @sql = 'ALTER PARTITION SCHEME [Sch_Archive_Id] NEXT USED ['+@PARTITION_string+']'

    EXEC (@sql)

    修改分区函数

    SET @sql = 'ALTER PARTITION FUNCTION Fun_Archive_Id() SPLIT RANGE ('+CONVERT(VARCHAR(50),@PARTITION_value)+')'

    EXEC (@sql)

    更新表

    UPDATE [dbo].[PartitionManage] SET IsDone = 1 WHERE Change_Value = @Change_value

    END

    END

    导读:随着技术的发展进步,如今,SQL Server 2005数据库自动化已经渐渐走近人们的生活,SQL Server 2005 自动化删除表分区也已经实现啦,下文中将为大家详细介绍SQL Server 2005 自动化删除表分区设计方案,希望对大家能够有所帮助。

    我们的服务器的数据已经有了800G,并且每天进数据大概有120W条记录(数据空间大概为7G),而服务器现在已经没有太多的磁盘空间了,面对这样的问题,一般都是使用交换表分区来快速删除数据,并使用之前的分区来存放新进的数据,假如每次都人工的话就太麻烦了,所以我对这个如何进行交换分区删除数据来清理磁盘空间做成了自动化。 分析与设计思路

    分区特点:分区使用了自增ID作为分区字段;分区的索引进行存储位置对齐;

    设计步骤1:表分区已经确定了各个分区值,我们就用一个表保存可能存在的分区值,并插入到表中,当达到预警值(Change_Value)时,我们就执行交换分区;

    设计步骤2:使用一个存储过程来完成交换分区;

    1) 创建一个临时表

    2) 交换分区数据

    3) 删除临时表

    4) 修改分区方案

    5) 修改分区函数

    设计步骤3:使用作业定时执行存储过程,实现自动化;

    参考脚本

    下面是创建表的脚本和执行交换分区的存储过程,希望对你有帮助。

    创建表

    CREATE TABLE [dbo].[PartitionManage](

    [Id] [int] IDENTITY(1,1) NOT NULL,

    [Change_Value] [int] NULL,

    [Part_Value] [int] NULL,

    [IsDone] [bit] NULL,

    CONSTRAINT [PK_PartitionManage] PRIMARY KEY CLUSTERED

    (

    [Id] ASC

    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

    ) ON [PRIMARY]

    插入数据

    declare @i int

    declare @maxValue int

    set @i=10

    set @maxValue=100

    while @i <= @maxValue

    begin

    insert into dbo.PartitionManage values(@i-4,@i,0)

    set @i = @i + 10

    end

    -- =============================================

    -- Author: <Viajar>

    -- Create date: <2011.02.22>

    -- Description: <分区管理>

    -- =============================================

    CREATE PROCEDURE [dbo].[sp_PartitionManage]

    AS

    BEGIN

    DECLARE @Max_value INT

    DECLARE @Change_value INT

    DECLARE @PARTITION_value INT

    SELECT @Max_value = MAX(Id) FROM [dbo].[Archive]

    SELECT TOP 1 @Change_value = Change_Value,@PARTITION_value= Part_Value

    FROM [dbo].[PartitionManage] WHERE IsDone = 0

    IF(@Change_value <= @Max_value)--判断是否需要整理分区

    BEGIN

    创建一个临时表

    DECLARE @sql VARCHAR(MAX)

    SET @sql = '

    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[Temp_Archive]'') AND type in (N''U''))

    BEGIN

    DROP TABLE [dbo].[Temp_Archive]

    END'

    EXEC (@sql)

    SET @sql = '

    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[Temp_Archive]'') AND type in (N''U''))

    BEGIN

    CREATE TABLE [dbo].[Temp_Archive](

    [Id] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,

    [SiteId] [int] NULL,

    [Title] [nvarchar](4000) NULL,

    [Author] [nvarchar](4000) NULL,

    [Content] [nvarchar](max) NULL,

    CONSTRAINT [PK_Temp_Archive] PRIMARY KEY CLUSTERED

    (

    [Id] ASC

    )WITH( PAD_INDEX = ON, FILLFACTOR = 100, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [Sch_Archive_Id](Id)

    ) ON [Sch_Archive_Id]([Id])

    END'

    EXEC (@sql)

    --交换分区数据

    DECLARE @Min_Id INT

    DECLARE @PARTITION_num INT

    SELECT @Min_Id = MIN(Id) FROM [dbo].[Archive]

    SELECT @PARTITION_num = [Archives].$PARTITION.Fun_Archive_Id(@Min_Id);

    ALTER TABLE [dbo].[Archive] SWITCH PARTITION @PARTITION_num TO [dbo].[Temp_Archive] PARTITION @PARTITION_num

    删除临时表

    DROP TABLE [dbo].[Temp_Archive]

    修改分区方案

    DECLARE @PARTITION_string varchar(50)

    SET @PARTITION_string = 'FG_Archive_Id_' + RIGHT('0' + CONVERT(NVARCHAR,@PARTITION_num),2)

    SET @sql = 'ALTER PARTITION SCHEME [Sch_Archive_Id] NEXT USED ['+@PARTITION_string+']'

    EXEC (@sql)

    修改分区函数

    SET @sql = 'ALTER PARTITION FUNCTION Fun_Archive_Id() SPLIT RANGE ('+CONVERT(VARCHAR(50),@PARTITION_value)+')'

    EXEC (@sql)

    更新表

    UPDATE [dbo].[PartitionManage] SET IsDone = 1 WHERE Change_Value = @Change_value

    END

    END

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。