需要我的 SQL Server 数据库的 10% 副本进行开发工作



我想在生产数据库中获取数据的 10% 副本,保持其完整性并将其还原到新数据库中。

有没有一种方法可以在SQL Server中完成此操作?我已经考虑过创建一个导出数据库架构和数据的 SSIS,然后放置一个行采样任务以减少流入新数据库的数据量,但我想知道是否有更好的方法来执行此操作?

这是一个很难的话题,确实需要一些工作。这里有几种方法,除了HoneyBadger指出的内容之外,我还会添加一些东西。

首先,我确实知道Data Bee可以对数据库进行子集,但这对您来说可能还不够。您可以使用试用版来查看它是否有效。

其次,我通常建议您获取开发领域(开发、测试、UAT 等(的精选数据集,其中包含您需要解决的问题域的情况。 有两种方法可以做到这一点。一个是数据虚拟化软件,这是Redgate在SQL Clone中使用的软件,Delphix在其产品中使用的软件,以及其他一些软件。这基本上是复制生产一次,然后将其共享给所有开发人员/qa/等。它减少了获取副本所需的大部分时间/存储空间。这会有所帮助。

另一种方法是构建一个数据集,这是我为一些客户所做的。

正如HoneyBadger指出的那样,如果您从事抵押贷款工作,您可能需要考虑固定贷款,可变APR,各种条款等。 通常,最简单的方法是了解客户要求哪些案例提供新功能,或者业务分析师使用什么,然后将这些项目复制到新数据库中。这些可能是相对较少的转换数据和所有查找类型数据。

这也是一个持续的过程,因为你意识到你错过了东西。将该数据库保存在 VCS 或已知位置,并将其用作系统的源。如果你的开发人员、你的构建系统、你的 QA 都从这里提取,你会得到一组一致的数据。您可以使用随机数据(例如 Redgate 数据生成器(来增强它,以帮助填充一些值。

加法方法通常比减法容易得多。因此,还要记住,屏蔽/混淆敏感数据很重要。随着GDPR和其他立法的执行,我会在这里更加小心。

披露:我在Redgate Software工作。

虽然偏离了SO的话题,但我确实想给出一些您可以遵循的准则:

我经常这样做,但主要是手工工作。首先,您必须确定数据库的"主要实体"是什么:它是否涉及人员,帐户,信用卡或其他内容?我主要在金融部门工作,所以对我来说,它通常是账户/抵押贷款等。但它可以是任何东西,真的。 您必须决定数据库中的所有内容都与"基本实体"相关。

确定主实体后,您可以选择数据库的 10%。例如,如果您的主要实体是账户,则可以从Account表中选择 10% 的账户 ID。这10%你可以放在一个表格里。

接下来是艰苦的工作:您必须为将各个实体与主实体相关联的每个表编写查询。因此,如果您的主要实体是一个人,您需要该人员的所有地址,所有帐户,所有电话号码,与他们相关的所有历史记录。这些查询可能会变得非常复杂,您确实需要很好地了解您的数据库。您将收到如下查询:

SELECT      Src.*
INTO        [dbo].[GTP_MSI_MORTGAGERELATION_MORTGAGE_RELATION]
FROM        [ATV].[GTP_MSI_MORTGAGERELATION_MORTGAGE_RELATION] AS Src 
INNER JOIN  atv.GTP_MSI_MORTGAGEREQUEST_APPLICANT APP
ON  APP.MORTGAGE_RELATION_ID = Src.MORTGAGE_RELATION_ID
INNER JOIN  ATV.GTP_MSI_MORTGAGELOAN_LOAN MLL
ON  MLL.MORTGAGE_REQUEST_ID = APP.REQUEST_ID
INNER JOIN  dbo.DOOR D
ON  CONVERT(VARCHAR(255), D.NUMHYP) = MLL.LOAN_NUMBER

在此示例中,dbo.DOOR表包含范围内的抵押 ID 选择(该示例查找与抵押关联的所有人员/组织之间的所有关系(。

我最常做的是将生产数据(及时提取(放在某个架构中,并使用上述查询来填充 dbo 架构。因此,[ATV].[GTP_MSI_MORTGAGERELATION_MORTGAGE_RELATION]在上面的示例中将包含生产数据,而其dbo同名包含较小的生产数据集(与范围内的抵押贷款相关的数据(。一旦我填写了dbo模式,我就可以使用匿名化软件(我倾向于使用Red Gate Datagenerator(来删除私人/业务敏感信息。然后,我可以提取匿名化数据,并将其用作开发数据库的源。

另请参阅此内容(不幸的是,目前只有荷兰语,但如果您将其推到翻译器中,它仍然应该很有意义。

最新更新