65.9K
CodeProject 正在变化。 阅读更多。
Home

具有不同供应商的数据库镜像

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.64/5 (5投票s)

2011年7月8日

CPOL

3分钟阅读

viewsIcon

11817

SQL Server ISS 可以简化跨多个供应商的数据库镜像

引言

开发人员经常会遇到来自供应商的关键企业数据库,即使在生产时读取数据的风险也可能非常高。一种低级解决方案是恳求从关键的生产 DBA 人员那里获取文本文件提取。作为替代方案,Microsoft SqlServer 产品现在通过行业标准 ODBC 连接技术为来自大多数供应商的数据库提供了一个高速接口。当可以容忍延迟(例如 24 小时)时,可以使用 SqlServer Integration Services (ISS) 功能将数据库镜像到几乎任何东西(例如 Oracle、Intersystems Cache)。现在可以使用三太字节硬盘驱动器,镜像端的空间问题比以往任何时候都小。

背景

在 ISS 或之前的 DTS 版本之前,人们面临着编写大量代码来解析友善地提供给开发人员的文本文件,这些开发人员使用 SqlServer 进行镜像。通过最新版本的 SqlServer (2000, 2005, 2008) 提供的工具集和向导,应该可以消除大多数手动编写代码来解析文本文件的需求。要做到这一点,关键是与生产 DBA 人员协商达成协议,以便可以为 SqlServer 的 ODBC 连接进行非工作时间只读访问。在镜像站点到位并运行后,可以从生产环境以及双方的参与者那里消除巨大的压力。我的第一个镜像站点的动机是生产 DBA 运行一个新查询,该查询导致企业停摆了几分钟!

Using the Code

为了最大限度地减少构建镜像站点的努力,我首先协商对企业 DBA 所需的最小表集进行只读访问。每个企业源表然后成为一个 ISS 包。SqlServer 导入向导将为您构建特定表的简单基本起始包。

首先,我构建了一个名为 Mirror 的新数据库。导入向导如下所示,以示例 Northwind Employees 作为要镜像的表

First import wizard form - source and new destination

源表来自 Northwind 进入目标 Mirror。

Second import wizard form - field columns

字段将在新 Mirror 表的同名表中。

Third import wizard form - save and run

包将被保存,并可选地在表较小时运行。

Final import wizard form - saved package name

基本包已作为 Iss2008PkgNorthwindEmployees 保存在 SqlServer 中,用于在 Visual Studio (VS) 的 BI 版本中使用。将基本包导入到 VS 的一个新项目中会产生以下内容,稍作注释后

Resulting simple package

在真实的镜像中,需要更多逻辑,如扩展包所示

Expanded package

--
-- TSQL source code for the above blocks is:
--
IF  EXISTS (SELECT * FROM sys.objects _
	WHERE object_id = OBJECT_ID(N'[dbo].[Employees_NEW]') AND type in (N'U'))
drop table [dbo].[Employees_NEW]   	-- drop table in case of partial 
				-- results in a previous run


CREATE TABLE [dbo].[Employees_NEW] (
[EmployeeID] int,
[LastName] nvarchar(20),
[FirstName] nvarchar(10),
[Title] nvarchar(30),
[TitleOfCourtesy] nvarchar(25),
[BirthDate] datetime,
[HireDate] datetime,
[Address] nvarchar(60),
[City] nvarchar(15),
[Region] nvarchar(15),
[PostalCode] nvarchar(10),
[Country] nvarchar(15),
[HomePhone] nvarchar(24),
[Extension] nvarchar(4),
[Photo] image,
[Notes] ntext,
[ReportsTo] int,
[PhotoPath] nvarchar(255)
)

-- data flows here

drop table [dbo].[Employees]   -- remove older copy inside the mirror

exec sp_rename 'employees_new', 'employees'  -- put new copy into working mirror

create index employees_0 on employees(EmployeeID) 

create index employees_1 on employees(LastName,FirstName)

在真实的镜像站点中,上述包将扩展到索引之外,可能还有更多步骤。总体包设计用于即使新的镜像读取失败,镜像表仍然可用。

要将包变成一个小小的软件机器人,BI 项目属性将设置为允许部署实用程序。然后,该包被构建用于在重复的 SqlServer 作业步骤中使用。使用 BI 构建选项会在项目 bin\deployment 目录中产生以下内容

Content for deployment

双击清单会启动一个向导,用于安装该包以在 SqlServer 作业中使用。

很值得研究 ISS 技术,因为本文仅仅触及了其可能性的表面。通过使用 VS 项目工具栏上的脚本任务,您可以在整个流程中包含 VB 或 C# 中的 .NET 代码块。您还可能会发现,镜像站点将变得至关重要,几乎就像相关的生产环境一样。

由于 SqlServer 和 ISS 中提供了如此多的功能,因此可以进行一些非显而易见的额外用途,例如用于自动化测试或安全扫描等框架。

历史

  • 初始版本 1.0 - 2011 年 7 月 5 日
© . All rights reserved.