【问题标题】:Clone a SQL Server Database w/ all new Primary Keys使用所有新主键克隆 SQL Server 数据库
【发布时间】:2012-01-26 09:54:50
【问题描述】:

我们需要创建一个自动化流程来克隆小型 SQL Server 数据库,但在目标数据库中,所有主键都应该与源不同(我们对所有主键使用 UNIQUEIDENTIFIER id)。我们有数千个数据库,它们都具有相同的架构,并且需要使用这个“克隆”过程来创建所有非关键数据匹配但保持引用完整性的新数据库。

有没有简单的方法可以做到这一点?

更新 - 示例:

每个数据库都有大约 250 个需要克隆的事务表。考虑以下几个表及其关系的简单示例(每个表都有一个 UniqueIdentifier 主键 = id):

location
doctor
  doctor_location (to doctor.id via doctor_id, to location.id via location_id)
patient
  patient_address (to patient.id via patient_id)
  patient_medical_history (to patient.id via patient_id)
  patient_doctor (to patient.id via patient_id, to doctor.id via doctor_id)
  patient_visit (to patient.id via patient_id)
  patient_payment (to patient.id via patient_id)

我们需要克隆数据库的原因是办公室被买断或所有权变更(由于合作伙伴关系的变化,这种情况发生得比较频繁)。发生这种情况时,办公室的税务和保险信息会发生变化。从法律上讲,这需要一个全新的公司结构,并且办公室之间的财务需要完全分离。

但是,大多数办公室都希望保留所有患者的历史记录,因此他们选择“克隆”数据库。新数据库将删除财务历史,但所有患者/医生数据将被保留。旧数据库将包含“克隆”之前的所有信息。

需要新 GUID 的原因是我们将所有数据库整合到一个关系数据库中以用于报告目的。由于所有事务表都有 GUID,这很好用……除了克隆的情况。

到目前为止,我们唯一的解决方案是将数据库转储到文本文件并搜索和替换 GUID。这非常耗时,所以希望有更好的方法。

【问题讨论】:

  • 你想带什么类型的数据,主要是查找数据?所以你想克隆你的数据库并克隆所有数据,或者只是查找数据?例如,非关键数据是什么意思?
  • 查找数据并不那么重要,因为它总是相同的,我们可以编写脚本(并且它具有固定的整数键)。交易数据是我们主要关心的问题。我会用一个例子来更新 q。

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


【解决方案1】:

我将通过创建数据库的基本还原并将主键中的所有值更新为新的 GUID 来实现这一点。

要使其自动更新所有外键,您需要使用 CASCADE 关键字向数据库添加约束,即

CREATE TABLE Orders
(

    OrderID uniqueidentifier,
    CustomerID uniqueidentifier REFERENCES Customer(CustomerID) ON UPDATE CASCADE,

etc...

现在,当您更新 Customer 表的 CustomerID 时,Order 表的 CustomerID 也会更新。

您可以使用简单的更新查询对整个表执行此操作:

UPDATE TABLE Customer SET CustomerID = NewID();

您需要使用唯一标识符对每个表执行此操作,因为它是主键。

【讨论】:

    【解决方案2】:

    您可以创建一个集成服务 (SSIS) 包来执行此操作。您将在控制流中创建新数据库,然后使用数据流将数据从源复制到目标,这还将替换 GUID 或在此过程中进行其他需要的转换。

    如果数据库有大量表,并且只需要修改其中的几个,那么您最好只制作 MDF/LDF 文件的副本,并使用新的数据库名称重新附加它们,并使用脚本更新 ID。

    使用 SSIS 的优势在于更容易实现完全自动化。缺点是设置起来可能需要更长的时间。

    【讨论】:

      猜你喜欢
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 2015-05-06
      • 1970-01-01
      相关资源
      最近更新 更多