2016-04-01 19 views
0

SQL Server için Liquibase'i kullanmaya çalışıyoruz ve Contexts and Labels ile ilgili bir sorunuz var. Dev, TST ve Prod ortamlarımıza dağıtım yaparken, spesifik olarak spesifik olan sql sunucu eşanlamlılarını ve bağlantılı sunucuları kullanırız. Örneğin, TST'ye dağıtıldığında Bağlantılı Sunucu ve Eşanlamlı SERVER_A'ya işaret edecek, ancak Prod SERVER_B'ye işaret etmelidir. Liquibase'in yayın süresinde hangi yere dağıttığımıza bağlı olarak doğru SERVER değerinde otomatik olarak değişmesi için bir yol var mı?Çevreye özgü SQL Bağlantılı Sunucu ve Eşanlamlılar tanımları

cevap

0

Bunu desteklemek için kullanılan Liquibase özellikleri labels, contexts ve changelog parameters'dur. Bu örnek değil tamamen doğrudur bu yüzden,

<databaseChangeLog 
     xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" 
     xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd 
     http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> 

    <property name="linked.server" value="SERVER_A" context="TST"/> 
    <property name="linked.server" value="SERVER_B" context="Prod"/> 

    <changeSet id="1" author="Brian"> 
     <sql>CREATE LINKED SERVER STATEMENT SO LINKED SERVER IS ${linked.server}</sql> 
    </changeSet> 
</databaseChangeLog> 

Ne istediğini oluşturmak için SQL Server sözdizimi bilmiyorum ama ana şey kullanabilirsiniz olmasıdır: Eğer değişmek böyle bir şey olabilir oradaki değişken referansı ${linked.server}. SQL Server Eşanlamlı veya Bağlantılı Sunucular için yerleşik bir Liquibase refactoring yok, bu yüzden <sql> etiketini kullanabilir veya yeni bir <synonym> ve/veya <linkedServer> etiketini uygulayan kendi Liquibase uzantınızı yazabilirsiniz.

Eğer argüman

--context=TST veya

--context=Prod ve uygun değeri sübstitüe edilmiş olur kaynağı olacaktır liquibase update çalıştırmak

.