0

我在共享托管服务器上有一个实时数据库。我正在对我的站点代码进行一些重大更改,并且我想修复我在最初设计数据库时犯的一些愚蠢错误。这些更改涉及更改大量字段的大小,并正确执行表之间的引用完整性。如果可能,我想在我的本地测试服务器和远程服务器上进行更改。

我应该注意到,虽然我对编写复杂的查询来处理数据相当熟悉,但我在没有图形界面的情况下修改数据库结构的经验很少。

我可以在 Visual Studio 数据库资源管理器中访问远程数据库,但我不能将其用于数据操作以外的任何事情。我昨晚安装了 Sql Management Studio express,在 40 多次崩溃后我放弃了——我什至无法修补这该死的东西。

远程服务器是 SQL 2005 / MyLittleAdmin Web 界面可用。所以我的问题是完成这些更改的最佳方法是什么。我可以在远程服务器上使用图形界面吗?如果没有,是否有一种简单的方法可以将数据库复制到我的本地机器,修复它,然后重新上传?最后,如果上述方法都不可行,是否有人链接到通过查询修复参照完整性的体面信息?

抱歉这个有点笼统的问题 - 我觉得我做的比它应该做的要困难得多,但是在搜索/尝试了一整晚之后,我没有得到任何地方。在此先感谢您的帮助。对此,我真的非常感激。

......还有谁有我可以借用的时间机器 - 我需要为此去踢我过去的自己的屁股。

4

1 回答 1

2

通常托管服务提供商允许您备份和恢复数据库,因此完成迁移的最简单方法是备份您的实时数据库,下载备份文件,在本地恢复,进行所有更改,备份本地数据库,上传它,然后在实时服务中恢复它。在此期间,您的站点应处于管理关闭状态,因此在您执行此操作时它不会继续更新数据。您必须确保您的本地 SQL 实例与托管服务提供商的构建版本 (@@version) 完全相同,否则您的本地 SQL 可能会升级数据库结构,您将无法在托管服务提供商上恢复它(或者如果您的版本早于主机版本,您将无法在本地服务器上恢复)。MSDN BOL 有关于如何使用 Backup/Restore 复制数据库

备份/恢复的替代方法是分离/附加数据库,但我不建议这样做,因为您需要同步移动 MDF 和 LDF,而且它们的大小也比备份大。

这假设您可以以向导的方式对本地副本进行所有架构更改,即。快速而正确。当然,这并不容易。推荐的方法是及时准备一个脚本,该脚本应用到达新模式所需的所有转换。有SQL DiffSQL CompareSQL Delta等工具可以生成这样的脚本。Visual Studio 数据库版也可以做到这一点。

我将如何做到这一点是这样的:

  1. 确保我的开发机器上的架构与实时主机上的架构完全相同。如果不确定,我可以备份实时服务器并在本地恢复。这将是我的参考,v1。架构。
  2. 保留 v1 的备份。以供参考
  3. 开始开发一个脚本,将架构更改为我的目标。有时我需要自己刷新对脚本语法的记忆,我所做的就是转到 SQL Server Management Studio 向导进行我想要执行的操作,选择 UI 中的所有选项,然后选择“显示脚本选项” ,这将准确地向我显示 SSMS 正在运行的脚本以完成我想要的更改。
  4. 对于我添加到脚本中的每个更改,我都可以通过恢复 v1.1 来测试它。我从第 1 步得到的参考备份并运行脚本。
  5. 继续迭代脚本,一次添加一项更改,直到完成所有需要的架构更改。每次更改后,我都可以像第 4 步一样再次对其进行测试。
  6. Yourscript 不仅应该对模式进行 DDL 更改,还应该进行任何所需的 DML 更改(修改参考数据、更改值、在表格之间移动列等)。
  7. 脚本准备好后,我可以下载更新的备份,应用脚本,然后上传更新的备份并将其恢复到实时主机上。或者,您可以简单地在实时主机上运行脚本(当然,在您备份它以防出现严重错误之后)。

在我的项目中,我总是依赖脚本来部署和升级数据库。事实上,我使用数据库扩展属性来存储我的应用程序部署模式的“版本”,并且在我的代码中,我只是将所有将模式带到我的上一个版本的脚本前滚。我的博客上有一篇文章描述了这种技术:版本控制和你的数据库

于 2009-07-18T18:30:27.130 回答