2011-08-30 61 views
3

雖然爲增量數據庫更新整理遷移腳本,但我發現現有的數據庫差異工具(我研究過的)都不會生成我們的開發所需的遷移腳本處理。用於數據庫差異的C#庫

與幾乎所有其他開發項目一樣,我們需要能夠使生產模式與最新的開發模式保持同步,而不會丟失生產數據。

到目前爲止,該方法是刪除並重新創建不是表的任何對象(注意將序列下一個值更新爲適當的值),然後通過刪除不再存在的列來處理表差異,添加已創建的列,重命名其類型或長度已更改的列,添加新的列定義,然後使用適當的類型轉換使用數據填充已更改的列。

當前的方法是完全自動化的,但沒有考慮只是簡單地重命名的列。對錶格定義(DBMS_METADATA_DIFF)進行擴展並不能提供任何機器可以理解的線索,即列放置後跟列添加實際上是列重命名。對於人來說,列重命名可能是顯而易見的,特別是如果重命名只是語法更正或選擇更合適的名稱。

我試圖通過編寫我自己的數據庫差異腳本生成器並添加邏輯來查找列重命名(支持人爲干預,確認等)來解決此問題。現在,我很確定我必須重新發明另一個輪子。

我應該看看有沒有好的開源庫?我更喜歡C#,但因爲它是我正在使用的Oracle,所以可能會有一些很好的Java實現。任何指針讚賞。

+1

個人我所有的手動更新腳本,我有一個數據庫版本控制系統與存儲過程和腳本模板,所以我總是可以確定哪些腳本已經執行誰和什麼時候。我不喜歡查看自動生成的數據庫模式更新腳本,如SQL比較或其他工具。我喜歡讓團隊中的開發人員只需手工編寫他們在腳本中所做的工作,如更改表格添加列等等......便於查看和維護 –

回答

1

我們使用RedGate SQL Compare和SQL Data Compare API在安裝時在我們的引導數據庫和我們的目標(客戶端)數據庫之間生成差異模式和數據更新腳本。它工作得很好。 RedGate提供了類似的Oracle產品(未使用它,因此您的里程可能會有所不同)

http://www.red-gate.com/products/oracle-development/schema-compare-for-oracle/

PS,我知道它不是開源的,但我認爲你會很難找到像這樣易於使用的庫。