2011-10-06 21 views
1

我們有一個網絡應用程序,其中包含來自嵌入式設備的日誌數據的詳細歸檔。我們希望保留這些詳細數據用於內部分析,但這些數據在公共可訪問生產服務器上不需要超過三個月。 Web應用程序僅插入新數據,不會更新或刪除詳細數據。將數據從公共生產服務器歸檔到內部歸檔服務器

因此,我們希望構建一個存檔系統,它定期(例如每天)從生產服務器(包括最近三個月)獲取新數據的副本,然後從生產服務器中刪除所有大於三個月的數據。

不幸的是,有時我們的某些嵌入式設備在一段時間內(幾天到幾周)都處於脫機狀態。在這種情況下,可能會發生這樣的情況,即將新數據添加到系統中以獲得已複製/歸檔時間。

在公共生產服務器上,我們使用SQL Server 2008標準版,在內部存檔系統上,我們希望使用SQL Server 2008 R2企業版從存檔的分區和壓縮中受益。

目前我正在考慮以下方法:從生產到歸檔系統的數據

  1. 日報復制。當生產中的舊數據被刪除時,不應將其複製到歸檔系統。我發現一個選項可以忽略複製目標上的刪除操作。

  2. 如果沒有要求在存檔系統上同時存在當前數據,我會定期將所有超過特定時間的數據移動到存檔系統。但我必須同步當前數據並移動所有舊數據。

    也許我必須使用混合解決方案:用於同步存檔和生產系統之間的當前數據以及將舊數據移動到存檔系統上的存檔表的複製(同時複製當前表中存檔數據的刪除到生產系統)。

你覺得呢?你有一些建議,或知道有關這些問題的一些最佳做法?這個主題是否覆蓋其他地方(例如書籍)?

非常感謝您提前。 PS:我不知道這個問題應該在這裏或在服務器故障時被問到。如果我在這裏發佈的決定是錯誤的,請移動它。謝謝。

回答

1

你可以做的一件事就是讓你的web應用程序同時插入兩個數據庫。這種方式歸檔不依賴於prod數據庫。在所有。

你也可以考慮分割產品。 DB,以便從prod DB中刪除數據更容易。 (但是因爲你的prod數據庫是標準版本,所以這不是一種選擇。)在這種情況下,你可能不得不從prod數據庫中刪除行。要執行刪除操作,請不要在一個事務中執行完整的刪除操作。你可能想分解成批。

最後,在執行刪除操作時密切關注您的tlog增長情況。它可以快速增長。

1

大概有多少表格需要歸檔?

如果只有一個或幾個表,則可以通過SQL Server代理定期運行一些SQL。

像這樣的東西(很簡單):

-- copy to archive database 
insert into ArchiveServer.dbo.ArchiveTable (Column1, Column2, ...) 
select Column1, Column2, ... 
from ProductionTableOnThisServer 
where DateColumn < dateadd(m, -3, getdate()) 

-- delete in production database 
delete from ProductionTableOnThisServer 
where DateColumn < dateadd(m, -3, getdate()) 

爲了讓本示例正常工作,它需要在生產服務器歸檔服務器必須配置爲在一個linked server上運行生產服務器。

當然,這個小例子還遠遠沒有完美(甚至是生產準備!)。
這只是爲了表達基本的想法。

在現實世界中,你可能還需要:

  • 都裹在一起的查詢在交易所以真正的數據不會被刪除,如果歸檔沒有出於某種原因
  • 工作只插入真正新的行並更新那些已經改變的行
  • 等等......