削减数据库大小

Ben*_*Ben 8 sql database

假设您有一个为公司服务了10年的数据库.它的大小为500GB,它有无数的表,存储过程和触发器.

现在假设您希望创建一个数据库的简化版本,以用作集成测试中使用的测试平台,以及个别测试人员和开发人员可以启动的实例.

从广义上讲,您将如何设定此任务?

如果它很重要,我想到的数据库是SQL Server 2008.

编辑:删除"单元测试",因为单元测试当然不应该测试数据库集成

Jay*_*Jay 3

如果您的表都包含不相关的数据,您可以从每个表中随机选择 X 条记录。我猜测问题在于这些表并不是不相关的,因此,如果表 A 包含对表 B 的外键引用,并且您刚刚从表 A 中提取了 10% 的记录,并从表中提取了 10% 的记录B,你会得到一大堆从 A 到 B 的无效引用。

我不知道这个问题的通用解决方案。这取决于数据库的确切结构。我经常发现我的数据库由少量“中心”表组成,这些表有很多来自其他表的引用。也就是说,我通常发现我有一个订单表,然后有一个指向订单的订单行表,还有一个订单指向的客户表,以及一个指向订单或订单行的交货表,等等,但一切似乎都以“秩序”为中心。在这种情况下,您可以随机选择一些订单记录,然后查找这些订单的所有客户、这些订单的所有订单行等。我通常还有一些“代码查找”表,例如所有“订单状态”代码、所有“客户类型”代码的另一个列表等。这些代码通常很小,所以我只是完全复制它们。

如果您的数据库比这更……脱节……,即如果它没有任何明确的中心,而是一个相互关系的迷宫,那么这可能会复杂得多。不过,我认为同样的原则也适用。选择某个起点,从那里选择一些记录,然后获取与这些记录相关的所有记录,等等。