<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
    -- 進行演示操作前, 先備份, 以便可以在演示完成后, 恢復到原始狀態
    USE master
    -- 備份
    BACKUP DATABASE AdventureWorks
        
    TO DISK = 'AdventureWorks.bak'
        
    WITH FORMAT

    ---- 恢復
    --
    RESTORE DATABASE AdventureWorks
    --
        FROM DISK = 'AdventureWorks.bak'
    --
        WITH REPLACE
    GO

    --=========================================
    --
     轉換為分區表
    --
    =========================================
    USE AdventureWorks
    GO

    -- 1. 創建分區函數
    --
        a. 適用于存儲歷史存檔記錄的分區表的分區函數
    DECLARE @dt datetime
    SET @dt = '20020101'
    CREATE PARTITION FUNCTION PF_HistoryArchive(datetime)
    AS RANGE RIGHT
    FOR VALUES(
        
    @dt,
        
    DATEADD(Year1@dt))

    --    b. 適用于存儲歷史記錄的分區表的分區函數
    --
    DECLARE @dt datetime
    SET @dt = '20030901'
    CREATE PARTITION FUNCTION PF_History(datetime)
    AS RANGE RIGHT
    FOR VALUES(
        
    @dt,
        
    DATEADD(Month1@dt), DATEADD(Month2@dt), DATEADD(Month3@dt),
        
    DATEADD(Month4@dt), DATEADD(Month5@dt), DATEADD(Month6@dt),
        
    DATEADD(Month7@dt), DATEADD(Month8@dt), DATEADD(Month9@dt),
        
    DATEADD(Month10@dt), DATEADD(Month11@dt), DATEADD(Month12@dt))
    GO

    -- 2. 創建分區架構
    --
        a. 適用于存儲歷史存檔記錄的分區表的分區架構
    CREATE PARTITION SCHEME PS_HistoryArchive
    AS PARTITION PF_HistoryArchive
    TO([PRIMARY][PRIMARY][PRIMARY])

    --    b. 適用于存儲歷史記錄的分區表的分區架構
    CREATE PARTITION SCHEME PS_History
    AS PARTITION PF_History
    TO([PRIMARY][PRIMARY],
        
    [PRIMARY][PRIMARY][PRIMARY],
        
    [PRIMARY][PRIMARY][PRIMARY],
        
    [PRIMARY][PRIMARY][PRIMARY],
        
    [PRIMARY][PRIMARY][PRIMARY])
    GO

    -- 3. 刪除索引
    --
        a. 刪除存儲歷史存檔記錄的表中的索引
    DROP INDEX Production.TransactionHistoryArchive.IX_TransactionHistoryArchive_ProductID
    DROP INDEX Production.TransactionHistoryArchive.IX_TransactionHistoryArchive_ReferenceOrderID_ReferenceOrderLineID

    --    b. 刪除存儲歷史記錄的表中的索引
    DROP INDEX Production.TransactionHistory.IX_TransactionHistory_ProductID
    DROP INDEX Production.TransactionHistory.IX_TransactionHistory_ReferenceOrderID_ReferenceOrderLineID
    GO

    -- 4. 轉換為分區表
    --
        a. 將存儲歷史存檔記錄的表轉換為分區表
    ALTER TABLE Production.TransactionHistoryArchive
        
    DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
        
    WITH(
            MOVE 
    TO PS_HistoryArchive(TransactionDate))

    --    b.將存儲歷史記錄的表轉換為分區表
    ALTER TABLE Production.TransactionHistory
        
    DROP CONSTRAINT PK_TransactionHistory_TransactionID
        
    WITH(
            MOVE 
    TO PS_History(TransactionDate))
    GO

    -- 5. 恢復主鍵
    --
        a. 恢復存儲歷史存檔記錄的分區表的主鍵
    ALTER TABLE Production.TransactionHistoryArchive
        
    ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID
            
    PRIMARY KEY CLUSTERED(
                TransactionID,
                TransactionDate)

    --    b. 恢復存儲歷史記錄的分區表的主鍵
    ALTER TABLE Production.TransactionHistory
        
    ADD CONSTRAINT PK_TransactionHistory_TransactionID
            
    PRIMARY KEY CLUSTERED(
                TransactionID,
                TransactionDate)
    GO

    -- 6. 恢復索引
    --
        a. 恢復存儲歷史存檔記錄的分區表的索引
    CREATE INDEX IX_TransactionHistoryArchive_ProductID
        
    ON Production.TransactionHistoryArchive(
            ProductID)

    CREATE INDEX IX_TransactionHistoryArchive_ReferenceOrderID_ReferenceOrderLineID
        
    ON Production.TransactionHistoryArchive(
            ReferenceOrderID,
            ReferenceOrderLineID)

    --    b. 恢復存儲歷史記錄的分區表的索引
    CREATE INDEX IX_TransactionHistory_ProductID
        
    ON Production.TransactionHistory(
            ProductID)

    CREATE INDEX IX_TransactionHistory_ReferenceOrderID_ReferenceOrderLineID
        
    ON Production.TransactionHistory(
            ReferenceOrderID,
            ReferenceOrderLineID)
    GO

    -- 7. 查看分區表的相關信息
    SELECT
        SchemaName 
    = S.name,
        TableName 
    = TB.name,
        PartitionScheme 
    = PS.name,
        PartitionFunction 
    = PF.name,
        PartitionFunctionRangeType 
    = CASE
                
    WHEN boundary_value_on_right = 0 THEN 'LEFT'
                
    ELSE 'RIGHT' END,
        PartitionFunctionFanout 
    = PF.fanout,
        SchemaID 
    = S.schema_id,
        ObjectID 
    = TB.object_id,
        PartitionSchemeID 
    = PS.data_space_id,
        PartitionFunctionID 
    = PS.function_id
    FROM sys.schemas S
        
    INNER JOIN sys.tables TB
            
    ON S.schema_id = TB.schema_id
        
    INNER JOIN sys.indexes IDX
            
    on TB.object_id = IDX.object_id
                
    AND IDX.index_id < 2
        
    INNER JOIN sys.partition_schemes PS
            
    ON PS.data_space_id = IDX.data_space_id
        
    INNER JOIN sys.partition_functions PF
            
    ON PS.function_id = PF.function_id
    GO

    --=========================================
    --
     移動分區表數據
    --
    =========================================
    --
     1. 為存儲歷史存檔記錄的分區表增加分區, 并接受從歷史記錄分區表移動過來的數據
    --
        a. 修改分區架構, 增加用以接受新分區的文件組
    ALTER PARTITION SCHEME PS_HistoryArchive
    NEXT USED [PRIMARY]

    --    b. 修改分區函數, 增加分區用以接受從歷史記錄分區表移動過來的數據
    DECLARE @dt datetime
    SET @dt = '20030901'
    ALTER PARTITION FUNCTION PF_HistoryArchive()
    SPLIT RANGE(
    @dt)

    --    c. 將歷史記錄表中的過期數據移動到歷史存檔記錄表中
    ALTER TABLE Production.TransactionHistory
        SWITCH PARTITION 
    2
            
    TO Production.TransactionHistoryArchive PARTITION $PARTITION.PF_HistoryArchive(@dt)

    --    d. 將接受到的數據與原來的分區合并
    ALTER PARTITION FUNCTION PF_HistoryArchive()
    MERGE RANGE(
    @dt)
    GO

    -- 2. 將存儲歷史記錄的分區表中不包含數據的分區刪除, 并增加新的分區以接受新數據
    --
        a. 合并不包含數據的分區
    DECLARE @dt datetime
    SET @dt = '20030901'
    ALTER PARTITION FUNCTION PF_History()
    MERGE RANGE(
    @dt)

    --    b.  修改分區架構, 增加用以接受新分區的文件組
    ALTER PARTITION SCHEME PS_History
    NEXT USED [PRIMARY]

    --    c. 修改分區函數, 增加分區用以接受新數據
    SET @dt = '20041001'
    ALTER PARTITION FUNCTION PF_History()
    SPLIT RANGE(
    @dt)
    GO

    --=========================================
    --
     清除歷史存檔記錄中的過期數據
    --
    =========================================
    --
     1. 創建用于保存過期的歷史存檔數據的表
    CREATE TABLE Production.TransactionHistoryArchive_2001_temp(
        TransactionID 
    int NOT NULL,
        ProductID 
    int NOT NULL,
        ReferenceOrderID 
    int NOT NULL,
        ReferenceOrderLineID 
    int NOT NULL
            
    DEFAULT ((0)),
        TransactionDate 
    datetime NOT NULL
            
    DEFAULT (GETDATE()),
        TransactionType 
    nchar(1NOT NULL,
        Quantity 
    int NOT NULL,
        ActualCost 
    money NOT NULL,
        ModifiedDate 
    datetime NOT NULL
            
    DEFAULT (GETDATE()),
        
    CONSTRAINT PK_TransactionHistoryArchive_2001_temp_TransactionID
            
    PRIMARY KEY CLUSTERED(
                TransactionID,
                TransactionDate)
    )

    -- 2. 將數據從歷史存檔記錄分區表移動到第1步創建的表中
    ALTER TABLE Production.TransactionHistoryArchive
        SWITCH PARTITION 
    1
            
    TO Production.TransactionHistoryArchive_2001_temp

    -- 3. 刪除不再包含數據的分區
    DECLARE @dt datetime
    SET @dt = '20020101'
    ALTER PARTITION FUNCTION PF_HistoryArchive()
    MERGE RANGE(
    @dt)

    -- 4. 修改分區架構, 增加用以接受新分區的文件組
    ALTER PARTITION SCHEME PS_HistoryArchive
    NEXT USED [PRIMARY]

    -- 5. 修改分區函數, 增加分區用以接受新數據
    SET @dt = '20040101'
    ALTER PARTITION FUNCTION PF_HistoryArchive()
    SPLIT RANGE(
    @dt)


    查詢分區信息:

    ;
    WITH
    TBINFO 
    AS(
        
    SELECT
            SchemaName 
    = S.name,
            TableName 
    = TB.name,
            PartitionScheme 
    = PS.name,
            PartitionFunction 
    = PF.name,
            PartitionFunctionRangeType 
    = CASE
                    
    WHEN boundary_value_on_right = 0 THEN 'LEFT'
                    
    ELSE 'RIGHT' END,
            PartitionFunctionFanout 
    = PF.fanout,
            SchemaID 
    = S.schema_id,
            ObjectID 
    = TB.object_id,
            PartitionSchemeID 
    = PS.data_space_id,
            PartitionFunctionID 
    = PS.function_id
        
    FROM sys.schemas S
            
    INNER JOIN sys.tables TB
                
    ON S.schema_id = TB.schema_id
            
    INNER JOIN sys.indexes IDX
                
    on TB.object_id = IDX.object_id
                    
    AND IDX.index_id < 2
            
    INNER JOIN sys.partition_schemes PS
                
    ON PS.data_space_id = IDX.data_space_id
            
    INNER JOIN sys.partition_functions PF
                
    ON PS.function_id = PF.function_id
    ),
    PF1 
    AS(
        
    SELECT PFP.function_id, PFR.boundary_id, PFR.value, Type = CONVERT(sysname,
                
    CASE T.name
                    
    WHEN 'numeric' THEN 'decimal'
                    
    WHEN 'real' THEN 'float'
                    
    ELSE T.name END
                
    + CASE
                    
    WHEN T.name IN('decimal''numeric')
                        
    THEN QUOTENAME(RTRIM(PFP.precision)
                            
    + CASE WHEN PFP.scale > 0 THEN ',' + RTRIM(PFP.scale) ELSE '' END'()')
                    
    WHEN T.name IN('float''real')
                        
    THEN QUOTENAME(PFP.precision'()')
                    
    WHEN T.name LIKE 'n%char'
                        
    THEN QUOTENAME(PFP.max_length / 2'()')
                    
    WHEN T.name LIKE '%char' OR T.name LIKE '%binary'
                        
    THEN QUOTENAME(PFP.max_length, '()')
                    
    ELSE '' END)
        
    FROM sys.partition_parameters PFP
            
    LEFT JOIN sys.partition_range_values PFR
                
    ON PFR.function_id = PFP.function_id
                    
    AND PFR.parameter_id = PFP.parameter_id
            
    INNER JOIN sys.types T
                
    ON PFP.system_type_id = T.system_type_id
    ),
    PF2 
    AS(
        
    SELECT * FROM PF1
        
    UNION ALL
        
    SELECT
            function_id, boundary_id 
    = boundary_id - 1, value, type
        
    FROM PF1
        
    WHERE boundary_id = 1
    ),
    PF 
    AS(
        
    SELECT
            B.function_id, boundary_id 
    = ISNULL(B.boundary_id + 11),
            value 
    = STUFF(
                
    CASE
                    
    WHEN A.boundary_id IS NULL THEN ''
                    
    ELSE ' AND [partition_column_name] ' + PF.LessThan + ' ' + CONVERT(varchar(max), A.value) END
                
    + CASE
                    
    WHEN A.boundary_id = 1 THEN ''
                    
    ELSE ' AND [partition_column_name] ' + PF.MoreThan + ' ' + CONVERT(varchar(max), B.value) END,
                
    15''),
            B.Type
        
    FROM PF1 A       
            
    RIGHT JOIN PF2 B
                
    ON A.function_id = B.function_id
                    
    AND (A.boundary_id - 1 = B.boundary_id
                        
    OR(A.boundary_id IS NULL AND B.boundary_id IS NULL))
            
    INNER JOIN(
                
    SELECT
                    function_id,
                    LessThan 
    = CASE
                            
    WHEN boundary_value_on_right = 0 THEN '<='
                            
    ELSE '<' END,
                    MoreThan 
    = CASE
                            
    WHEN boundary_value_on_right = 0 THEN '>'
                            
    ELSE '>=' END
                
    FROM sys.partition_functions
            )PF
                
    ON B.function_id = PF.function_id
    ),
    PS 
    AS(
        
    SELECT
            DDS.partition_scheme_id, DDS.destination_id,
            FileGroupName 
    = FG.name, IsReadOnly = FG.is_read_only
        
    FROM sys.destination_data_spaces DDS
            
    INNER JOIN sys.filegroups FG
                
    ON DDS.data_space_id = FG.data_space_id
    ),
    PINFO 
    AS(
        
    SELECT
            RowID 
    = ROW_NUMBER() OVER(ORDER BY SchemaID, ObjectID, PS.destination_id),
            TB.SchemaName, TB.TableName,
            TB.PartitionScheme, PS.destination_id, PS.FileGroupName, PS.IsReadOnly,
            TB.PartitionFunction, TB.PartitionFunctionRangeType, TB.PartitionFunctionFanout,
            PF.boundary_id, PF.Type, PF.value
        
    FROM TBINFO TB
            
    INNER JOIN PS
                
    ON TB.PartitionSchemeID = PS.partition_scheme_id
            
    LEFT JOIN PF
                
    ON TB.PartitionFunctionID = PF.function_id
                    
    AND PS.destination_id = PF.boundary_id
    )
    SELECT
        RowID,
        SchemaName 
    = CASE destination_id
                
    WHEN 1 THEN SchemaName
                
    ELSE N'' END,
        TableName 
    = CASE destination_id
                
    WHEN 1 THEN TableName
                
    ELSE N'' END,
        PartitionScheme 
    = CASE destination_id
                
    WHEN 1 THEN PartitionScheme
                
    ELSE N'' END,
        destination_id, FileGroupName, IsReadOnly,
        PartitionFunction 
    = CASE destination_id
                
    WHEN 1 THEN PartitionFunction
                
    ELSE N'' END,
        PartitionFunctionRangeType 
    = CASE destination_id
                
    WHEN 1 THEN PartitionFunctionRangeType
                
    ELSE N'' END,
        PartitionFunctionFanout 
    = CASE destination_id
                
    WHEN 1 THEN CONVERT(varchar(20), PartitionFunctionFanout)
                
    ELSE N'' END,
        boundary_id 
    = ISNULL(CONVERT(varchar(20), boundary_id), ''),
        Type 
    = ISNULL(Type, N''),
        value 
    = CASE PartitionFunctionFanout
                
    WHEN 1 THEN '<ALL Data>'
                
    ELSE ISNULL(value, N'<NEXT USED>'END
    FROM PINFO
    ORDER BY RowID




    --==================================
    --
    drop database dbPartitionTest
      --測試數據庫
      create database dbPartitionTest
      
    go
      
    use
      dbPartitionTest
      
    go
      
    --增加分組
      alter database dbPartitionTest ADD FILEGROUP P200801
      
    alter database dbPartitionTest ADD FILEGROUP P200802
      
    alter database dbPartitionTest ADD FILEGROUP P200803
      
    go
      
    --分區函數
      CREATE PARTITION FUNCTION part_Year(datetime)
      
    AS RANGE LEFT FOR VALUES
      (
      ’
    20080131 23:59:59.997’,’20080229 23:59:59.997’,’20080331 23:59:59.997
      )
      
    go
      
    --增加文件組
      ALTER DATABASE dbPartitionTest ADD FILE (NAME = N’P200801’,FILENAME = N’c:tb_P200801.ndf’,SIZE = 1MB,MAXSIZE = 500MB,FILEGROWTH = 1MB)TO FILEGROUP P200801
      
    ALTER DATABASE dbPartitionTest ADD FILE (NAME = N’P200802’,FILENAME = N’c:tb_P200802.ndf’,SIZE = 1MB,MAXSIZE = 500MB,FILEGROWTH = 1MB)TO FILEGROUP P200802
      
    ALTER DATABASE dbPartitionTest ADD FILE (NAME = N’P200803’,FILENAME = N’c:tb_P200803.ndf’,SIZE = 1MB,MAXSIZE = 500MB,FILEGROWTH = 1MB)TO FILEGROUP P200803
      
    go
      
    --分區架構
      CREATE PARTITION SCHEME part_YearScheme AS PARTITION part_Year  TO (P200801,P200802,P200803,[PRIMARY])
      
    go
      
    CREATE TABLE [dbo].t_part
      (name 
    varchar(100default newid(),date datetime NOT NULL)
      
    ON part_YearScheme (date)
      
    go
      
    --添加測試數據,每天1條
      declare @date datetime
      
    set @date=2007-12-31
      
    while @date<=2008-04-0
      
    1 begin
      
    insert into t_part(date)values(@date)
      
    set @date=@date+1
      
    end
      
    go
      
    --查詢數據分布在哪些分區
      select $partition.part_Year(date) as 分區編號,* from t_part order by date
      
    --查詢數據庫文件
      go
      sp_helpfile
    posted on 2011-04-20 16:03 SIMONE 閱讀(1669) 評論(0)  編輯  收藏 所屬分類: SQL SERVER
    主站蜘蛛池模板: 中文字幕亚洲无线码a| 青娱乐免费在线视频| 亚洲 无码 在线 专区| 国产午夜亚洲精品国产| 18国产精品白浆在线观看免费| 亚洲自偷自拍另类12p| 久久亚洲免费视频| 内射干少妇亚洲69XXX| 久久成人免费播放网站| 亚洲视频在线观看| 99re在线这里只有精品免费| 91亚洲精品视频| 老汉精品免费AV在线播放| 中文字幕亚洲免费无线观看日本| 十八禁无码免费网站| 亚洲中字慕日产2021| 日韩视频免费在线| 麻豆va在线精品免费播放| 丝袜熟女国偷自产中文字幕亚洲| 花蝴蝶免费视频在线观看高清版 | mm1313亚洲精品无码又大又粗| 亚洲日韩精品无码专区加勒比 | 久久综合久久综合亚洲| 真实乱视频国产免费观看| 精品特级一级毛片免费观看| 久久久久亚洲av成人无码电影| 丁香花在线视频观看免费| 亚洲图片激情小说| 日韩激情无码免费毛片| 久久WWW免费人成—看片| 亚洲综合国产精品| 日韩电影免费在线| 成人黄网站片免费视频 | 亚洲韩国精品无码一区二区三区| 久久久久久影院久久久久免费精品国产小说 | 99久久免费观看| 亚洲人成激情在线播放| 啊灬啊灬别停啊灬用力啊免费看| 亚洲av成人片在线观看| 亚洲A∨无码一区二区三区| 午夜免费福利在线观看|