1

我一直在谷歌搜索,但我找不到这是否存在,或者我要求一些魔法 =P

好的,这就是交易。

我需要有一种方法来创建一个“主结构”数据库,它只包含模式、结构、表、存储过程、udfs 等,除了 SQL SERVER 2005 中的真实数据之外的所有内容(如果这在 2008 年可用,让我知道,我可以尝试说服我的客户支付它=P)

然后我想有几个实现这些模式、表等的主数据库的“孩子”,但每个人都有不同的数据。

所以当我需要创建一个新的存储过程或类似的东西时,我只是在主数据库上创建它(当然它在它的子数据库上可用)。

实际上我有几个不同的数据库具有相同的模式和不同的数据。但问题是要保持它们之间的一致性。每次我创建一个脚本来创建一些 SP 或添加一些索引或其他什么时,我必须在每个数据库中执行它,有时我可能会错过一个 =P

因此,假设您有一个 UNIVERSE(将是主 db),并且该 Universe 有 SPACES(每个都由一个子 db 表示)。所以我正在处理的应用程序需要动态“克隆”空间。为此,我们必须创建一个新数据库。现在,我正在创建正在克隆的数据库的备份,将其还原为新数据库并截断表。我希望能够创建“主”数据库的新“子”,它将维护模式和所有内容,但将从空数据开始。

希望很清楚...我的英语不是很完美,对此感到抱歉 =P 谢谢大家!

4

6 回答 6

2

您真正需要的是对数据库模式进行版本控制。

请参阅do-you-source-control-your-databases

如果您使用 SQL Server,我会推荐dbGhost - 价格不贵,并且在以下方面做得很好:

  • 同步2个数据库
  • 区分2个数据库
  • 从一组脚本创建一个数据库(我会推荐这个版本)。
  • 批处理支持,以便您可以使用单个批处理升级所有数据库

您可以将此基础架构用于以下两者:

  • 滚动开发版本以测试、集成和生产系统
  • 将您的“更新”系统滚动到多个生产部署(尤其是在托管环境中)
于 2009-06-03T20:50:29.273 回答
1

我会将我的更改写为 sql 文件,并通过批处理文件使用 OSQL 或 SQLCMD,以确保我在所有数据库上重复执行而不考虑它。

作为替代方案,我会使用 VisualStudio Database Pro 工具或 RedGate SQL 比较工具来比较和传播更改。

于 2009-06-03T20:32:08.530 回答
1

有一些问题,但处理这个问题的主流方法仍然是使用源代码控制(以及所有其他附带的好处。)而且 SQL Server 对 SCC 越来越友好。

此外,对于许多(最强大的)站点来说,每个服务器的问题与每个数据库的问题一样多。

于 2009-06-03T20:35:11.600 回答
0

您可以将东西放在像 SP 之类的 master 中,并从任何地方调用它们。至于表等其他对象,您可以将它们放入模型中,新数据库将在您创建新数据库时获取它们

但是,为了让新表在添加到父数据库后简单地弹出到子数据库中,什么都没有。

可以创建一些东西来查看数据库并从模板数据库编写脚本,并且还有一些商业工具可以帮助发现数据库之间的差异。您还可以在“主”数据库中有一个 DDL 触发器,当您创建一个新表时它会退出并执行此操作。

如果您保留了一个不错的 SPACES 模板,您可以编写脚本(没有数据)并创建新数据库 - 因此无需截断。您可以从 SQL 或外部工具编写脚本。

于 2009-06-03T20:30:31.233 回答
0

这里的小琐事。mssqlsystemresource数据库如您所描述的那样工作:定义一次并在每个数据库中“出现”为特殊sys模式。不幸的是,用户数据库无法使用此工作所需的特殊“魔法”。您必须使用部署技术来使您的架构保持同步。也就是说,将更改应用到每个数据库,就像已经建议的其他答案一样。

于 2009-06-04T02:07:55.513 回答
0

理论上,您可以在 UNIVERSE.sysobjects 表上放置一个触发器(假设是 SQL Server),然后您可以枚举 master.dbo.sysdatabases 以查找所有子数据库。如果你有一个特殊的表表明它是一个子数据库,你可以参考 child.dbo.sysobjects 来找到它。

毫无疑问,这将很难实施。但这是你可以做到的一种方式。

于 2009-06-04T03:21:05.897 回答