2015-07-20 66 views
-1

我們有一個oracle數據庫,當我們更新表模式(添加,修改列,觸發器等)時,我們遇到了構建和安裝過程中遇到的問題,它並不總是部署到所有實例。SQL在Oracle中創建或替換表

現在我們通過在構建的安裝步驟上添加註釋來運行alter table命令等來處理模式更新。但是,這些總是假定您正在從最後一次構建(即構建3已安裝,並且我們將要4)。如果安裝了1,則可能會有更改腳本從1到2,然後是2到3,然後是3到4.因此,這是一個手動過程的巨大痛苦,我們經常搞砸並錯過了一個祭壇。

有沒有簡單的方法來做一個「創建或替換」在一個表上而不會丟失和丟失數據?基本上我們想要比較當前表與它應該是什麼並更新它。我們不想備份表格,刪除它,創建它,然後恢復它。

+1

查看Liquibase或Flyway等工具 –

回答

1

「從本質上講,我們希望當前的表比較它應該是什麼,並更新」

假設你有,你要用來更新其他情況下的良好來源的版本,你可以蟾蜍的模式比較(您需要DBA管理模塊或Toad Xpert版本),並生成更新單個表,一組表或所有對象列表所需的腳本。

我會說在運行目標實例之前,應該仍然檢查/驗證腳本。一些更改最好以不同的方式處理(例如,重命名列與放置/創建)。所以要小心。

還有一點需要注意的是,其他人可能會提出的是,這個問題在公司的變更管理過程中顯示出明確的漏洞(這是一個比這個問題更大的話題)。

+0

謝謝。我正在爲我們的問題尋找一個有創意的程序化解決方案,但你是對的。問題源於變更管理過程,由於列重命名等原因(可能爲什麼沒有「創建或替換」表),無法實現自動化。我認爲我真正需要的是改變我們的流程,以便'安裝筆記'成爲基本的腳本,然後當我們的開發人員在普通安裝之外的數據庫上運行時發生攻擊。 – mjr