我需要获取当前数据库的“快照”并将其克隆到同一个数据库中,并使用新的主键。
有问题的模式由大约 10 个表组成,但其中一些表可能包含需要复制的数十万到 100 万条记录。
我在这里有什么选择?
恐怕编写 SPROC 将需要在整个操作期间锁定有问题的数据库行(用于并发),这对其他用户来说非常烦人。假设我们可以在 sqlserver 允许的最大范围内对其进行优化,这样的操作需要多长时间?执行这么多插入是否需要 30 秒到 1 分钟?我无法锁定整个表并进行批量插入,因为其他帐户下的其他用户正在独立使用相同的表。
根据性能预期,另一种方法是将当前数据库转储到 xml 文件中,然后在后台闲暇时从该 xml 文件异步克隆数据库。这样做的明显优势是数据库仅在执行 xml 转储所需的时间内被锁定,并且插入可以在后台运行。
如果一个优秀的 DBA 可以让“克隆”操作在 10 秒内从头到尾执行,那么 xmldump/webservice 解决方案的复杂性可能不值得。但是,如果这是一个失败的原因,并且插入数百万行可能会及时膨胀,那么我宁愿立即开始使用 xml 方法。
或者也许有一个完全更好的方法?
非常感谢您提供的任何见解。