<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. 適用于存儲(chǔ)歷史存檔記錄的分區(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. 適用于存儲(chǔ)歷史記錄的分區(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. 適用于存儲(chǔ)歷史存檔記錄的分區(qū)表的分區(qū)架構(gòu)
    CREATE PARTITION SCHEME PS_HistoryArchive
    AS PARTITION PF_HistoryArchive
    TO([PRIMARY][PRIMARY][PRIMARY])

    --    b. 適用于存儲(chǔ)歷史記錄的分區(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. 刪除存儲(chǔ)歷史存檔記錄的表中的索引
    DROP INDEX Production.TransactionHistoryArchive.IX_TransactionHistoryArchive_ProductID
    DROP INDEX Production.TransactionHistoryArchive.IX_TransactionHistoryArchive_ReferenceOrderID_ReferenceOrderLineID

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

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

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

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

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

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

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

    --    b. 恢復(fù)存儲(chǔ)歷史記錄的分區(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

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

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

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

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

    -- 2. 將存儲(chǔ)歷史記錄的分區(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

    --=========================================
    --
     清除歷史存檔記錄中的過(guò)期數(shù)據(jù)
    --
    =========================================
    --
     1. 創(chuàng)建用于保存過(guò)期的歷史存檔數(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ū)表移動(dòng)到第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
      --測(cè)試數(shù)據(jù)庫(kù)
      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
      
    --添加測(cè)試數(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ū)編號(hào),* from t_part order by date
      
    --查詢數(shù)據(jù)庫(kù)文件
      go
      sp_helpfile
    posted on 2011-04-20 16:03 SIMONE 閱讀(1676) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): SQL SERVER
    主站蜘蛛池模板: 国产精品免费在线播放| 亚洲日韩精品A∨片无码| 亚洲av日韩aⅴ无码色老头| 色窝窝免费一区二区三区| 亚洲精品免费在线| 最近免费中文字幕mv电影| 亚洲国产精品不卡在线电影| 免费91最新地址永久入口| 国产亚洲精品xxx| 免费福利电影在线观看| 亚洲av无码成人黄网站在线观看| a级成人免费毛片完整版| 亚洲国产精品国自产拍AV| a毛片免费全部在线播放**| 国产亚洲av片在线观看播放 | 黄色网站软件app在线观看免费| 亚洲午夜精品久久久久久浪潮| 性生大片视频免费观看一级| 亚洲人成电影在线播放| 久久国产精品免费| 国产亚洲综合一区柠檬导航| 免费在线观看一级片| 亚洲黄色片免费看| 午夜性色一区二区三区免费不卡视频| 亚洲AV无码国产精品色| 夜夜爽免费888视频| 国产亚洲视频在线播放大全| 亚洲第一永久AV网站久久精品男人的天堂AV| 无码精品人妻一区二区三区免费 | 亚洲日本一区二区三区在线| 3344在线看片免费| 亚洲激情在线观看| 91情侣在线精品国产免费| 亚洲欧美成aⅴ人在线观看| 亚洲高清视频一视频二视频三| jizz在线免费观看| 久久精品亚洲中文字幕无码网站| 99爱视频99爱在线观看免费| 33333在线亚洲| 国产午夜免费福利红片| 国产特黄一级一片免费|