zoukankan      html  css  js  c++  java
  • SqlServer2005数据库分区

    转载出处:http://blog.csdn.net/doyouknowm/archive/2009/08/20/4466072.aspx

      1 -- 进行演示操作前, 先备份, 以便可以在演示完成后, 恢复到原始状态
      2 USE master
      3 -- 备份
      4 BACKUP DATABASE AdventureWorks
      5     TO DISK = 'AdventureWorks.bak'
      6     WITH FORMAT
      7 
      8 ---- 恢复
      9 --RESTORE DATABASE AdventureWorks
     10 --    FROM DISK = 'AdventureWorks.bak'
     11 --    WITH REPLACE
     12 GO
     13 
     14 --=========================================
     15 -- 转换为分区表
     16 --=========================================
     17 USE AdventureWorks
     18 GO
     19 
     20 -- 1. 创建分区函数
     21 --    a. 适用于存储历史存档记录的分区表的分区函数
     22 DECLARE @dt datetime
     23 SET @dt = '20020101'
     24 CREATE PARTITION FUNCTION PF_HistoryArchive(datetime)
     25 AS RANGE RIGHT
     26 FOR VALUES(
     27     @dt
     28     DATEADD(Year1@dt))
     29 
     30 --    b. 适用于存储历史记录的分区表的分区函数
     31 --DECLARE @dt datetime
     32 SET @dt = '20030901'
     33 CREATE PARTITION FUNCTION PF_History(datetime)
     34 AS RANGE RIGHT
     35 FOR VALUES(
     36     @dt
     37     DATEADD(Month1@dt), DATEADD(Month2@dt), DATEADD(Month3@dt),
     38     DATEADD(Month4@dt), DATEADD(Month5@dt), DATEADD(Month6@dt),
     39     DATEADD(Month7@dt), DATEADD(Month8@dt), DATEADD(Month9@dt),
     40     DATEADD(Month10@dt), DATEADD(Month11@dt), DATEADD(Month12@dt))
     41 GO
     42 
     43 -- 2. 创建分区架构
     44 --    a. 适用于存储历史存档记录的分区表的分区架构
     45 CREATE PARTITION SCHEME PS_HistoryArchive
     46 AS PARTITION PF_HistoryArchive
     47 TO([PRIMARY][PRIMARY][PRIMARY])
     48 
     49 --    b. 适用于存储历史记录的分区表的分区架构
     50 CREATE PARTITION SCHEME PS_History
     51 AS PARTITION PF_History
     52 TO([PRIMARY][PRIMARY]
     53     [PRIMARY][PRIMARY][PRIMARY],
     54     [PRIMARY][PRIMARY][PRIMARY],
     55     [PRIMARY][PRIMARY][PRIMARY],
     56     [PRIMARY][PRIMARY][PRIMARY])
     57 GO
     58 
     59 -- 3. 删除索引
     60 --    a. 删除存储历史存档记录的表中的索引
     61 DROP INDEX Production.TransactionHistoryArchive.IX_TransactionHistoryArchive_ProductID
     62 DROP INDEX Production.TransactionHistoryArchive.IX_TransactionHistoryArchive_ReferenceOrderID_ReferenceOrderLineID
     63 
     64 --    b. 删除存储历史记录的表中的索引
     65 DROP INDEX Production.TransactionHistory.IX_TransactionHistory_ProductID
     66 DROP INDEX Production.TransactionHistory.IX_TransactionHistory_ReferenceOrderID_ReferenceOrderLineID
     67 GO
     68 
     69 -- 4. 转换为分区表
     70 --    a. 将存储历史存档记录的表转换为分区表
     71 ALTER TABLE Production.TransactionHistoryArchive
     72     DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
     73     WITH(
     74         MOVE TO PS_HistoryArchive(TransactionDate))
     75 
     76 --    b.将存储历史记录的表转换为分区表
     77 ALTER TABLE Production.TransactionHistory
     78     DROP CONSTRAINT PK_TransactionHistory_TransactionID
     79     WITH(
     80         MOVE TO PS_History(TransactionDate))
     81 GO
     82 
     83 -- 5. 恢复主键
     84 --    a. 恢复存储历史存档记录的分区表的主键
     85 ALTER TABLE Production.TransactionHistoryArchive
     86     ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID
     87         PRIMARY KEY CLUSTERED(
     88             TransactionID,
     89             TransactionDate)
     90 
     91 --    b. 恢复存储历史记录的分区表的主键
     92 ALTER TABLE Production.TransactionHistory
     93     ADD CONSTRAINT PK_TransactionHistory_TransactionID
     94         PRIMARY KEY CLUSTERED(
     95             TransactionID,
     96             TransactionDate)
     97 GO
     98 
     99 -- 6. 恢复索引
    100 --    a. 恢复存储历史存档记录的分区表的索引
    101 CREATE INDEX IX_TransactionHistoryArchive_ProductID 
    102     ON Production.TransactionHistoryArchive(
    103         ProductID)
    104 
    105 CREATE INDEX IX_TransactionHistoryArchive_ReferenceOrderID_ReferenceOrderLineID
    106     ON Production.TransactionHistoryArchive(
    107         ReferenceOrderID,
    108         ReferenceOrderLineID)
    109 
    110 --    b. 恢复存储历史记录的分区表的索引
    111 CREATE INDEX IX_TransactionHistory_ProductID 
    112     ON Production.TransactionHistory(
    113         ProductID)
    114 
    115 CREATE INDEX IX_TransactionHistory_ReferenceOrderID_ReferenceOrderLineID
    116     ON Production.TransactionHistory(
    117         ReferenceOrderID,
    118         ReferenceOrderLineID)
    119 GO
    120 
    121 -- 7. 查看分区表的相关信息
    122 SELECT
    123     SchemaName = S.name,
    124     TableName = TB.name,
    125     PartitionScheme = PS.name,
    126     PartitionFunction = PF.name,
    127     PartitionFunctionRangeType = CASE
    128             WHEN boundary_value_on_right = 0 THEN 'LEFT'
    129             ELSE 'RIGHT' END,
    130     PartitionFunctionFanout = PF.fanout,
    131     SchemaID = S.schema_id,
    132     ObjectID = TB.object_id,
    133     PartitionSchemeID = PS.data_space_id,
    134     PartitionFunctionID = PS.function_id
    135 FROM sys.schemas S
    136     INNER JOIN sys.tables TB
    137         ON S.schema_id = TB.schema_id
    138     INNER JOIN sys.indexes IDX
    139         on TB.object_id = IDX.object_id
    140             AND IDX.index_id < 2
    141     INNER JOIN sys.partition_schemes PS
    142         ON PS.data_space_id = IDX.data_space_id
    143     INNER JOIN sys.partition_functions PF
    144         ON PS.function_id = PF.function_id
    145 GO
    146 
    147 --=========================================
    148 -- 移动分区表数据
    149 --=========================================
    150 -- 1. 为存储历史存档记录的分区表增加分区, 并接受从历史记录分区表移动过来的数据
    151 --    a. 修改分区架构, 增加用以接受新分区的文件组
    152 ALTER PARTITION SCHEME PS_HistoryArchive
    153 NEXT USED [PRIMARY]
    154 
    155 --    b. 修改分区函数, 增加分区用以接受从历史记录分区表移动过来的数据
    156 DECLARE @dt datetime
    157 SET @dt = '20030901'
    158 ALTER PARTITION FUNCTION PF_HistoryArchive()
    159 SPLIT RANGE(@dt)
    160 
    161 --    c. 将历史记录表中的过期数据移动到历史存档记录表中
    162 ALTER TABLE Production.TransactionHistory
    163     SWITCH PARTITION 2
    164         TO Production.TransactionHistoryArchive PARTITION $PARTITION.PF_HistoryArchive(@dt)
    165 
    166 --    d. 将接受到的数据与原来的分区合并
    167 ALTER PARTITION FUNCTION PF_HistoryArchive()
    168 MERGE RANGE(@dt)
    169 GO
    170 
    171 -- 2. 将存储历史记录的分区表中不包含数据的分区删除, 并增加新的分区以接受新数据
    172 --    a. 合并不包含数据的分区
    173 DECLARE @dt datetime
    174 SET @dt = '20030901'
    175 ALTER PARTITION FUNCTION PF_History()
    176 MERGE RANGE(@dt)
    177 
    178 --    b.  修改分区架构, 增加用以接受新分区的文件组
    179 ALTER PARTITION SCHEME PS_History
    180 NEXT USED [PRIMARY]
    181 
    182 --    c. 修改分区函数, 增加分区用以接受新数据
    183 SET @dt = '20041001'
    184 ALTER PARTITION FUNCTION PF_History()
    185 SPLIT RANGE(@dt)
    186 GO
    187 
    188 
    189 --=========================================
    190 -- 清除历史存档记录中的过期数据
    191 --=========================================
    192 -- 1. 创建用于保存过期的历史存档数据的表
    193 CREATE TABLE Production.TransactionHistoryArchive_2001_temp(
    194     TransactionID int NOT NULL,
    195     ProductID int NOT NULL,
    196     ReferenceOrderID int NOT NULL,
    197     ReferenceOrderLineID int NOT NULL
    198         DEFAULT ((0)),
    199     TransactionDate datetime NOT NULL
    200         DEFAULT (GETDATE()),
    201     TransactionType nchar(1NOT NULL,
    202     Quantity int NOT NULL,
    203     ActualCost money NOT NULL,
    204     ModifiedDate datetime NOT NULL
    205         DEFAULT (GETDATE()),
    206     CONSTRAINT PK_TransactionHistoryArchive_2001_temp_TransactionID
    207         PRIMARY KEY CLUSTERED(
    208             TransactionID,
    209             TransactionDate)
    210 )
    211 
    212 -- 2. 将数据从历史存档记录分区表移动到第1步创建的表中
    213 ALTER TABLE Production.TransactionHistoryArchive
    214     SWITCH PARTITION 1
    215         TO Production.TransactionHistoryArchive_2001_temp
    216 
    217 -- 3. 删除不再包含数据的分区
    218 DECLARE @dt datetime
    219 SET @dt = '20020101'
    220 ALTER PARTITION FUNCTION PF_HistoryArchive()
    221 MERGE RANGE(@dt)
    222 
    223 -- 4. 修改分区架构, 增加用以接受新分区的文件组
    224 ALTER PARTITION SCHEME PS_HistoryArchive
    225 NEXT USED [PRIMARY]
    226 
    227 -- 5. 修改分区函数, 增加分区用以接受新数据
    228 SET @dt = '20040101'
    229 ALTER PARTITION FUNCTION PF_HistoryArchive()
    230 SPLIT RANGE(@dt)
    231 
    232 
  • 相关阅读:
    [ABC142F] Pure
    [ABC141F] Xor Sum 3
    tarjan缩点
    LoadRunner录制:事务
    LoadRunner录制:脚本调试
    linux性能监控命令
    Python 3 解析 html
    Python 3 操作json 文件
    Python 数据驱动工具:DDT
    selenium 问题:OSError: [WinError 6] 句柄无效
  • 原文地址:https://www.cnblogs.com/hyl8218/p/1659351.html
Copyright © 2011-2022 走看看