0

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

是否有允许在 SQL Server 中完成此操作的方法?我已经研究过创建一个导出数据库模式和数据的 SSIS,然后放置一个行采样任务来减少流入新数据库的数据量,但我想知道是否有更好的方法来做到这一点?

4

2 回答 2

2

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

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

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

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

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

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

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

披露:我为 Redgate Software 工作。

于 2018-09-12T13:28:03.817 回答
0

虽然偏离主题,但我确实想提供一些您可以遵循的指导方针:

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

一旦你决定了你的主要实体,你就可以选择你数据库的 10%。例如,如果您的主要实体是 Accounts,您可以从Account表中选择 10% 的 AccountId。这 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表包含范围内的一系列mortgageId(该示例查找与抵押相关的所有个人/组织之间的所有关系)。

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

另见这个(不幸的是,目前只有荷兰语,但如果你把它推给翻译器,它仍然应该很有意义。)

于 2018-09-05T12:33:43.200 回答