Sql server 有条件的MS SQL备份和恢复

Sql server 有条件的MS SQL备份和恢复,sql-server,database-backups,Sql Server,Database Backups,我们有两个虚拟机,其中一个是系统的实时版本,另一个是开发环境。问题是,当开发人员想要将数据库从live machine备份并恢复到development machine时,会有一些敏感数据,如姓名、姓氏、父亲姓名、出生日期、地址等。由于GDPR,我不想将用户的敏感数据备份到某个表上 那么,在这种情况下,如何备份和恢复数据库呢?假设表名为Users。我只想恢复除Users表数据之外的所有数据库。然而,开发人员帐户也存储在那里,所以我需要备份Users表上的某些ID。我基本上是通过SQLServer

我们有两个虚拟机,其中一个是系统的实时版本,另一个是开发环境。问题是,当开发人员想要将数据库从live machine备份并恢复到development machine时,会有一些敏感数据,如姓名、姓氏、父亲姓名、出生日期、地址等。由于GDPR,我不想将用户的敏感数据备份到某个表上

那么,在这种情况下,如何备份和恢复数据库呢?假设表名为Users。我只想恢复除Users表数据之外的所有数据库。然而,开发人员帐户也存储在那里,所以我需要备份Users表上的某些ID。我基本上是通过SQLServerManagementStudio上的GUI备份和恢复数据库,但是我需要为它编写一些脚本

BACKUP DATABASE [DB_NAME] TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Backup\DB_NAME_Date.bak' WITH NOFORMAT, NOINIT,  NAME = N'DB_NAME-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

本机MSSQL中没有备份和恢复选择性表的选项。但是,您可以编写脚本(尽管可能很复杂)从prod->dev移动数据。例如:

  • 使用BCP(大容量复制程序)

  • 使用“选择到”创建表的副本

  • 使用数据生成表脚本

  • 使用任务->导出/导入

  • 使用选择性复制

  • 另一种选择是,执行恢复,然后自动清除不需要的内容。这感觉就像一盒虫子


有一种商业产品具有对象级恢复功能,但它不是免费的:我过去使用过它,而且它工作得很好。

您可以编写数据更改脚本以在恢复后运行。作为还原作业的一部分,创建一些测试数据并编写脚本以使用测试数据替换生产数据

有一些第三方备份工具可以执行表级备份和恢复,如Commvault。你也可以调查一下


我知道Commvault执行表级恢复。我知道还有Netbackup和Veeam。我认为Netbackup的最新版本可以进行对象级备份/恢复,但不确定。从未使用过Veeam backup,但我听说过他们的优点,他们的其他产品也非常好。我使用了Commvault,但没有使用表级恢复选项。除此之外,Commvault非常棒。

我们为电信公司开发了会计系统,我们在许多方面都需要一个数据库,类似于生产数据库

我可以解释我们是如何解决这个问题的

非技术方面

我们必须与客户达成一致意见

他们的安全部门和DBA审查了我们的流程

我们的流程

  • 步骤1:部分备份-我们不需要多年的呼叫历史记录

  • 步骤2:在客户服务器上恢复

  • 步骤3:匿名化脚本

  • 步骤4:审查匿名数据

  • 步骤5:备份创建的数据库

匿名化过程

  • 更改永久姓名、电话号码、社交ID和其他敏感信息
  • 洗牌永久ID
  • 永久数据和相关呼叫和计费历史记录的随机复制
  • 更改通话历史记录:在账单期间洗牌通话,添加随机不存在的通话,删除随机通话
  • 更改帐单历史记录
  • 最后的想法

    我没有听说这类任务的现成解决方案

    如果你能找到一个类似于我们的匿名工具,请分享你的知识

    关于这个话题,我只能说这些了


    自己决定它如何满足您的要求。

    此外:a)使用文件组,b)复制。但无论如何,这不是一项容易的任务。关于文件组,我考虑过要包括这一点,但将哪些表放入哪些组中会是一个相当大的挑战:)我没有考虑复制,我会补充这一点,谢谢:)@sniperd谢谢你的回复。我只是想知道有没有什么办法可以这么快。否则,使用Tasks->Export/Import、生成带有数据的表脚本或SELECT-INTO都是非常棘手的,而且浪费时间。我更愿意手动备份和恢复数据库,并使用delete from table name从表中删除数据,然后再次插入开发人员信息:)谢谢您的回复。我会做一个更新,几天后让你知道。