2010-05-12 37 views
1

簡單的問題。我正在研究幾個辦公室之間共享的單個SQL Server數據庫。每個辦公室在這個數據庫中都有自己的模式,因此將數據庫分爲邏輯塊。 (另外還有一個在多個辦公室之間共享的架構)。數據庫存儲在專用服務器上,我們使用單個數據庫來保持備份/恢復過程的輕鬆。如何做部分數據庫備份和恢復?

然而,問題在於會計部門可能會修改大量數據,然後祕書處犯了一個錯誤,要求恢復備份。不幸的是,恢復備份意味着會計將失去他們最近添加的數據。

因此,替代解決方案是將備份恢復到新數據庫中,從舊會計模式中刪除數據並將數據從備份移到原始數據庫。這是目前的解決方案,既費時又容易出錯。

那麼,有沒有辦法備份單個模式,可能通過代碼?然後,還可以通過代碼恢復該架構?

+1

你有那間去任何FKS模式? – 2010-05-12 14:59:27

+0

沒有。每個模式都是一個獨立的實體。所有辦公室都有一個共享模式,但主要是通用數據,任何辦公室都可以在需要時複製到自己的模式。 (基本上,它只是一個默認值的集合。) – 2010-05-13 11:00:40

回答

1

你可以創建一個腳本,每個模式的複製到一個單獨的數據庫(backup_Accounting,backup_Secretary,backup_Shared),然後創建一個備份每個這些數據庫的文件。如果您需要執行恢復,則可以將備份文件恢復到適當的數據庫中,然後運行腳本將數據複製回主DB。

+0

這就是我的想法。但是如何創建一個腳本來備份和恢復單個模式中每個表的所有數據? (不需要列出其中的所有表格)。 – 2010-05-13 11:26:19

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... 
+0

這不起作用,因爲數據也將被刪除。我所知道的唯一可行的建議是將所有表中的數據集中在一個模式中,然後將它們從備份數據庫移至模式。雖然可能,但聽起來很可怕...... – 2010-05-13 11:02:33

+0

這適用於刪除,我只是沒有寫DELETE,你從本地表中刪除舊的不存在。 – 2010-05-13 11:37:37

1

您可以使用filegroups和partial backup命令。

您需要將每個模式移動到不同的文件組,然後根據需要使用部分備份/恢復。

在這裏看到的部分備份信息: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

+0

有趣的建議。不幸的是,我們選擇將所有內容合併到單個數據庫中,以避免擁有大量數據庫文件。另外,如何讓SQL Server清楚哪個模式需要放在哪個文件中?它是否會將同一個文件中的所有表中的所有數據保存在該模式中? – 2010-05-13 11:13:54

+1

我不認爲有任何方法來自動化架構和文件組之間的關係。在創建CREATE TABLE語句時(通過ON子句)定義創建表的文件組。如果許多人可以創建表,那麼強制執行模式/文件組關係可能難以執行。但是,您可能可以使用DDL觸發器來執行關係。請參閱http://msdn.microsoft.com/en-us/library/ms190989(v=SQL.100).aspx(這些也可在SQL2005中使用)。 – 2010-05-13 11:30:51