zoukankan      html  css  js  c++  java
  • SQLSERVER2005 分区表

    代码
      1 --=========================================
      2 -- 转换为分区表
      3 --=========================================
      4 -- 1. 创建分区函数
      5 --    a. 适用于存储历史存档记录的分区表的分区函数
      6 DECLARE @dt datetime
      7 SET @dt = '20020101'
      8 CREATE PARTITION FUNCTION PF_HistoryArchive(datetime)
      9 AS RANGE RIGHT
     10 FOR VALUES(
     11     @dt,
     12     DATEADD(Year1@dt))
     13  
     14 --    b. 适用于存储历史记录的分区表的分区函数
     15 --DECLARE @dt datetime
     16 SET @dt = '20000101'
     17 CREATE PARTITION FUNCTION PF_History(datetime)
     18 AS RANGE RIGHT
     19 FOR VALUES(
     20     @dt,
     21 DATEADD(Month1@dt),
     22 DATEADD(Month2@dt),
     23 DATEADD(Month3@dt),
     24 DATEADD(Month4@dt),
     25 DATEADD(Month5@dt),
     26 DATEADD(Month6@dt),
     27 DATEADD(Month7@dt),
     28 DATEADD(Month8@dt),
     29 DATEADD(Month9@dt),
     30 DATEADD(Month10@dt),
     31 DATEADD(Month11@dt),
     32 DATEADD(Month12@dt))
     33 GO
     34  
     35 -- 2. 创建分区架构
     36 --    a. 适用于存储历史存档记录的分区表的分区架构
     37 CREATE PARTITION SCHEME PS_HistoryArchive
     38 AS PARTITION PF_HistoryArchive
     39 TO([PRIMARY][PRIMARY][PRIMARY])
     40  
     41 --    b. 适用于存储历史记录的分区表的分区架构
     42 CREATE PARTITION SCHEME PS_History
     43 AS PARTITION PF_History
     44 TO([PRIMARY][PRIMARY],
     45     [PRIMARY][PRIMARY][PRIMARY],
     46     [PRIMARY][PRIMARY][PRIMARY],
     47     [PRIMARY][PRIMARY][PRIMARY],
     48     [PRIMARY][PRIMARY][PRIMARY])
     49 GO
     50  
     51 -- 3. 删除索引
     52 --    a. 删除存储历史存档记录的表中的索引
     53 DROP INDEX Production.TransactionHistoryArchive.IX_TransactionHistoryArchive_ProductID
     54 DROP INDEX Production.TransactionHistoryArchive.IX_TransactionHistoryArchive_ReferenceOrderID_ReferenceOrderLineID
     55  
     56 --    b. 删除存储历史记录的表中的索引
     57 DROP INDEX Production.TransactionHistory.IX_TransactionHistory_ProductID
     58 DROP INDEX Production.TransactionHistory.IX_TransactionHistory_ReferenceOrderID_ReferenceOrderLineID
     59 GO
     60  
     61 -- 4. 转换为分区表
     62 --    a. 将存储历史存档记录的表转换为分区表
     63 ALTER TABLE Production.TransactionHistoryArchive
     64     DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
     65     WITH(
     66         MOVE TO PS_HistoryArchive(TransactionDate))
     67  
     68 --    b.将存储历史记录的表转换为分区表
     69 ALTER TABLE Production.TransactionHistory
     70     DROP CONSTRAINT PK_TransactionHistory_TransactionID
     71     WITH(
     72         MOVE TO PS_History(TransactionDate))
     73 GO
     74  
     75 -- 5. 恢复主键
     76 --    a. 恢复存储历史存档记录的分区表的主键
     77 ALTER TABLE Production.TransactionHistoryArchive
     78     ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID
     79         PRIMARY KEY CLUSTERED(
     80             TransactionID,
     81             TransactionDate)
     82  
     83 --    b. 恢复存储历史记录的分区表的主键
     84 ALTER TABLE Production.TransactionHistory
     85     ADD CONSTRAINT PK_TransactionHistory_TransactionID
     86         PRIMARY KEY CLUSTERED(
     87             TransactionID,
     88             TransactionDate)
     89 GO
     90 -- 6. 恢复索引
     91 --    a. 恢复存储历史存档记录的分区表的索引
     92 CREATE INDEX IX_TransactionHistoryArchive_ProductID
     93     ON Production.TransactionHistoryArchive(
     94         ProductID)
     95  
     96 CREATE INDEX IX_TransactionHistoryArchive_ReferenceOrderID_ReferenceOrderLineID
     97     ON Production.TransactionHistoryArchive(
     98         ReferenceOrderID,
     99         ReferenceOrderLineID)
    100  
    101 --    b. 恢复存储历史记录的分区表的索引
    102 CREATE INDEX IX_TransactionHistory_ProductID
    103     ON Production.TransactionHistory(
    104         ProductID)
    105  
    106 CREATE INDEX IX_TransactionHistory_ReferenceOrderID_ReferenceOrderLineID
    107     ON Production.TransactionHistory(
    108         ReferenceOrderID,
    109         ReferenceOrderLineID)
    110 GO
    111 -- 7. 查看分区表的相关信息
    112 SELECT
    113     SchemaName = S.name,
    114     TableName = TB.name,
    115     PartitionScheme = PS.name,
    116     PartitionFunction = PF.name,
    117     PartitionFunctionRangeType = CASE
    118             WHEN boundary_value_on_right = 0 THEN 'LEFT'
    119             ELSE 'RIGHT' END,
    120     PartitionFunctionFanout = PF.fanout,
    121     SchemaID = S.schema_id,
    122     ObjectID = TB.object_id,
    123     PartitionSchemeID = PS.data_space_id,
    124     PartitionFunctionID = PS.function_id
    125 FROM sys.schemas S
    126     INNER JOIN sys.tables TB
    127         ON S.schema_id = TB.schema_id
    128     INNER JOIN sys.indexes IDX
    129         on TB.object_id = IDX.object_id
    130             AND IDX.index_id < 2
    131     INNER JOIN sys.partition_schemes PS
    132         ON PS.data_space_id = IDX.data_space_id
    133     INNER JOIN sys.partition_functions PF
    134         ON PS.function_id = PF.function_id
    135 GO
    136  
    137 --=========================================
    138 -- 移动分区表数据
    139 --=========================================
    140 -- 1. 为存储历史存档记录的分区表增加分区, 并接受从历史记录分区表移动过来的数据
    141 --    a. 修改分区架构, 增加用以接受新分区的文件组
    142 ALTER PARTITION SCHEME PS_HistoryArchive
    143 NEXT USED [PRIMARY]
    144  
    145 --    b. 修改分区函数, 增加分区用以接受从历史记录分区表移动过来的数据
    146 DECLARE @dt datetime
    147 SET @dt = '20030901'
    148 ALTER PARTITION FUNCTION PF_HistoryArchive()
    149 SPLIT RANGE(@dt)
    150  
    151 --    c. 将历史记录表中的过期数据移动到历史存档记录表中
    152 ALTER TABLE Production.TransactionHistory
    153     SWITCH PARTITION 2
    154         TO Production.TransactionHistoryArchive PARTITION $PARTITION.PF_HistoryArchive(@dt)
    155  
    156 --    d. 将接受到的数据与原来的分区合并
    157 ALTER PARTITION FUNCTION PF_HistoryArchive()
    158 MERGE RANGE(@dt)
    159 GO
    160  
    161 -- 2. 将存储历史记录的分区表中不包含数据的分区删除, 并增加新的分区以接受新数据
    162 --    a. 合并不包含数据的分区
    163 DECLARE @dt datetime
    164 SET @dt = '20030901'
    165 ALTER PARTITION FUNCTION PF_History()
    166 MERGE RANGE(@dt)
    167  
    168 --    b.  修改分区架构, 增加用以接受新分区的文件组
    169 ALTER PARTITION SCHEME PS_History
    170 NEXT USED [PRIMARY]
    171  
    172 --    c. 修改分区函数, 增加分区用以接受新数据
    173 SET @dt = '20041001'
    174 ALTER PARTITION FUNCTION PF_History()
    175 SPLIT RANGE(@dt)
    176 GO
    177  
    178  
    179 --=========================================
    180 -- 清除历史存档记录中的过期数据
    181 --=========================================
    182 -- 1. 创建用于保存过期的历史存档数据的表
    183 CREATE TABLE Production.TransactionHistoryArchive_2001_temp(
    184     TransactionID int NOT NULL,
    185     ProductID int NOT NULL,
    186     ReferenceOrderID int NOT NULL,
    187     ReferenceOrderLineID int NOT NULL
    188         DEFAULT ((0)),
    189     TransactionDate datetime NOT NULL
    190         DEFAULT (GETDATE()),
    191     TransactionType nchar(1NOT NULL,
    192     Quantity int NOT NULL,
    193     ActualCost money NOT NULL,
    194     ModifiedDate datetime NOT NULL
    195         DEFAULT (GETDATE()),
    196     CONSTRAINT PK_TransactionHistoryArchive_2001_temp_TransactionID
    197         PRIMARY KEY CLUSTERED(
    198             TransactionID,
    199             TransactionDate)
    200 )
    201  
    202 -- 2. 将数据从历史存档记录分区表移动到第步创建的表中
    203 ALTER TABLE Production.TransactionHistoryArchive
    204     SWITCH PARTITION 1
    205         TO Production.TransactionHistoryArchive_2001_temp
    206  
    207 -- 3. 删除不再包含数据的分区
    208 DECLARE @dt datetime
    209 SET @dt = '20020101'
    210 ALTER PARTITION FUNCTION PF_HistoryArchive()
    211 MERGE RANGE(@dt)
    212  
    213 -- 4. 修改分区架构, 增加用以接受新分区的文件组
    214 ALTER PARTITION SCHEME PS_HistoryArchive
    215 NEXT USED [PRIMARY]
    216  
    217 -- 5. 修改分区函数, 增加分区用以接受新数据
    218 SET @dt = '20040101'
    219 ALTER PARTITION FUNCTION PF_HistoryArchive()
    220 SPLIT RANGE(@dt)
  • 相关阅读:
    构造并判断二叉搜索树-js
    构造树并判断是否对称
    旋转图像
    螺旋矩阵
    链表实现快速排序
    任务调度器
    队列的实现
    最大矩形
    棒球比赛
    复原IP地址
  • 原文地址:https://www.cnblogs.com/itelite/p/1780582.html
Copyright © 2011-2022 走看看