1(共 1)对本文的评价是有帮助 - 评价此主题

如何在 Windows Azure SQL Database 中创建联合

具有联合的 SQL Database 是通过水平分区从您的应用程序的数据库层实现更高的可伸缩性和性能的一种方法。具有联合的一个数据库中的一个或多个表将按行进行拆分并分配到通称为“联合成员”的多个数据库中。联合由联合分发架构或“联合架构”定义。联合架构定义了一个“联合分发键”,该键可确定联合内部各分区之间的数据分发。有关联合的详细信息,请参阅 Windows Azure SQL Database(以前称为 SQL Azure)中的联合

管理员可以使用 Windows Azure 平台管理门户或 SQL Server Management Studio 来创建与联合和性能相关的操作。

创建联合根数据库

联合根表示承载联合对象并且作为与分发扩展数据有关信息的中央存储库的数据库的逻辑名称。若要创建联合根数据库,您需要首先连接到 SQL Database 服务器的 master 数据库,然后执行 CREATE DATABASE (Windows Azure SQL Database) T-SQL 语句:

-- Create federation root database
CREATE DATABASE [database_name] 


创建联合和联合架构

可在任何数据库中创建联合。一个数据库可以承载许多联合。若要创建联合架构,您需要首先连接到联合根数据库,然后执行 CREATE FEDERATION (Windows Azure SQL Database) T-SQL 语句:

-- Create federation scheme
CREATE FEDERATION federation_name (distribution_name <data_type> RANGE)


联合分发键必须是 INT、BIGINT、UNIQUEIDENTIFIER 或 VARBINARY(最多 900 字节)类型并指定一个范围值。一个联合只能有一个联合架构和一个联合分发键。

连接到联合

您必须首先连接到某一联合成员,然后才能在联合中创建表或执行读写操作。用于连接到联合的 T-SQL 语句是 USE FEDERATION (Windows Azure SQL Database)

若要连接到联合根,您需要首先连接到联合根数据库,然后使用以下语句:

USE FEDERATION ROOT WITH RESET

若要连接到某一联合成员,您还需要首先连接到联合根数据库,然后使用以下语句:

USE FEDERATION federation_name (distribution_name = value)
    WITH FILTERING={ON|OFF}, RESET

创建联合表

CREATE TABLE (Windows Azure SQL Database) 语句的 FEDERATED ON 子句将表作为 SQL Database 联合内的联合表创建,并且将联合的分发约束 (distribution_name) 应用于表内的指定联合列 (column_name):

-- Route connection to federation member
USE FEDERATION federation_name(distribution_name = value) WITH RESET, FILTERING={ON|OFF}
GO
CREATE TABLE 
    [ schema_name . ] table_ame 
        ( { <column_definition> | <computed_column_definition> }
        [ < table_constraint> ] [ ,...n ] ) 
FEDERATED ON (distribution_name = column_name)
GO

查看联合元数据

您可以使用以下语句在已连接到联合根数据库后检索联合根元数据。

-- Route connection to federation root
USE FEDERATION ROOT WITH RESET
GO
-- View the Federation Root metadata
SELECT db_name() [db_name]
SELECT * FROM sys.federations
SELECT * FROM sys.federation_distributions
SELECT * FROM sys.federation_member_distributions ORDER BY federation_id, range_low;
GO

执行联合拆分操作

在某一数据库已达到其大小限制或者您想要提高性能时,可以使用 ALTER FEDERATION (Windows Azure SQL Database) 语句对联合进行拆分:

--Perform the federation SPLIT operation
USE FEDERATION ROOT WITH RESET
GO
ALTER FEDERATION federation_name SPLIT AT (boundery_value)
GO

示例

下面的代码示例演示创建具有联合的数据库的过程。

首先连接到 master 数据库,然后使用以下 T-SQL 创建联合根数据库:


-- Create Federation Root
CREATE DATABASE [AdventureWorks] 
GO


接下来,连接到该联合根数据库,然后使用以下 T-SQL 语句创建联合架构,然后插入某些测试数据:

-- Create Federation scheme
CREATE FEDERATION CustomerFederation(cid BIGINT RANGE)
GO

-- Route connection to the one Federation Member
USE FEDERATION CustomerFederation(cid=100) WITH RESET, FILTERING=OFF
GO
-- Table [dbo].[Customer]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Customer](
[CustomerID] [bigint] NOT NULL,
[Title] [nvarchar](8) NULL,
[FirstName] [nvarchar](50) NOT NULL,
[MiddleName] [nvarchar](50) NULL,
[LastName] [nvarchar](50) NOT NULL,
[Suffix] [nvarchar](10) NULL,
[CompanyName] [nvarchar](128) NULL,
[SalesPerson] [nvarchar](256) NULL,
[EmailAddress] [nvarchar](50) NULL,
[Phone] [nvarchar](25) NULL,
 CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED 
(
[CustomerID] ASC
) 
)FEDERATED ON (cid=CustomerID)
GO

-- Route connection to the Federation Member
USE FEDERATION CustomerFederation(cid=100) WITH RESET, FILTERING=OFF
GO
-- Insert data
INSERT INTO [dbo].[Customer]
           ([CustomerID]
           ,[Title]
           ,[FirstName]
           ,[MiddleName]
           ,[LastName]
           ,[Suffix]
           ,[CompanyName]
           ,[SalesPerson]
           ,[EmailAddress]
           ,[Phone])
     VALUES
(56, 'Mr.', 'Brian', '', 'Groth', '', 'Latest Accessories Sales', 'adventure-works\david8', 'brian5@adventure-works.com', '461-555-0118'),
(57, 'Ms.', 'Judy', 'R.', 'Lundahl', '', 'Leading Sales & Repair', 'adventure-works\jillian0', 'judy1@adventure-works.com', '260-555-0130'),
(58, 'Mr.', 'Peter', '', 'Kurniawan', '', 'Largest Bike Store', 'adventure-works\jillian0', 'peter4@adventure-works.com', '436-555-0160'),
(59, 'Mr.', 'Douglas', '', 'Groncki', '', 'Locks Company', 'adventure-works\shu0', 'douglas2@adventure-works.com', '385-555-0140'),
(60, 'Mr.', 'Sean', 'J.', 'Lunt', '', 'Main Bicycle Services', 'adventure-works\linda3', 'sean4@adventure-works.com', '183-555-0111'),
(61, 'Mr.', 'Jeffrey', '', 'Kurtz', '', 'Many Bikes Store', 'adventure-works\shu0', 'jeffrey3@adventure-works.com', '452-555-0179'),
(64, 'Mr.', 'Vamsi', '', 'Kuppa', '', 'Metal Clearing House', 'adventure-works\jos‚1', 'vamsi1@adventure-works.com', '290-555-0196'),
(65, 'Ms.', 'Jane', 'P.', 'Greer', '', 'Metro Manufacturing', 'adventure-works\jos‚1', 'jane2@adventure-works.com', '737-555-0163'),
(66, 'Mr.', 'Alexander', 'J.', 'Deborde', '', 'Neighborhood Store', 'adventure-works\garrett1', 'alexander1@adventure-works.com', '394-555-0176'),
(70, 'Mr.', 'Deepak', '', 'Kumar', '', 'Outdoor Aerobic Systems Company', 'adventure-works\jae0', 'deepak0@adventure-works.com', '1 (11) 500 555-0122'),
(73, 'Ms.', 'Margaret', 'T.', 'Krupka', '', 'Outdoor Sports Supply', 'adventure-works\pamela0', 'margaret1@adventure-works.com', '107-555-0132'),
(74, 'Mr.', 'Christopher', 'M.', 'Bright', '', 'Parcel Express Delivery Service', 'adventure-works\david8', 'christopher2@adventure-works.com', '162-555-0166'),
(75, 'Ms.', 'Aidan', '', 'Delaney', '', 'Paint Supply', 'adventure-works\jillian0', 'aidan0@adventure-works.com', '358-555-0188'),
(76, 'Mr.', 'James', 'J.', 'Krow', '', 'Out-of-the-Way Hotels', 'adventure-works\jillian0', 'james11@adventure-works.com', '265-555-0190'),
(77, 'Mr.', 'Michael', '', 'Brundage', '', 'Mechanical Products Ltd.', 'adventure-works\shu0', 'michael13@adventure-works.com', '128-555-0148'),
(78, 'Mr.', 'Stefan', '', 'Delmarco', '', 'Preferred Bikes', 'adventure-works\linda3', 'stefan0@adventure-works.com', '819-555-0186'),
(79, 'Mr.', 'Mitch', '', 'Kennedy', '', 'Reasonable Bicycle Sales', 'adventure-works\shu0', 'mitch0@adventure-works.com', '996-555-0192'),
(82, 'Mr.', 'James', 'D.', 'Kramer', '', 'Refined Department Stores', 'adventure-works\jos‚1', 'james10@adventure-works.com', '814-555-0130'),
(83, 'Mr.', 'Eric', 'J.', 'Brumfield', '', 'Requisite Part Supply', 'adventure-works\jos‚1', 'eric3@adventure-works.com', '644-555-0114'),
(84, 'Ms.', 'Della', 'F.', 'Demott Jr', '', 'Rewarding Activities Company', 'adventure-works\garrett1', 'della0@adventure-works.com', '752-555-0185'),
(88, 'Ms.', 'Pamala', 'M.', 'Kotc', '', 'Closest Bicycle Store', 'adventure-works\jae0', 'pamala0@adventure-works.com', '1 (11) 500 555-0173'),
(91, 'Ms.', 'Joy', 'R.', 'Koski', '', 'Scooters and Bikes Store', 'adventure-works\pamela0', 'joy0@adventure-works.com', '810-555-0198'),
(92, 'Ms.', 'Jovita', 'A.', 'Carmody', '', 'Sports Commodities', 'adventure-works\david8', 'jovita0@adventure-works.com', '646-555-0137'),
(93, 'Mr.', 'Prashanth', '', 'Desai', '', 'Stationary Bikes and Stands', 'adventure-works\jillian0', 'prashanth0@adventure-works.com', '138-555-0156'),
(94, 'Mr.', 'Scott', '', 'Konersmann', '', 'Specialty Sports Store', 'adventure-works\jillian0', 'scott6@adventure-works.com', '556-555-0192'),
(96, 'Ms.', 'Jane', 'N.', 'Carmichael', '', 'Rural Department Store', 'adventure-works\shu0', 'jane0@adventure-works.com', '716-555-0167'),
(97, 'Ms.', 'Bonnie', 'B.', 'Lepro', '', 'More Bikes!', 'adventure-works\linda3', 'bonnie2@adventure-works.com', '354-555-0130'),
(99, 'Mr.', 'Eugene', '', 'Kogan', '', 'Mountain Bike Center', 'adventure-works\shu0', 'eugene2@adventure-works.com', '136-555-0134'),
(100, 'Mr.', 'Kirk', 'T', 'King', '', 'Up-To-Date Sports', 'adventure-works\jos‚1', 'kirk2@adventure-works.com', '979-555-0163');

GO


使用以下 T-SQL 语句执行拆分操作:


--Perform Federations SPLIT operation
USE FEDERATION ROOT WITH RESET
GO
ALTER FEDERATION CustomerFederation SPLIT AT (cid=80)
GO

另请参见

本文是否对您有所帮助?
(1500 个剩余字符)

社区附加资源

添加
© 2013 Microsoft. 版权所有。
facebook page visit twitter rss feed newsletter