<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
    -- 進(jìn)行演示操作前, 先備份, 以便可以在演示完成后, 恢復(fù)到原始狀態(tài)
    USE master
    -- 備份
    BACKUP DATABASE AdventureWorks
        
    TO DISK = 'AdventureWorks.bak'
        
    WITH FORMAT

    ---- 恢復(fù)
    --
    RESTORE DATABASE AdventureWorks
    --
        FROM DISK = 'AdventureWorks.bak'
    --
        WITH REPLACE
    GO

    --=========================================
    --
     轉(zhuǎn)換為分區(qū)表
    --
    =========================================
    USE AdventureWorks
    GO

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

    --    b. 適用于存儲歷史記錄的分區(qū)表的分區(qū)函數(shù)
    --
    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. 創(chuàng)建分區(qū)架構(gòu)
    --
        a. 適用于存儲歷史存檔記錄的分區(qū)表的分區(qū)架構(gòu)
    CREATE PARTITION SCHEME PS_HistoryArchive
    AS PARTITION PF_HistoryArchive
    TO([PRIMARY][PRIMARY][PRIMARY])

    --    b. 適用于存儲歷史記錄的分區(qū)表的分區(qū)架構(gòu)
    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. 轉(zhuǎn)換為分區(qū)表
    --
        a. 將存儲歷史存檔記錄的表轉(zhuǎn)換為分區(qū)表
    ALTER TABLE Production.TransactionHistoryArchive
        
    DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
        
    WITH(
            MOVE 
    TO PS_HistoryArchive(TransactionDate))

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

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

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

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

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

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

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

    -- 7. 查看分區(qū)表的相關(guān)信息
    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

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

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

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

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

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

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

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

    --=========================================
    --
     清除歷史存檔記錄中的過期數(shù)據(jù)
    --
    =========================================
    --
     1. 創(chuàng)建用于保存過期的歷史存檔數(shù)據(jù)的表
    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. 將數(shù)據(jù)從歷史存檔記錄分區(qū)表移動到第1步創(chuàng)建的表中
    ALTER TABLE Production.TransactionHistoryArchive
        SWITCH PARTITION 
    1
            
    TO Production.TransactionHistoryArchive_2001_temp

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

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

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


    查詢分區(qū)信息:

    ;
    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
      --測試數(shù)據(jù)庫
      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
      
    --分區(qū)函數(shù)
      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
      
    --分區(qū)架構(gòu)
      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
      
    --添加測試數(shù)據(jù),每天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
      
    --查詢數(shù)據(jù)分布在哪些分區(qū)
      select $partition.part_Year(date) as 分區(qū)編號,* from t_part order by date
      
    --查詢數(shù)據(jù)庫文件
      go
      sp_helpfile
    posted on 2011-04-20 16:03 SIMONE 閱讀(1669) 評論(0)  編輯  收藏 所屬分類: SQL SERVER
    主站蜘蛛池模板: 亚洲综合在线一区二区三区| 亚洲av无码一区二区三区乱子伦| 亚洲精品影院久久久久久| 99在线免费视频| 亚洲色婷婷综合久久| 两个人的视频www免费| 亚洲精品制服丝袜四区| 西西人体免费视频| 亚洲AV无码久久精品蜜桃| 国产精品免费大片| 亚洲五月六月丁香激情| 中国xxxxx高清免费看视频| 亚洲综合久久1区2区3区 | 美国毛片亚洲社区在线观看| 无码一区二区三区AV免费| 亚洲色丰满少妇高潮18p| 国产免费观看网站| 一级一级毛片免费播放| 国产亚洲精品观看91在线| 久久久久成人精品免费播放动漫| 久久亚洲精品国产精品| 一本无码人妻在中文字幕免费| 亚洲日本中文字幕天天更新| 国产成人精品男人免费| 国产无限免费观看黄网站| 久久国产亚洲电影天堂| AV大片在线无码永久免费| 色欲色欲天天天www亚洲伊| 国产偷国产偷亚洲高清日韩| 国产精品免费一区二区三区四区| 噜噜噜亚洲色成人网站∨| 啦啦啦手机完整免费高清观看| 一级毛片免费在线| 亚洲精品亚洲人成在线麻豆| 国产视频精品免费| 久久爰www免费人成| 亚洲国产高清国产拍精品| 亚洲色偷偷偷鲁综合| 免费无码AV电影在线观看| a一级爱做片免费| 亚洲乱码一二三四区国产|