代码之家  ›  专栏  ›  技术社区  ›  Kelly Robins

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

  •  0
  • Kelly Robins  · 技术社区  · 17 年前

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

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

    我可以在Visual Studio数据库资源管理器中访问远程数据库,但除数据操作外,我不能将其用于其他任何操作。我昨晚安装了SQL ManagementStudioExpress,在40多次崩溃之后我放弃了-我甚至连补丁都打不到。

    远程服务器是SQL 2005/MyLittleAdmin Web界面可用。 所以我的问题是,什么是完成这些变化的最好方法。远程服务器上是否有我可以使用的图形界面?如果没有,是否有一种简单的方法可以将数据库复制到我的本地计算机,修复它,然后重新上载?最后,如果以上都不可行,是否有人链接到有关通过查询修复引用完整性的适当信息?

    抱歉,这个问题有点笼统——我觉得我做的比应该做的要困难得多,但是在搜索/尝试了一整晚之后,我什么也没找到。事先谢谢你的帮助。我真的很感激。

    …还有没有人有时间机器我可以借-我需要去踢我过去的自我的屁股。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Remus Rusanu    17 年前

    通常,宿主提供程序允许您备份和还原数据库,因此完成移动的最简单方法是备份Live DB、下载备份文件、本地还原、执行所有更改、备份本地DB、上载它,然后在Live服务中还原它。在此期间,您的站点应处于管理关闭状态,这样在执行此操作时,它不会继续更新数据。您必须确保本地SQL实例与宿主提供程序的版本完全相同(@@版本),否则本地SQL可能会升级数据库结构,并且无法在宿主提供程序上还原该数据库结构(或者,如果您的版本早于宿主的版本,则无法在本地服务器上还原)。msdn bol有一个关于如何 Copy Databases using Backup/Restore .

    备份/恢复的另一种选择是 detach / attach 数据库,但我不推荐这样做,因为您需要同步移动MDF和LDF,而且它们的大小也比备份大。

    这假设您可以以一种向导式的方式(即快速和正确)对本地副本进行所有模式更改。当然,这并不容易。建议的方法是及时准备一个脚本,该脚本应用到达新模式所需的所有转换。有一些工具 SQL Diff , SQL Compare , SQL Delta 以及其他可以生成这样一个脚本的。另外,Visual Studio数据库版本也可以做到这一点。

    我将如何做到这一点:

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

    在我的项目中,我总是依赖脚本来部署和升级数据库。事实上,我使用数据库扩展属性来存储我的应用程序部署模式的“版本”,在代码中,我只需前滚所有将该模式转换为最后一个版本的脚本。我在博客上有一篇文章描述了这种技术: Version Control and your Database .

    推荐文章