2017-10-18 75 views
0

我已經能夠做到回滾只有架構更改標記,但我遇到了我在存儲過程中混不工作的情況。
我正在對Oracle數據庫使用SQL更改日誌。下面是這種情況:回滾到標籤不工作,如果應用到runOnChange標籤變更集

版本1.0.0
我有一個腳本R-1.0.0.sql包含創建一個表,並創建一個存儲過程的腳本proc.sql。 proc變更集被標記爲runOnChange = true。
我很高興與變化,我與標籤標籤1.0.0
數據庫到底DATABASECHANGELOG表顯示:
1 - R-1.0.0.sql執行的
2 - proc.sql- EXECUTED-(標籤)1.0.0

版本2.0.0
我有一個腳本R-2.0.0是重命名列,我也更新proc.sql與新的列名。運行在此之後,DATABASECHANGELOG是:
1 - R-1.0.0.sql執行的
4 - proc.sql-RERAN-(標籤)1.0.0
3 - R-2.0.0.sql執行的

您注意到重新運行PROC腳本有一個新的號碼,但它仍然保持了1.0.0標籤

如果現在我想回滾到標籤1.0.0,ROLLBACK命令不執行任何操作,因爲標籤1.0.0對應於日誌中的最新更改。

這似乎是設計。有沒有不同的方式來組織我的更改,使其工作?

+0

根據此線程,我應該能夠爲存儲過程指定一個不同的更改日誌表。 http://forum.liquibase.org/topic/configurable-databasechangelog-table-name。我仍在努力研究命令行。 –

回答

0

我找到了一個基於上面鏈接的文章的解決方案。由於在我的環境中的限制,我沒有一個簡單的方法來傳遞Java環境變量。

@echo off 

IF NOT DEFINED JAVA_OPTS set JAVA_OPTS= 
set JAVA_OPTS=-Dliquibase.databaseChangeLogTableName=STOREDPROCCHANGELOG %JAVA_OPTS% 

liquibase %* 

它設置在由Liquibase批處理文件中使用的變量參數,然後調用批處理文件傳:我結束了安裝自定義批處理文件,內容如下(我把它命名爲Liquibase-sp.bat)整個命令行。
在部署期間,我通過調用「liquibase」來應用模式更改,然後通過調用「liquibase-sp」來應用存儲的proc更改。模式更改記錄在默認的DATABASECHANGELOG表中,而proc更改記錄在單獨的STOREDPROCCHANGELOG表中。所有標記完成調用「liquibase」,因此它使用默認表,並且只有模式更改使用版本標記。

回滾工作在我提到的場景。

我希望看到另外一個問題,如果我有任何更改,發佈2.0.0。當我使用2.0.0標記數據庫時,最後一個變更集的標記從1.0.0修改爲2.0.0。這意味着任何回滾標籤1.0.0都會失敗。儘管如此,我並不擔心,但有一些程序上的解決方法。