需要我的 SQL 服务器数据库的 10% 副本用于开发工作
Need a 10% Copy of my SQL Server Database for Development work
我想在生产数据库中获取 10% 的数据副本,保持其完整性并将其恢复到新数据库中。
是否有允许在 SQL 服务器中完成此操作的方法?我研究过创建一个导出数据库模式和数据的 SSIS,然后放置一个行采样任务以减少流入新数据库的数据量,但我想知道是否有更好的方法来做到这一点?
虽然与 SO 无关,但我确实想提供一些您可以遵循的指导方针:
我经常这样做,但主要是手工作业。首先,您必须确定数据库的 "main entity" 是什么:它与人、帐户、信用卡还是其他什么有关?我主要在金融部门工作,所以对我来说通常是 accounts/mortgages 等。但它可以是任何东西,真的。
您必须决定数据库中的所有内容都与什么相关,可以这么说 "base entity"。
一旦你决定了你的主要实体,你就可以选择你的数据库的 10%。例如,如果您的主要实体是客户,您可以从 Account
table 中 select 10% 的 AccountId。这 10% 你可以输入 table。
接下来是艰苦的工作:您必须为 table 中的每个人编写查询,将各自的实体与您的主要实体相关联。因此,如果您的主要实体是一个人,您需要该人的所有地址、他们的所有帐户、他们所有的 phone 号码以及与他们相关的所有历史记录。这些查询可能会变得相当复杂,您确实需要很好地了解您的数据库。您会收到如下查询:
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
table 包含范围内的 mortgageId 的 selection(该示例查找与抵押相关联的所有 persons/organizations 之间的所有关系)。
我最常做的是在某些模式中拥有生产数据(一些及时提取的数据),并使用上述查询来填充 dbo 模式。因此,上面示例中的 [ATV].[GTP_MSI_MORTGAGERELATION_MORTGAGE_RELATION]
将包含生产数据,而其同名的 dbo
包含较小的生产数据集(与范围内的抵押贷款相关的数据)。填充 dbo 架构后,我可以使用匿名化软件(我倾向于使用 Red Gate Datagenerator)删除 private/business 敏感信息。然后我可以提取匿名数据,并将其用作我的开发数据库的来源。
另请参阅 this(不幸的是,目前只有荷兰语版本,但如果您将其推给翻译器,它应该仍然很有意义。)
这是一个很难的话题,确实需要一些功夫。这里有一些方法,除了 HoneyBadger 指出的内容之外,我将添加一些内容。
首先,我知道 Data Bee 可以对数据库进行子集化,但这对您来说可能还不够。您可以试用一下,看看它是否有效。
其次,我通常建议您为开发领域(开发、测试、UAT 等)获取一个精选数据集,其中包含您需要解决的问题域的案例。有两种方法可以做到这一点。一种是数据虚拟化软件,Redgate 在其产品中的 SQL Clone、Delphix 和其他一些产品中使用了该软件。这基本上复制了一次生产,然后将其共享给所有人 devs/qa/etc。它减少了获取副本所需的大部分 time/storage。这会有所帮助。
另一种方法是构建数据集,这是我为一些客户所做的。
如果您从事抵押贷款工作,正如 HoneyBadger 指出的那样,您可能需要考虑固定贷款、可变 APR、各种条款等。通常最简单的方法是了解您的客户要求的案例新功能或业务分析师使用的内容,然后将这些项目复制到新数据库中。这些可能是相对较少的交易数据行和所有查找类型数据。
这也是一个持续的过程,因为您会意识到自己错过了一些事情。将该数据库保存在 VCS 或已知位置并将其用作系统的源。如果您的开发人员、您的构建系统、您的 QA 都从这里拉取,您将获得一组一致的数据。您可以使用随机数据(例如 Redgate 数据生成器)来增强它,以帮助填充一些值。
加法通常比减法容易得多。因此,还要记住 masking/obfuscating 敏感数据很重要。随着 GDPR 和其他立法的实施,我在这里会更加小心。
披露:我在 Redgate Software 工作。
我想在生产数据库中获取 10% 的数据副本,保持其完整性并将其恢复到新数据库中。
是否有允许在 SQL 服务器中完成此操作的方法?我研究过创建一个导出数据库模式和数据的 SSIS,然后放置一个行采样任务以减少流入新数据库的数据量,但我想知道是否有更好的方法来做到这一点?
虽然与 SO 无关,但我确实想提供一些您可以遵循的指导方针:
我经常这样做,但主要是手工作业。首先,您必须确定数据库的 "main entity" 是什么:它与人、帐户、信用卡还是其他什么有关?我主要在金融部门工作,所以对我来说通常是 accounts/mortgages 等。但它可以是任何东西,真的。 您必须决定数据库中的所有内容都与什么相关,可以这么说 "base entity"。
一旦你决定了你的主要实体,你就可以选择你的数据库的 10%。例如,如果您的主要实体是客户,您可以从 Account
table 中 select 10% 的 AccountId。这 10% 你可以输入 table。
接下来是艰苦的工作:您必须为 table 中的每个人编写查询,将各自的实体与您的主要实体相关联。因此,如果您的主要实体是一个人,您需要该人的所有地址、他们的所有帐户、他们所有的 phone 号码以及与他们相关的所有历史记录。这些查询可能会变得相当复杂,您确实需要很好地了解您的数据库。您会收到如下查询:
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
table 包含范围内的 mortgageId 的 selection(该示例查找与抵押相关联的所有 persons/organizations 之间的所有关系)。
我最常做的是在某些模式中拥有生产数据(一些及时提取的数据),并使用上述查询来填充 dbo 模式。因此,上面示例中的 [ATV].[GTP_MSI_MORTGAGERELATION_MORTGAGE_RELATION]
将包含生产数据,而其同名的 dbo
包含较小的生产数据集(与范围内的抵押贷款相关的数据)。填充 dbo 架构后,我可以使用匿名化软件(我倾向于使用 Red Gate Datagenerator)删除 private/business 敏感信息。然后我可以提取匿名数据,并将其用作我的开发数据库的来源。
另请参阅 this(不幸的是,目前只有荷兰语版本,但如果您将其推给翻译器,它应该仍然很有意义。)
这是一个很难的话题,确实需要一些功夫。这里有一些方法,除了 HoneyBadger 指出的内容之外,我将添加一些内容。
首先,我知道 Data Bee 可以对数据库进行子集化,但这对您来说可能还不够。您可以试用一下,看看它是否有效。
其次,我通常建议您为开发领域(开发、测试、UAT 等)获取一个精选数据集,其中包含您需要解决的问题域的案例。有两种方法可以做到这一点。一种是数据虚拟化软件,Redgate 在其产品中的 SQL Clone、Delphix 和其他一些产品中使用了该软件。这基本上复制了一次生产,然后将其共享给所有人 devs/qa/etc。它减少了获取副本所需的大部分 time/storage。这会有所帮助。
另一种方法是构建数据集,这是我为一些客户所做的。
如果您从事抵押贷款工作,正如 HoneyBadger 指出的那样,您可能需要考虑固定贷款、可变 APR、各种条款等。通常最简单的方法是了解您的客户要求的案例新功能或业务分析师使用的内容,然后将这些项目复制到新数据库中。这些可能是相对较少的交易数据行和所有查找类型数据。
这也是一个持续的过程,因为您会意识到自己错过了一些事情。将该数据库保存在 VCS 或已知位置并将其用作系统的源。如果您的开发人员、您的构建系统、您的 QA 都从这里拉取,您将获得一组一致的数据。您可以使用随机数据(例如 Redgate 数据生成器)来增强它,以帮助填充一些值。
加法通常比减法容易得多。因此,还要记住 masking/obfuscating 敏感数据很重要。随着 GDPR 和其他立法的实施,我在这里会更加小心。
披露:我在 Redgate Software 工作。