如何创建一个消毒的'我们的SQL Server数据库的副本?

时间:2015-05-15 11:42:27

标签: sql-server tsql

我们是一家制造公司,我们聘请了几位数据科学家来寻找我们制造数据中的模式和相关性。我们希望向他们提供我们的报告数据库的副本(SQL 2014),但它必须在“清理过的”数据库中。形成。这意味着所有表名都转换为'表1','表2'等,每个表中的列名变为“列1'”,“列2”和“#39;列2'大约有100个表,有些表有30多列,有些表有2B +行。

我知道有一个很难的方法。这将是使用已清理的表名和列名手动创建每个表,然后使用类似SSIS的内容将行从一个表批量插入另一个表。由于需要手动SSIS列映射以及每个表的手动设置,这将是相当耗时且繁琐的。

我希望有人之前做过类似的事情,并且有更快,更有效的方式。

顺便说一下,'消毒'数据库没有索引或外键。此外,似乎有理由为什么我们想要这样做,但这是我们的制造总监和数据科学家所同意的,作为第一轮分析将涉及多轮。

2 个答案:

答案 0 :(得分:3)

你基本上想要擦除数据和对象,对吗?这就是我要做的。

  1. 恢复数据库的备份。
  2. 删除不需要的所有对象(索引,约束,存储过程,视图,函数,触发器等)
  3. 创建一个包含两列的表,填充表,每行都有orig表名和新表名
  4. 编写一个脚本,遍历表格,逐行,并重命名表格。更好的是,将数据放入excel,并创建第三列,构建您要构建的tsql,然后剪切/粘贴并在ssms中执行。
  5. 重复步骤4,但对于所有列。最好查询sys.columns以获取所需的所有对象,放入excel并构建tsql
  6. 再次重复所需的任何其他对象。
  7. Backip / restore比SSIS和数据传输更快。

答案 1 :(得分:-2)

他们可以查看数据,但他们无法查看列名称?那有什么可能实现的呢?通过不泄露表名或列名,你有什么保护?数据科学家如何在没有上下文的情况下评估数据?没有FK,我看到的是名为colx的列上的一堆数字。期待完成什么?获得保密协议。考虑FK列customerID与materialID。模式具有广泛不同的含义和分析。我会将质量度量与materialID或shiftID相关联,但不与customerID相关联。

哦看看tableA.colB和tableX.colY之间存在关联。是的,客户是大学团队,他们使用铝蝙蝠。

最重要的是你剥离索引(在2B +行的表上),因此他们运行的分析将会很慢。这取得了什么成果?

至于所述问题,请进行备份恢复。使用系统表删除所有触发器,FK,索引和约束。不要忘记放弃触发器和约束 - 这可能会泄露一些商业秘密。然后重命名列,然后重命名表。