如何进行部分数据库备份和还原?

时间:2010-05-12 06:39:25

标签: sql-server-2005

简单的问题。我正在研究一个SQL Server数据库,该数据库在多个办事处之间共享。每个办公室在此数据库中都有自己的架构,因此将数据库划分为逻辑部分。 (加上一个在多个办公室之间共享的模式。)数据库存储在专用服务器上,我们使用单个数据库来简化备份/恢复过程。

然而,问题是会计办公室可能正在修改大量数据,然后秘书办公室犯了一个错误,需要恢复备份。不幸的是,恢复备份意味着会计将丢失最近添加的数据。

因此,替代解决方案是将备份还原到新数据库中,从旧记帐模式中删除数据,并仅从原始数据库顶部的备份中移动数据进行记帐。这是当前的解决方案,而且耗时且容易出错。

那么,有没有办法可以通过代码备份单个模式?然后还可以通过代码恢复该架构?

3 个答案:

答案 0 :(得分:1)

您可以创建一个脚本,将每个架构复制到一个单独的数据库(backup_Accounting,backup_Secretary,backup_Shared),然后为每个数据库创建一个备份文件。如果您需要进行还原,可以将备份文件还原到相应的数据库中,然后运行脚本将数据复制回主数据库。

答案 1 :(得分:1)

您可以使用文件组和部分备份命令。

您需要将每个架构移动到不同的文件组,然后根据需要使用部分备份/恢复。

有关部分备份的信息,请参阅此处:http://msdn.microsoft.com/en-us/library/ms191539.aspx

有关文件组的信息,请参阅此处:http://msdn.microsoft.com/en-us/library/ms179316.aspx

有关零碎还原的信息,请参阅此处:http://msdn.microsoft.com/en-us/library/ms177425.aspx

答案 2 :(得分:0)

无法仅备份和恢复单个架构。

但是,您可以尝试这种方法:将整个数据库(所有模式)还原到不同的数据库xyz_OLD或类似的东西。

然后,您可以使用以下脚本修复数据:

UPDATE y
    SET col1=o.col1
    FROM xyz.YourTable y
        INNER JOIN xyz_Old.xyz.YourTable o ON y.PK=o.PK

INSERT INTO xyz.YourTable
        (col1, col2, col3,...)
    SELECT
        col1, col2, col3,...
        FROM xyz_Old.xyz.YourTable o
        WHERE NOT EXISTS (SELECT 1 FROM xyz.YourTable y WHERE o.PK=y.Pk)

etc...