使用匿名数据

时间:2016-08-05 08:51:36

标签: sql-server tsql sql-server-2008-r2

我们有一个正在迁移到新环境的生产数据库,当项目处于开发阶段时,客户需要某些列中的数据和某些表是匿名的。

供应商提供了一个替换数据的脚本 - 例如:

UPDATE ThisTable SET Description = 'Anonymised ' + TableKey

现在的问题是,有几个表有数百万行。最大的是284,000,000行。

当然,由于Locks,TempDb和行版本,日志文件等等,上述语句对于这样的表永远不会起作用。

我有一个我之前使用的脚本,其实质上是以下内容:

我如何做的当前版本:
1.创建源表PK的临时表(并在PK上创建索引) 2.从临时表中选择前n个PK并处理源表中的相应行 3.从临时表中删除前n个PK 4.从第2步开始重复

这很有效 - 它提供了合理的性能(并且有一些指标可以预测结束时间)。但是,在大表上运行它可以预测4天的运行时间!

我采取的其他措施是将数据库置于简单恢复模式。

我们拥有对服务器的独占访问权限,可以做我们想要的事情'用它。

核心问题是我们正在谈论大量的行。一个想法是BCP OUT到文本文件,离线处理和BCP。但是,我们仍然处理一个284,000,000行的文本文件!

ASK:
那么 - 关于如何实现上述目标的任何其他想法?我错过了一个简单的'这样做的方法?

1 个答案:

答案 0 :(得分:0)

步骤1使用名称(表名+ temp

)创建相同的表结构

步骤2现在从selectname tablename中插入tablename + temp。

即插入tablenametemp        从表名中选择colunns'Annonymised'+ TableKey作为描述。

步骤3将tablename重命名为tablename1,将tablename + temp重命名为tablename

步骤4删除tablename1(验证后)

请注意,如果你有约束创建,也要重命名它们。