Sql 有哪些好方法可以将模式更新推送到最终用户数据库?

Sql 有哪些好方法可以将模式更新推送到最终用户数据库?,sql,database,database-administration,Sql,Database,Database Administration,这可能太宽泛了,但这是一个我一直在处理的问题。我们有一个分发给最终用户的应用程序。它运行在德比的后端之上。我们可以相当轻松地推出代码更改,它将进入我们的服务器,查看有新版本,下载、覆盖旧代码,然后重新启动 但是,当我们更改代码时,我们也会更改derby数据库的模式。我们没有很好的方法来更新这个。目前,我们可以通过FTP推送SQL更新。当程序连接到internet时,它会查找新的SQL文件,下载它们并运行 不幸的是,我们的许多客户的互联网接入有限,因此他们会间歇性地获得这些更新。有时,因为它们的更

这可能太宽泛了,但这是一个我一直在处理的问题。我们有一个分发给最终用户的应用程序。它运行在德比的后端之上。我们可以相当轻松地推出代码更改,它将进入我们的服务器,查看有新版本,下载、覆盖旧代码,然后重新启动

但是,当我们更改代码时,我们也会更改derby数据库的模式。我们没有很好的方法来更新这个。目前,我们可以通过FTP推送SQL更新。当程序连接到internet时,它会查找新的SQL文件,下载它们并运行

不幸的是,我们的许多客户的互联网接入有限,因此他们会间歇性地获得这些更新。有时,因为它们的更改足够大,它们的本地DB模式与我们想要的不同步。或者他们通过CD获得代码更改,而不是SQL更改(有人将CD邮寄给他们)

我一直在尝试创建一个SOAP服务,它可以提供模式的XML表示。这是一个巨大的皮塔发展至今

人们目前使用哪些方法来维护这样的数据库?我觉得我不是第一个这样做的人,所以可能有比我现在做的更好的方法

根据这里的一些评论,这里有一个更新: 基本上,我认为我们很早就把自己搞砸了,因为我们没有严格遵守DB的版本控制,所以我不知道每个人的DB是如何运行的。很多人都有定制安装(随意抱怨)。我需要一个工具,可以告诉他们的数据库和“官方”副本之间的差异


我已经建立了一个工具,它可以工作,但是有太多的东西需要跟踪

能否将数据库更改作为代码更改的一部分分发?然后,当应用程序重新启动时,它会检查是否需要在数据库上运行任何更新

显然,您需要对DB模式进行版本设置,以避免多次应用相同的更新


我知道一些应用程序可以做到这一点(大部分是Ruby,但也有Java)。

您能将DB更改作为代码更改的一部分分发吗?然后,当应用程序重新启动时,它会检查是否需要在数据库上运行任何更新

显然,您需要对DB模式进行版本设置,以避免多次应用相同的更新


我知道一些应用程序可以做到这一点(大部分是Ruby,但也有Java)。

您需要一个包含用户正在运行的数据库版本的表,然后需要代码从版本n升级到版本n+1。假设您有一个数据库用户有权进行架构更改,您可以像现在应用代码更改一样应用架构更改。

您需要一个包含用户正在运行的数据库版本的表,然后需要代码从版本n升级到版本n+1。假设您的数据库用户有权进行架构更改,您可以采用与现在应用代码更改相同的方式应用架构更改。

如果您的应用程序中已有更新机制,可以下载程序来更改已安装的源代码,为什么不将架构更改打包并作为升级过程的一部分运行呢?然后,我会将更新作为Java应用程序的一部分运行


我的团队通过使用来处理这些更改,它将每个模式更改表示为单个迁移脚本,其中包含“进行更改”和“回滚”步骤。数据库中存储了一个
changelog
表,该表列出了已应用于该数据库的更新,这使得
migrate
命令在运行时可以轻松确定需要应用哪些更新。只有当您控制数据库并能够运行shell命令和脚本来更改数据库时,此特定工具才可能真正有用,但您可以在方法中使用相同的概念-将每个模式更改打包为一个原子单元,并从程序中运行它们,以将模式升级到当前版本,您可以在数据库中跟踪它。

如果您的应用程序中已经有了更新机制,可以下载程序来更改已安装的源代码,为什么不打包并运行模式更改作为升级过程的一部分?然后,我会将更新作为Java应用程序的一部分运行


我的团队通过使用来处理这些更改,它将每个模式更改表示为单个迁移脚本,其中包含“进行更改”和“回滚”步骤。数据库中存储了一个
changelog
表,该表列出了已应用于该数据库的更新,这使得
migrate
命令在运行时可以轻松确定需要应用哪些更新。只有当您控制数据库并能够运行shell命令和脚本来更改数据库时,此特定工具才可能真正有用,但您可以在方法中使用相同的概念-将每个模式更改打包为一个原子单元,并从程序中运行它们,以将模式升级到当前版本,您可以在数据库中跟踪它。

理想情况下是的,但问题是人们通过邮寄的CD获得代码更改,而没有SQL更新。所以有些人在这种变化中,我们不知道他们到底需要什么样的更新。我们一个接一个地进行修复,但现在有数百名用户,这不是一个选项。我认为您遇到了不控制架构版本的问题,所以现在您不知道您的客户需要什么补丁。您可以(可能)编写一个脚本来检测模式的版本(例如,如果存在x列,则版本至少为1.3),并从中运行更新模式的过程。我想说的是,无论您找到什么解决方案,您可能真的希望开始对模式进行版本控制,以防止再次出现这种情况