2009-11-24 110 views
0

我們希望有我們的測試服務器從我們的生產服務器數據庫更新每晚的基礎上,以確保我們在最新的數據建立數據庫。然而,我們希望確保我們目前在開發環境中工作的任何fn,sp等不會被備份過程覆蓋。我們想要做的是有一個prebackup程序,用於保存我們開發人員選擇的對象以及一個postbackup程序,在備份過程完成後將它們添加回來。SQL Server 2008中自動備份

我想知道其他開發商都在這樣的情況在做。是否有一種現有的工具可以爲我們做到這一點,它可以每天自動運行,並允許我們設置對象不被覆蓋(不需要系統管理員每天運行它的注意)。

回答

2

在我們的數據庫中的所有對象都保持在代碼 - 表,視圖,觸發器,存儲過程,一切 - 如果我們期望找到它在數據庫中,那麼它應該是在DDL,我們可以運行的代碼。實際的模式更改是版本化的 - 因此數據庫中有一個表格,表示這是模式版本「n」,如果這不是當前版本(根據更新代碼),那麼我們會進行必要的更改。

我們盡力分離出觸發器和視圖 - 不這樣做,雖然我們也許應該,做與SP和FN - 與刪除並重新創建代碼,有效期爲當前架構版本。因此,應該「安全」地刪除和重新創建不是表格的任何東西,儘管如果對象之間存在依賴關係,那麼刪除和創建都會出現排序問題。關於這一點的好處通常是,我們可以自信地將架構從新增到現在,並且有信心模式的任何實例都是一致的。

如果您有能力運行模式更新代碼,包括根據當前定義重新創建所有數據庫對象的代碼,那麼您的問題應該基本消失...備份,恢復,運行模式主線邏輯。這可以帶來進一步的好處,即可以在開發服務器中引入模式(表)更改並保持相同的更新邏輯。

我知道這不是一個完全通用的解決方案。值得注意的是,它可能對每個開發人員的數據庫效果更好(我是一個老式的程序員,所以我將所有問題看作具有基於代碼的解決方案( - :),但作爲一般方法,我認爲它具有相當大的優點,你有一個一致的機制來解決一些問題。