简单的问题。我正在研究一个SQL Server数据库,该数据库在多个办事处之间共享。每个办公室在此数据库中都有自己的架构,因此将数据库划分为逻辑部分。 (加上一个在多个办公室之间共享的模式。)数据库存储在专用服务器上,我们使用单个数据库来简化备份/恢复过程。
然而,问题是会计办公室可能正在修改大量数据,然后秘书办公室犯了一个错误,需要恢复备份。不幸的是,恢复备份意味着会计将丢失最近添加的数据。
因此,替代解决方案是将备份还原到新数据库中,从旧记帐模式中删除数据,并仅从原始数据库顶部的备份中移动数据进行记帐。这是当前的解决方案,而且耗时且容易出错。
那么,有没有办法可以通过代码备份单个模式?然后还可以通过代码恢复该架构?
答案 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...