婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SQL Server實現自動循環歸檔分區數據腳本詳解

SQL Server實現自動循環歸檔分區數據腳本詳解

熱門標簽:京華物流公司地圖標注 奧威地圖標注多個地方 優質地圖標注 武漢長沙外呼系統方法和技巧 百度地圖標注不同路線 智能語音外呼系統選哪家 怎樣在地圖上標注路線圖標 千呼電銷機器人價格 外呼系統電銷專用

概述

大家應該都知道在很多業務場景下我們需要對一些記錄量比較大的表進行分區,同時為了保證性能需要將一些舊的數據進行歸檔。在分區表很多的情況下如果每一次歸檔都需要人工干預的話工程量是比較大的而且也容易發生紕漏。接下來分享一個自己編寫的自動歸檔分區數據的腳本,原理是分區表和歸檔表使用相同的分區方案,循環利用當前的文件組,話不多說了,來一起看看詳細的介紹吧。

一、創建測試數據

----01創建文件組
USE [master]
GO
ALTER DATABASE [chenmh] ADD FILEGROUP [Group1]
GO
ALTER DATABASE [chenmh] ADD FILEGROUP [Group2]
GO
ALTER DATABASE [chenmh] ADD FILEGROUP [Group3]
GO
ALTER DATABASE [chenmh] ADD FILEGROUP [Group4]
GO
USE [master]
GO
ALTER DATABASE [chenmh] ADD FILE ( NAME = N'datafile1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\datafile1.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ) TO FILEGROUP [Group1]
GO
ALTER DATABASE [chenmh] ADD FILE ( NAME = N'datafile2', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\datafile2.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ) TO FILEGROUP [Group2]
GO
ALTER DATABASE [chenmh] ADD FILE ( NAME = N'datafile3', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\datafile3.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ) TO FILEGROUP [Group3]
GO
ALTER DATABASE [chenmh] ADD FILE ( NAME = N'datafile4', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\datafile4.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ) TO FILEGROUP [Group4]
GO


----02創建分區函數
USE [chenmh]
GO
CREATE PARTITION FUNCTION [Pt_Range](BIGINT) AS RANGE RIGHT FOR VALUES (1000000, 2000000, 3000000)
GO

----03創建分區方案,分區方案對應的文件組數是分區函數指定的數量+1
CREATE PARTITION SCHEME Ps_Range
AS PARTITION Pt_Range
TO (Group1, Group2, Group3, Group4);


---04創建表,指定的分區列的數據類型一定要和分區函數指定的列類型一致。
CREATE TABLE [dbo].[News](
 [id] [bigint] NOT NULL,
 [status] [int] NULL,
 CONSTRAINT [PK_News] PRIMARY KEY CLUSTERED 
(
 [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [Ps_Range](id)
) ON [Ps_Range](id)

-----創建歸檔分區表
CREATE TABLE [dbo].[NewsArchived](
 [id] [bigint] NOT NULL,
 [status] [int] NULL,
 CONSTRAINT [PK_NewsArchived] PRIMARY KEY CLUSTERED 
(
 [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [Ps_Range](id)
) ON [Ps_Range](id)

----插入測試數據
DECLARE @id INT 
SET @id=1
WHILE @id5001000
BEGIN
 INSERT INTO News VALUES(@id,@id%2)
 SET @id=@id+1

END

可以看到當前總共有4個分區,每一個分區定義的范圍區間是100萬,分區4我故意多插入了200多萬的數據來驗證自動歸檔分區。

二、自動歸檔分區腳本

CREATE PROCEDURE Pro_Partition_AutoArchiveData
(@PartitionTable VARCHAR(300),
@SwitchTable VARCHAR(300)
)
AS
BEGIN
DECLARE @FunName VARCHAR(100),@SchemaName VARCHAR(100),@MaxPartitionValue sql_variant

---根據歸檔表查找對應的分區方案、分區函數、最小分區數、最大分區范圍值
SELECT 
DISTINCT
@FunName=MAX(pf.name),
@SchemaName=MAX(ps.name), 
@MaxPartitionValue=max(isnull(prv.value,0))
FROM sys.partitions p inner join sys.indexes i ON p.object_id=i.object_id and p.index_id=i.index_id
inner join sys.partition_schemes ps ON i.data_space_id=ps.data_space_id
inner join sys.destination_data_spaces dds ON ps.data_space_id=dds.partition_scheme_id and dds.destination_id=p.partition_number
inner join sys.data_spaces ds ON dds.data_space_id=ds.data_space_id
inner join sys.partition_functions pf ON ps.function_id=pf.function_id
LEFT join sys.partition_range_values prv ON pf.function_id=prv.function_id AND prv.boundary_id=p.partition_number-pf.boundary_value_on_right
LEFT join sys.partition_parameters pp ON prv.function_id=pp.function_id and prv.parameter_id=pp.parameter_id
LEFT join sys.types t ON pp.system_type_id=t.system_type_id and pp.user_type_id=t.user_type_id
WHERE OBJECT_NAME(p.OBJECT_ID)=@PartitionTable


DECLARE @MaxId BIGINT,@MinId BIGINT,@Sql NVARCHAR(MAX),@GroupName VARCHAR(100),@MinPartitionNumber INT
SET @Sql= N'SELECT @MaxId=MAX(id),@MinId=Min(id) FROM '+@PartitionTable
EXEC sp_executesql @Sql,N'@MaxId BIGINT out,@MinId BIGINT out',@MaxId OUT,@MinId OUT

SELECT @FunName AS FunName,@SchemaName AS SchemaName,@MaxPartitionValue AS MaxPartitionValue ,@MaxId AS MaxId,@MinId AS MinId

---判斷當前表的最大的id是否已經在最大的分區中
IF @MaxId>=@MaxPartitionValue
 BEGIN
 ----歸檔分區數據,根據表的最小值找到它所屬的分區.
 SET @Sql= N'SELECT @MinPartitionNumber=$PARTITION.'+@FunName+N'('+CONVERT(VARCHAR(30),@MinId)+N')';
 EXEC sp_executesql @Sql,N'@MinPartitionNumber INT out',@MinPartitionNumber OUT
 SET @Sql=N'ALTER TABLE ' +@PartitionTable+ N' SWITCH PARTITION '+CONVERT(VARCHAR(10),@MinPartitionNumber)+ N' TO ' +@SwitchTable+ N' PARTITION ' +CONVERT(VARCHAR(10),@MinPartitionNumber);
 --PRINT @Sql
 EXEC (@Sql)
 ---修改分區方案,增加新的分區對應的文件組,根據最小的分區id找到對應的文件組。
 SELECT 
 DISTINCT
 @GroupName=ds.name
 FROM sys.partitions p inner join sys.indexes i ON p.object_id=i.object_id and p.index_id=i.index_id
 inner join sys.partition_schemes ps ON i.data_space_id=ps.data_space_id
 inner join sys.destination_data_spaces dds ON ps.data_space_id=dds.partition_scheme_id and dds.destination_id=p.partition_number
 inner join sys.data_spaces ds ON dds.data_space_id=ds.data_space_id
 inner join sys.partition_functions pf ON ps.function_id=pf.function_id
 WHERE pf.name=@FunName AND ps.name=@SchemaName AND p.partition_number=@MinPartitionNumber
 SET @Sql=N'ALTER PARTITION SCHEME '+@SchemaName+N' NEXT USED '+@GroupName
 --PRINT @Sql
 EXEC (@Sql)
 ---修改分區函數,增加新的分區,增加新的分區范圍值,在現有的最大的值的基礎上加100萬(需要和現有的分區函數的范圍保持一致)
 SET @MaxPartitionValue=CONVERT(BIGINT,@MaxPartitionValue)+1000000
 SET @Sql=N'ALTER PARTITION FUNCTION '+@FunName+N'('+N')'+N' SPLIT RANGE ('+CONVERT(VARCHAR(30),@MaxPartitionValue)+N')'
 --PRINT @Sql
 EXEC (@Sql)

 END


END

三、自動歸檔分區數據

1.首次測試

EXEC Pro_Partition_AutoArchiveData 'news','NewsArchived';

注意:每調用一次歸檔一個最小分區的數據。

分區表的News分區1的數據被歸檔到了NewsArchived表中,且創建了分區5,分區5使用的是已歸檔的分區1的文件組,達到了循環利用文件組的效果。

2.再調用一次歸檔分區腳本

當分區表最大的id小于最大的分區值時自動歸檔分區腳本就不會生效。所以當前的測試表數據還可以再歸檔分區3的數據。

3.經過一段時間的運行歸檔數據可能是這樣的效果

Group1→Group4→Group1→.......

四、腳本注意事項

      1.@PartitionTable和@SwitchTable表必須使用同名的分區方案和分區函數,否則@SwitchTable就需要單獨修改分區方案和函數,且表結構完全一致。

      2.歸檔的表分區列數據類型必須是INT類型,且值是自增規律.

      3.分區歸檔作業在備份作業后執行

      4.建議使用Right分區,Left分區會出現有的最后一個分區文件組不會循環替換,一直處于分區的最后,比如Group1,Group2,Group3,Group1,Group2,Group3,Group1,Group4。期望的應該是Group1,Group2,Group3,Group4,Group1,Group2,Group3,Group4,Group1

      5.注意我當前的每個分區大小是100萬和分區函數保持一致,如果范圍值不同,需要修改最末尾代碼的"修改分區函數"處代碼.

總結

當前自動歸檔分區腳本如果要拷貝去用還是得能完全理解每一段代碼,根據自己的業務做適當的修改,畢竟數據是無價的!!!。最后只需要創建一個作業定期跑作業就行,重復執行也不影響。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • SQL server 2005的表分區
  • SQLSERVER 表分區操作和設計方法
  • SQLServer 通用的分區增加和刪除的算法
  • SQL Server根據分區表名查找所在的文件及文件組實現腳本

標簽:天水 來賓 宿州 七臺河 防疫戰設 威海 益陽 銅仁

巨人網絡通訊聲明:本文標題《SQL Server實現自動循環歸檔分區數據腳本詳解》,本文關鍵詞  SQL,Server,實現,自動,循環,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL Server實現自動循環歸檔分區數據腳本詳解》相關的同類信息!
  • 本頁收集關于SQL Server實現自動循環歸檔分區數據腳本詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91精品国产福利在线观看| 国产欧美日韩亚州综合| 日日摸夜夜添夜夜添亚洲女人| 日本三级亚洲精品| 久久久久久一二三区| 欧美三级一区二区| 成人sese在线| 成人午夜精品一区二区三区| 秋霞电影网一区二区| 亚洲日本在线看| 亚洲少妇30p| 亚洲欧美日韩一区| 国产精品久久久久久久久晋中| 欧美tickling挠脚心丨vk| 欧美mv和日韩mv的网站| 日韩欧美国产电影| 欧美日韩精品免费观看视频 | 久久激情五月婷婷| 日韩av在线免费观看不卡| 日韩高清不卡一区二区| 亚洲gay无套男同| 蜜臀久久99精品久久久久久9| 天天免费综合色| 青娱乐精品视频| 精品亚洲成a人| av网站免费线看精品| 91丨九色丨蝌蚪丨老版| 欧美日韩一二三| 久久久精品影视| 亚洲三级小视频| 亚洲亚洲精品在线观看| 美女精品一区二区| 不卡免费追剧大全电视剧网站| 在线观看欧美黄色| 色综合欧美在线| 国产精品2024| 一本大道久久a久久精二百| 欧美专区亚洲专区| 欧美精品粉嫩高潮一区二区| 日韩欧美卡一卡二| 一区二区三区免费看视频| 经典三级一区二区| 欧美午夜电影网| 国产人伦精品一区二区| 奇米888四色在线精品| 成人激情校园春色| 久久婷婷成人综合色| 精品毛片乱码1区2区3区| 成年人网站91| 日韩欧美国产精品| 午夜精品福利在线| 日本韩国一区二区三区视频| 久久免费午夜影院| 日本亚洲一区二区| 在线观看国产一区二区| 国产精品久久久久久福利一牛影视 | 在线免费观看一区| 亚洲视频每日更新| 色综合久久久久| 一区av在线播放| 在线影院国内精品| 亚洲va欧美va人人爽午夜| 欧美自拍丝袜亚洲| 一区二区三区毛片| 911精品产国品一二三产区| 亚洲欧美视频在线观看| 国产成人精品免费在线| 国产日韩欧美高清| 东方aⅴ免费观看久久av| 欧美国产日韩在线观看| 91色乱码一区二区三区| 亚洲一区二区视频在线观看| 91老师国产黑色丝袜在线| 亚洲永久免费视频| 日韩午夜av电影| 99re亚洲国产精品| 日韩成人免费电影| 中文字幕欧美日本乱码一线二线| jizzjizzjizz欧美| 午夜精品免费在线| 久久蜜桃av一区精品变态类天堂| 99精品久久只有精品| 蜜桃久久久久久久| 亚洲精品视频免费观看| 日韩美一区二区三区| 久久精品国产亚洲高清剧情介绍 | 日韩激情一二三区| 久久综合九色综合97婷婷| 成人一区二区三区| 亚洲第一av色| 精品国产一区久久| 99久久精品国产观看| 亚洲色图色小说| 久久久www成人免费无遮挡大片| 岛国av在线一区| 久久久午夜精品理论片中文字幕| 成人免费在线视频| 99麻豆久久久国产精品免费优播| 亚洲第一久久影院| 久久亚洲私人国产精品va媚药| 奇米影视一区二区三区| 欧美一级片在线看| 欧美午夜理伦三级在线观看| 另类欧美日韩国产在线| 亚洲专区一二三| 国产精品久久久久久久裸模| 欧美一区二区久久久| 成人99免费视频| 成人午夜av电影| 国产综合久久久久久鬼色| 午夜国产精品一区| 婷婷综合在线观看| 亚洲色图视频网| 亚洲欧美在线另类| 亚洲美女视频在线| 国产清纯白嫩初高生在线观看91| 精品国产免费视频| 国产精品夫妻自拍| 伊人婷婷欧美激情| 久久久久99精品国产片| 国产成人av一区| 国产高清久久久| 色吧成人激情小说| 欧美一级日韩一级| 国产视频视频一区| 欧美日韩午夜精品| 欧美mv日韩mv亚洲| 一区二区三区精品视频| 舔着乳尖日韩一区| av高清不卡在线| 欧美精品亚洲二区| 国产精品久久久久影视| 五月婷婷久久丁香| 国产激情视频一区二区三区欧美| 国产不卡在线视频| 欧美高清视频不卡网| 国产拍欧美日韩视频二区| 午夜欧美电影在线观看| 极品瑜伽女神91| 日韩一区二区精品葵司在线| 一区二区三区蜜桃| 久久爱www久久做| 日韩视频免费观看高清完整版 | 91网站在线观看视频| 毛片av一区二区三区| av动漫一区二区| 国产亚洲成aⅴ人片在线观看| 亚洲精品你懂的| 久久激情五月婷婷| 色吧成人激情小说| 成人丝袜高跟foot| 6080国产精品一区二区| 一区二区三区久久久| 国产91精品入口| 精品久久久三级丝袜| 日本欧美在线观看| 色偷偷一区二区三区| 欧美片网站yy| 五月婷婷久久综合| 日韩一级视频免费观看在线| 自拍视频在线观看一区二区| 欧美国产精品一区二区| 丝袜美腿亚洲色图| 欧美精选在线播放| 亚洲国产另类av| 在线亚洲免费视频| 久久66热偷产精品| 亚洲男人天堂一区| 日本乱码高清不卡字幕| 亚洲欧洲三级电影| 色噜噜夜夜夜综合网| 亚洲精品ww久久久久久p站| 成人久久久精品乱码一区二区三区 | 亚洲国产综合色| 欧美一区二区大片| heyzo一本久久综合| 日韩影院免费视频| 捆绑紧缚一区二区三区视频| 国产欧美一区视频| 亚洲国产精品久久久久秋霞影院| 69久久夜色精品国产69蝌蚪网| 久久精品国产成人一区二区三区| 欧美丰满一区二区免费视频 | 欧美日韩中字一区| 一区二区三区四区中文字幕| 欧美高清视频在线高清观看mv色露露十八| 麻豆专区一区二区三区四区五区| 欧美日韩国产首页| 天堂蜜桃91精品| 欧美日韩另类一区| 国产精品小仙女| 免费观看91视频大全| 国产精品青草综合久久久久99| av亚洲产国偷v产偷v自拍| 国产精品久久久久久妇女6080 | 欧美日韩精品一区二区三区| 中文字幕欧美三区| 亚洲精品久久7777| 国产激情视频一区二区在线观看| 91在线一区二区|