2017-07-19 43 views
0

我們一直在每個數據庫中使用單獨的更新日誌。但是現在我遇到了一個問題。我想對兩個數據庫進行更改,其中一個數據庫的腳本只有在另一個腳本完成後才能成功執行。Luquibase如何確保數據庫間的更改順序?

我試圖讓它將兩個更改都放在單個日誌中,但是當運行liquibase時遇到「更改日誌鎖」錯誤。

ps。通過這個腳本刪除數據庫中的鎖並沒有幫助。

UPDATE DATABASECHANGELOGLOCK SET LOCKED=0, LOCKGRANTED=null, LOCKEDBY=null where ID=1; 
+0

請您詳細介紹一下您通常採取的步驟以及您嘗試採取的步驟嗎?我有一個粗略的想法,但你不知道你是如何嘗試去做的。 – CheeseFerret

+0

@ CheeseFerret,我們在同一個ms sql實例上有幾個數據庫。這些數據庫的一些sql包含了幾個對象。所以這次我們應該添加一個視圖到一個視圖,並更新另一個數據庫中的proc,以便它將使用此列。問題是我們應該確保在過程之前更新視圖,以便最後一個可以成功更新。但是,對於每個數據庫的單獨日誌,我不知道如何製作它。 – user3603470

+0

我們在CI配置中確定正在更新數據庫的訂單(通過單獨的更新日誌)。 – user3603470

回答

0

我建議你看看Context

Liquibase中的「上下文」是可以添加到changeSets以控制哪些將在任何特定遷移運行中執行的標記。任何字符串都可以用於上下文名稱,並且它們不區分大小寫。

當您通過任何可用方法運行遷移程序時,可以傳入一組上下文以運行。只有使用傳遞的上下文標記的changeSets纔會運行。

一種可能的解決方案:

  1. 添加db1上下文需要被上第一DB運行的變更,並需要被在所述第二DB運行db2上下文。
  2. 您已將兩個更改都放入單個日誌中。
  3. 現在你只需要運行liquibase兩次。第一次與上下文db1第二次與db2。 (第二次執行可能取決於第一次執行的結果。)