ASP.NET Membership 数据库同步解决方案

在开发过程中,经常需要将生产环境的数据刷新到开发环境中。本文将介绍一种解决方案,以实现这一需求。

前提条件

要实现此解决方案,需要以下工具:

  • MicrosoftSQL Server2008 R2
  • Business Intelligence Development Studio (BIDS)
  • MicrosoftSQL ServerManagement Studio 2008+ (SSMS)

步骤1:映射依赖关系

首先,需要映射所提供数据库的依赖关系。这将帮助创建一个数据加载包,通过先加载子表再加载父表来避免参照完整性问题。虽然在大型数据库中,这项任务可能会非常重复,但幸运的是,讨论的Membership数据库只包含11个表。

要找到对象的依赖关系,在SSMS中右键单击它(对象资源管理器 > 数据库 > 数据库 > 表 > 表),然后选择“查看依赖关系”。

在“对象依赖关系”窗口中,选择“所选对象依赖的对象”(对象依赖关系 > 常规)。这将显示所选对象的所有依赖项,按相反顺序排列。较低层次的项目需要在依赖表引用之前加载。

目标是为数据库创建一个依赖树。

完成的依赖树

无依赖关系:

  • aspnet_WebEvent_Events
  • aspnet_SchemaVersions

有依赖关系:

  • aspnet_UsersInRole
  • aspnet_Profile
  • aspnet_Membership
  • aspnet_PersonalizationPerUser
  • aspnet_PersonalizationAllUsers
  • aspnet_Users
  • aspnet_Paths
  • aspnet_Roles
  • aspnet_Applications

从依赖树中,可以看到“Applications”需要首先加载,然后是“Users”、“Paths”和“Roles”,依此类推。有了这些信息,现在可以创建一个数据加载包。

步骤2:创建数据加载包

将在BIDS中开发一个数据加载包,首先清除旧记录,然后从生产环境插入新记录。对于非常大的数据库,可以将脚本调整为只加载新记录并更新旧记录。然而,为了保持理智,将在同步新记录之前删除所有记录,因为Membership数据库通常尺寸较小。

首先,在BIDS中创建一个新的“Integration Services Project”(文件 > 新建项目 > 商业智能项目 > Visual Studio安装模板:Integration Services Project)。

通过在连接管理器窗口中右键单击并选择“新建OLE DB连接…”,添加两个OLE DB连接。一个用于源数据库,一个用于目标数据库。为每个数据库填写服务器名称和数据库名称。此外,将属性“DelayValidation”设置为True,以便稍后通过脚本动态连接字符串。

接下来,添加一个包含三个执行SQL任务的序列容器,并将它们按如下方式连接。由于在步骤1中确定了依赖关系,知道可以分三个阶段删除和加载数据(每个层次结构级别代表可以顺序执行的阶段)。

现在,添加SQL来删除从最依赖到最不依赖的表数据。在例子中,在第一阶段删除UsersInRole、Profile、Membership、PersonalizationPerUser和PersonalizationAllUsers。通过编辑执行SQL任务编辑器中的SQLStatement来实现。将连接设置为目标数据库,并为任务命名。为所有三个任务执行此操作,每个阶段只删除相应表的数据。

现在,准备开发包的数据加载部分。首先,添加另一个包含三个数据流任务的序列容器。这次,加载数据的顺序是相反的(从最不依赖到最依赖)。这意味着将首先加载Applications、SchemaVersions和WebEvent_Events。由于SchemaVersions和WebEvent_Events在任一方向上都没有依赖关系,将它们添加到这个阶段的例子中。

通过双击数据流任务打开加载Membership序列的第一阶段。从工具箱中,将一个OLE DB源和一个OLE DB目标添加到数据流中。开始配置源,通过双击它。从下拉菜单中选择源连接管理器,并将数据访问模式设置为“表或视图”。然后,选择想要加载的表。在这个例子中,从[dbo].[aspnet_Applications]开始。

接下来,将源和目标组件连接起来,双击目标进行配置。选择目标OLE DB连接管理器,将数据访问模式设置为“表或视图 - 快速加载”,然后点击确定。列映射应该已经正确设置(输入和输出列是相同的)。要检查,请打开OLE DB目标编辑器,然后点击映射页面。

继续为每个项目(SchemaVersions、WebEvent_Events)添加单独的源和目标组件。最终结果应该如下所示:

相应地为第二阶段和第三阶段添加其他源和目标组件。此时,可以测试新包。如果一切顺利,可以看到成功的输出和开发环境中的数据。

首先创建了数据库的依赖树,将数据加载过程分为三个阶段(每个阶段对应树层次结构的一个级别),并创建了一个可以作为计划任务或从命令行运行的数据加载包。在下一篇文章中,将探讨如何通过SSIS合并两个现有的Membership数据库,并将本地ASP.NETMembership数据库迁移到SQL Server。敬请关注更多更新。在评论中告诉想法!

  • 项目在GitHub上:
  • CodeProject
dtexec /f "ASP.NET Membership Tools\bin\Refresh Membership.dtsx" /conn "Source"; "Data Source=source_server;Initial Catalog=source_database;Integrated Security=SSPI;" /conn "Target"; "Data Source=target_server;Initial Catalog=target_database;Integrated Security=SSPI;" /reporting W
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485