关闭 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

    上一篇返回首页 下一篇

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

    别人在看

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    Cornell大神Kleinberg的经典教材《算法设计》是最好入门的算法教材

    从 Microsoft 下载中心安装 Windows 7 SP1 和 Windows Server 2008 R2 SP1 之前要执行的步骤

    Llama 2基于UCloud UK8S的创新应用

    火山引擎DataTester:如何使用A/B测试优化全域营销效果

    腾讯云、移动云继阿里云降价后宣布大幅度降价

    字节跳动数据平台论文被ICDE2023国际顶会收录,将通过火山引擎开放相关成果

    这个话题被围观超10000次,火山引擎VeDI如此解答

    误删库怎么办?火山引擎DataLeap“3招”守护数据安全

    IT头条

    平替CUDA!摩尔线程发布MUSA 4性能分析工具

    00:43

    三起案件揭开侵犯个人信息犯罪的黑灰产业链

    13:59

    百度三年开放2.1万实习岗,全力培育AI领域未来领袖

    00:36

    工信部:一季度,电信业务总量同比增长7.7%,业务收入累计完成4469亿元

    23:42

    Gartner:2024年全球半导体营收6559亿美元,AI助力英伟达首登榜首

    18:04

    技术热点

    iOS 8 中如何集成 Touch ID 功能

    windows7系统中鼠标滑轮键(中键)的快捷应用

    MySQL数据库的23个特别注意的安全事项

    Kruskal 最小生成树算法

    Ubuntu 14.10上安装新的字体图文教程

    Ubuntu14更新后无法进入系统卡在光标界面解怎么办?

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

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