分布式分區視圖可以將來自一個或多個SQL Server數據庫中的數據連接起來。當開發一個水平分區數據庫環境時,你可以使用分布式分區視圖將來自不同服務器的分區表連接起來,使得這些數據看起來像來自同一個服務器。
你可以設計這些視圖,因此,如果你的潛在數據表結構設計合理的話,查詢優化器就可以知道從那個數據表得到查詢需要的數據,從而加速運行。一個設計合理的分布式分區視圖還可以實現更新、插入和刪除。我們將在本文的下一部分深入探討它是如何實現這樣操作的。
示例
本例中,我們假設SalesHistory表非常大,如果水平分割表中的各行記錄到不同的服務器上,這將對我們很有利。每個服務器上的SalesHistory表的表結構是一樣的,不過,一台服務器上存放該國東部地區的銷售信息,而另外一台存放該國西部地區的銷售信息。
我們根據Region(地區)字段和SaleID 來區分表中的各條記錄。其中SaleID字段是整型數據域,我們為該國不同的地區設定了不同的SaleID。
這個字段對於設計概念來說非常重要,因為這是我們用來作為分區鍵值字段。(注意:要在縮小場景中進行表的設計,這一點極其重要,因為這樣表中的各行是唯一的,從而可區別於其它服務器上的表。)這個字段集合是分區鍵。
設計很多SaleHistory表,根據所在的表SaleID始終是唯一可區別的。我們可以通過CHECK約束來實現這一點。
我們將使用兩個獨立的SQL Server實例,對於本例,這兩個實例在同一台機器上。服務器的名字叫Chapman,實例分別稱為實例A和實例B。這兩個實例都是SQL Server 2005開發版,允許遠程連接以及Windows和SQL Server認證。
使用腳本創建SalesDB數據庫,設置每台服務器的lazy schema validation選項,使用該選項在SQL Server中通過確保在確實需要服務器上的數據時才進行服務器鏈接請求來提高性能。
列表A中的腳本需要在兩個數據庫實例上運行。列表B用來創建SalesDB數據庫中的讀者登錄及用戶,該腳本也需要在兩個數據庫實例上運行。
列表A:
CREATE DATABASE SalesDB;
EXECUTE sp_serveroption
@server = 'CHAPMANServerA,
@optname = 'lazy schema validation',@optvalue = 'true'
列表B:
CREATE LOGIN reader WITH Password = '654asod3e**!!'
USE SalesDB
CREATE USER reader FROM LOGIN reader
列表C:
ServerA:
EXECUTE sp_addlinkedserver
'CHAPMANServerB',
'SQL Server'
EXEC sp_addlinkedsrvlogin 'CHAPMANServerB',
'false',NULL,'reader','654asod3e**!!'
ServerB:
EXEC sp_addlinkedserver
'CHAPMANServerA',
'SQL Server'
EXEC sp_addlinkedsrvlogin 'CHAPMANServerA',
'false',NULL,'reader','654asod3e**!!'
列表C將獨自在每台數據庫實例上運行。該腳本在每台服務器上創建一個鏈接到對方的鏈接服務器。連接服務器允許SQL Server依靠某個OLEDB數據源來執行命令,就像其它的SQL Server。
我們使用上面的腳本中創建的登錄作為連接服務器進行連接的安全上下文。這些鏈接服務器允許我們從一台服務器查詢另一台服務器。