久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    SQL SERVER 分區表的總結

     看見就非常 2014-07-14

     SQL SERVER 分區表的總結--分區表的維護和管理

     

    在依據需求建立好分區表之后,就要實現對分區表的管理維護。主要內容就是兩點:

    1.  利用滑動窗口方案(Sliding Window Scenario),實現分區表與數據移動中間表的互切。

    2.  分區表本身的結構變更管理。

    當然以上兩點,都是理論上的點。我工作中主要是遇到兩種需求:

    1.  過時分區數據的快速歸檔管理:即把某些不活躍分區的數據切到數據歸檔的表中去。

    2.  分區表由于數據增長需要添加新分區來處理數據:即已分區的表它所有的數據都會處于活動狀態,需要新的分區來承載新增的數據。

    這兩種需求將會在下面的代碼體現出來。分區表沿用我上一篇中的表Product,但是這里稱為Products。因為上一篇中的表,測試系統在用,我不能移動數據,就只好克隆出一張表。

     創建一張表結構主鍵聚集索引跟Products一模一樣的表Products_Tmp(用來做數據移轉的中間臨時表);這張表還必須跟要移出的分區位于同一個文件組(否則將不能應用Partition Switch進行快速切換)。

    首先在新文件組上創建存檔表Products_Archive,用于存檔后面中間臨時表的數據。

    復制代碼
     USE [master]

    GO

    ALTER DATABASE [TEST]

    ADD FILEGROUP [FG_TEST_Products_Archive]

    GO

    ALTER DATABASE [TEST]

    ADD FILE ( NAME = N'FG_TEST_Products_Archive_data_1',

    FILENAME = N'D:\Data\FG_TEST_Products_Archive_data_1.ndf' ,

    SIZE = 50MB ,

    FILEGROWTH = 10% )

    TO FILEGROUP [FG_TEST_Products_Archive]

    GO



    USE TEST

    GO

    CREATE TABLE [dbo].[Products_Archive](

    [ID] [int] NOT NULL,

    [PName] [nvarchar](100) NULL,

    [AddDate] [datetime2](3) NULL

    )ON [FG_TEST_Products_Archive];

    GO
    復制代碼

     

    接下來,就是移轉數據的操作了。封裝成存儲過程,方便調用。本來是想把導數據也寫在里面,可是考慮到生產環境數據量較大,會采用其它的導數據方案,就舍棄了。

    復制代碼
    CREATE PROCEDURE usp_TransferPartitionData_ForArchive

    @PartitonNumber INT --要移轉分區編號

    AS

    DECLARE @filegroup NVARCHAR(100)=N'', --要移轉分區所在文件組

    @SQL NVARCHAR(4000)=N'', --創建中間臨時表的動態語句

    @rangeValue INT; --要移轉分區邊界值上限



    SET @rangeValue=(SELECT CAST(VALUE AS INT) FROM sys.partition_range_values WHERE boundary_id=@rangeValue);

    --這里的賦值,使用我上篇中的自定義函數fn_GetFileForPartition.

    SET @filegroup=(SELECT [FILEGROUP_NAME] FROM dbo.fn_GetFileForPartition(N'Sch_Product_ID',@rangeValue));

    SET @SQL=N'CREATE TABLE [dbo].[Products_Tmp](

    [ID] [int] NOT NULL,

    [PName] [nvarchar](100) NULL,

    [AddDate] [datetime2](3) NULL,

    CONSTRAINT [PK_Products_Tmp] 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
    '+QUOTENAME(@filegroup);



    IF OBJECT_ID('dbo.Products_Tmp') IS NOT NULL

    RAISERROR('已經存在數據庫對象Products_Tmp!',16,1);

    ELSE

    BEGIN

    --PRINT @SQL;

    EXEC(@SQL);

    --把指定分區中的數據切到Products_Tmp

    ALTER TABLE dbo.Products

    SWITCH PARTITION @PartitonNumber

    TO dbo.Products_Tmp;

    END

    --因為數據量少又是堆表,直接使用INSERT INTO導入數據。

    --如果是大數據量的話可能就會使用BULK+BCP或者SSIS來做。

    --INSERT INTO [dbo].[Products_Archive]

    --([ID],[PName],[AddDate])

    -- SELECT [ID],[PName],[AddDate] FROM [dbo].[Products_Tmp];



    --DROP TABLE [dbo].[Products_Tmp

    GO



    --移轉數據,并刪除Products_Tmp。



    EXEC usp_TransferPartitionData_ForArchive 1;--指定移轉第一個分區

    --因為數據量少又是堆表,直接使用INSERT INTO導入數據。

    --如果是大數據量的話可能就會使用BULK+BCP或者SSIS來做。

    INSERT INTO [dbo].[Products_Archive]

    ([ID],[PName],[AddDate])

    SELECT [ID],[PName],[AddDate] FROM [dbo].[Products_Tmp];

    DROP TABLE [dbo].[Products_Tmp];
    復制代碼

     

    現在舊數據移出去了,但是每天還有新數據進來,最后一個分區越來越大,所以我們要加入新文件組來承接這個分區。但是這里,就不新建文件組,而是使用在上面移轉數據時”空”出來的PRIMARY文件組。

    首先分區既然空了,就要從分區表中移除它。然后再將其做為新文件組加進分區表。其實下面的代碼也可以整合到上面的SP里去的。

    復制代碼
    DECLARE @rangeValue INT, --要刪除分區邊界值的上限

    @splitValue INT,--要分割給新分區用的邊界值下限

    @filegroup NVARCHAR(100)=N'', --要合并的分區所屬的文件組

    @SQL NVARCHAR(4000);--動態語句



    --合并空分區,也就是刪除分區。

    SET @rangeValue=80000;

    ALTER PARTITION FUNCTION fn_Partition_Product_ID()

    MERGE RANGE (@rangeValue);



    --修改架構,添加文件組

    SET @filegroup=(SELECT [FILEGROUP_NAME] FROM dbo.fn_GetFileForPartition(N'Sch_Product_ID',80000));

    SET @SQL=N'ALTER PARTITION SCHEME Sch_Product_ID

    NEXT USED
    '+QUOTENAME(@filegroup)+N';';

    --PRINT @SQL;

    EXEC(@SQL);



    --增加新分區,來接受新數據

    SET @splitValue=380000;

    ALTER PARTITION FUNCTION fn_Partition_Product_ID()

    SPLIT RANGE (@splitValue);
    復制代碼

     

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 国产成人精品A视频免费福利| 国产日产久久高清欧美一区 | 亚洲熟妇自偷自拍另欧美| 中文丝袜人妻一区二区| 天堂V亚洲国产V第一次| 免费一区二区无码东京热| 精品国产中文字幕懂色| 黑人巨大AV在线播放无码| 久久精品无码免费不卡| 人妻少妇456在线视频| 国产一区二区三区不卡AV| 国产成人AV在线免播放观看新| 国产精品VA在线观看无码不卡| 午夜大片免费男女爽爽影院 | 特级无码毛片免费视频尤物| 少妇人妻偷人免费观看| 国产日产欧产精品精乱了派| 亚洲国产精品日韩在线| 精品人妻无码专区在中文字幕| 性欧美VIDEOFREE高清大喷水| 乱公和我做爽死我视频| 亚洲欧美人成电影在线观看 | 亚洲AV永久纯肉无码精品动漫 | 四虎影视一区二区精品| www久久只有这里有精品| 午夜A理论片在线播放| 国产无人区码一区二区| 久久99热只有频精品6狠狠| 在线高清免费不卡全码| 国产普通话对白刺激| 国产精品久久久久AV福利动漫| 国产精品亚洲二区在线播放| 国产丰满美女A级毛片| 国产午夜精品一区理论片| 少妇高潮水多太爽了动态图| 日韩精品人妻av一区二区三区| 色婷婷亚洲精品综合影院| 久久午夜色播影院| 亚洲精品一区二区美女| 免费无码又爽又刺激软件下载 | 成人av午夜在线观看|