SQL Server 2005パーティション表実践——スライドウィンドウ方案

5418 ワード

[作/訳者]:鵬城万里[日付]:2008-07-15[ソース]:当駅オリジナル[表示]:1494
【鵬城万里】www.sqlstudy.com
SQL Server 2005パーティション表——スライドウィンドウ方案実践:スライドウィンドウ機構を採用して、パーティション表のパーティションを順次別のパーティション表に移す.なお、本例では、SQLパーティションテーブルの各態様について説明する:パーティション関数(partition function)、パーティションスキーム(partition scheme)の確立;パーティションテーブルの作成;パーティション関数の分割、マージ;パーティションテーブルパーティション切替(partition swtich);パーティションインデックス(partition index)など多くのコンテンツがあります.
パーティションテーブルの作成Orders
drop table dbo.Orders
go

drop partition scheme PS_Orders
go

drop partition function PF_Orders_OrderDateRange
go


--       
create partition function PF_Orders_OrderDateRange(datetime)
as
range right for values (
'1996-01-01',
'1997-01-01',
'1998-01-01',
'1999-01-01'
)
go

--       
create partition scheme PS_Orders
as
partition PF_Orders_OrderDateRange
all to ([primary])
go


--      
create table dbo.Orders
(
   OrderID     int          not null
  ,CustomerID  varchar(10)  not null
  ,EmployeeID  int          not null
  ,OrderDate   datetime     not null
)
on PS_Orders(OrderDate)
go

--         
create clustered index IXC_Orders_OrderDate on dbo.Orders(OrderDate)
go

--         
alter table dbo.Orders add constraint PK_Orders primary key (OrderID, CustomerID, OrderDate)
go

--         
insert into dbo.Orders
select OrderID, CustomerID, EmployeeID, OrderDate
  from dbo.Orders_From_SQL2000_Northwind   --( :      SQL Server 2000      )
go

パーティション・テーブルの作成OrdersArchive(Ordersテーブルでアクティブでないデータをアーカイブするために使用される)
drop table OrdersArchive
go

drop partition scheme PS_OrdersArchive
go

drop partition function PF_OrdersArchive_OrderDateRange
go

--       
create partition function PF_OrdersArchive_OrderDateRange(datetime)
as
range right for values (
'1996-01-01',
'1997-01-01'
)
go

--       
create partition scheme PS_OrdersArchive
as
partition PF_OrdersArchive_OrderDateRange
all to ([primary])
go

--      
create table dbo.OrdersArchive
(
   OrderID     int          not null
  ,CustomerID  varchar(10)  not null
  ,EmployeeID  int          not null
  ,OrderDate   datetime     not null
)
on PS_OrdersArchive(OrderDate)
go

--         
create clustered index IXC_OrdersArchive_OrderDate on dbo.OrdersArchive(OrderDate)
go

--         
alter table dbo.OrdersArchive add constraint PK_OrdersArchive
   primary key (OrderID, CustomerID, OrderDate)
go

パーティション表パーティション関数のパーティション範囲の表示
exec dbo.sp_partition_range 'dbo.Orders'
go

exec dbo.sp_partition_ragne 'dbo.OrdersArchive'
go

dboを取得する.sp_partition_range sp_partition_rangeコード
パーティション表の各パーティションのデータ分散の表示
--       Orders            
select partition = $partition.PF_Orders_OrderDateRange(OrderDate)
      ,rows      = count(*)
      ,minval    = min(OrderDate)
      ,maxval    = max(OrderDate)
  from dbo.Orders
 group by $partition.PF_Orders_OrderDateRange(OrderDate)
 order by partition
go

--       OrdersArchive            
select partition = $partition.PF_OrdersArchive_OrderDateRange(OrderDate)
      ,rows      = count(*)
      ,minval    = min(OrderDate)
      ,maxval    = max(OrderDate)
  from dbo.OrdersArchive
 group by $partition.PF_OrdersArchive_OrderDateRange(OrderDate)
 order by partition

スライドウィンドウメカニズムを用いて,パーティションテーブルOrdersパーティションデータをOrdersArchiveに移行する
ウィンドウをスライドするには:1.OrdersArchiveパーティションテーブルに空きパーティションを追加します.2.Ordersパーティションを対応するOrdersArchiveパーティションに移動します.3.Ordersの空きパーティションを削除します.
移動オーダー日は1996年のパーティションデータです.
--   OrderArchive         ,      。
alter partition scheme PS_OrdersArchive next used [primary]
go

--   OrderArchive       (     1997    )
alter partition function PF_OrdersArchive_OrderDateRange()
split range('1998-01-01')
go

--    Orders 1996      OrderArchive
alter table dbo.Orders switch partition 2 to dbo.OrdersArchive partition 2
go

--    Orders     (1996    )
alter partition function PF_Orders_OrderDateRange()
merge range('1996-01-01')
go

移動オーダー日は1997年のパーティションデータです.
--   OrderArchive         ,      。
alter partition scheme PS_OrdersArchive next used [primary]
go

--   OrderArchive       (     1998    )
alter partition function PF_OrdersArchive_OrderDateRange()
split range('1999-01-01')
go

--    Orders 1996      OrderArchive
alter table dbo.Orders switch partition 2 to dbo.OrdersArchive partition 3
go

--    Orders     (1997    )
alter partition function PF_Orders_OrderDateRange()
merge range('1997-01-01')
go

移動オーダー日は1998年のパーティションデータです.
--   OrderArchive         ,      。
alter partition scheme PS_OrdersArchive next used [primary]
go

--   OrderArchive       (     1999    )
alter partition function PF_OrdersArchive_OrderDateRange()
split range('2000-01-01')
go

--    Orders 1996      OrderArchive
alter table dbo.Orders switch partition 2 to dbo.OrdersArchive partition 4
go

--    Orders     (1998    )
alter partition function PF_Orders_OrderDateRange()
merge range('1998-01-01')
go

以上の3回の移動を経て,パーティションテーブルOrdersのデータをすべてOrdersArchiveに移動した.同時に,このウィンドウのスライド中にコードの3箇所だけが変化する(規則的):“split range('2000-01-01')”ことに気づいた.“merge range('1998-01-01')”. “to dbo.OrdersArchive partition 4”.これはプログラム化処理のために条件を提供した.
 
本文はwww.sqlstudy.comオリジナル、著作権所有、転載は作者と出典を明記してください!
このリンクは次のとおりです.http://www.sqlstudy.com/sql_article.php?id=2008071501