在共享主机上修改SQL数据库

时间:2009-07-18 17:47:54

标签: sql-server-2005 shared-hosting visual-studio-express visual-web-developer

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

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

我可以访问visual studio数据库资源管理器中的远程数据库,但除了数据操作之外我不能使用它。我昨晚安装了Sql Management Studio Express,经过40多次崩溃后我放弃了 - 我甚至无法修补该死的东西。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

备份/恢复的替代方法是detach / attach数据库,但我不建议这样做,因为你需要同时移动MDF和LDF,它们也是尺寸大于备份。

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

我将如何做到这一点:

  1. 确保我的开发机器上的架构与实时主机上的架构完全相同。如果不确定,我可以备份实时服务器并将其恢复到当地。这将是我的参考,v1。架构。
  2. 保留v1的备份。供参考
  3. 开始开发一个脚本,将架构更改为目标。有时候我需要自己刷新脚本语法的内存,我的工作是转到SQL Server Management Studio向导进行我想要的操作,选择UI中的所有选项,然后选择“show script options” ,这将向我展示SSMS正在运行的脚本,以完成我想要的更改。
  4. 对于我添加到脚本的每个更改,我可以通过恢复v1来测试它。参考备份我从第1步开始运行脚本。
  5. 继续迭代脚本,一次添加一个更改,直到完成所有必需的架构更改。每次更改后,我都可以像步骤4一样再次测试。
  6. Yourscript不仅应该对模式进行DDL更改,还应该进行所需的任何DML更改(修改参考数据,更改值,在列表之间移动列等)。
  7. 当脚本准备就绪时,我可以下载更新的备份,应用脚本,上传更新的备份并将其恢复到实时主机上。或者你可以简单地在现场主机上运行脚本(当然你备份它以防万一有些可怕的错误)。
  8. 在我的项目中,我总是依赖脚本来部署和升级数据库。事实上,我使用数据库扩展属性来存储我的应用程序部署模式的“版本”,在我的代码中,我只是简单地推出了将模式带到我上一个版本的所有脚本。我的博客上有一篇文章描述了这种技术:Version Control and your Database