2016-04-27 18 views
0

Liquibase verwenden Ich möchte mehrere Änderungssätze anzuwenden, aber erste ist eine Wiederherstellung-Datenbank-Skript wie folgt:Liquibase von MSSQL-Backup wiederherstellen fehlgeschlagen

<changeSet id="0" author="me" context="test or dev"> 
    <sql > 
     RESTORE DATABASE CleanDB 
     FROM DISK = '\\SomePublic\DevDB.bak' 
     WITH REPLACE; 
    </sql> 
</changeSet> 
<!-- here many changes go --> 

Hinweis CleanDB neue leere vorhandene Datenbank ist. Meine Verbindung url gibt DevDB als Ziel und sieht: url=jdbc:sqlserver://SomePublic;databaseName=CleanDB

Während der Ausführung ich bekommen Fehler habe:

liquibase: RESTORE cannot process database 'CleanDB' because it is in use by this session. It is recommended that the master database be used when performing this operation.

Also meine Frage: wie Liquibase Skript anwenden Datenbank zu löschen, die von einem Backup wiederhergestellt werden soll ?

+0

Sie die Datenbank nicht wiederherstellen können, mit dem Sie verbunden sind. Sie müssen die JDBC-URL ändern, um ** nicht ** den Datenbanknamen –

+0

@a_horse_with_no_name groß, dann, wie Sie Rest der Änderungen auf meine 'CleanDB' zu übernehmen? – Dewfy

+1

Sie könnten versuchen, "USE Master; GO;" als erste Zeile. Nur eine Vermutung. – SteveDonie

Antwort

0

Dank @SteveDonie Kommentar fand ich die Lösung, die auf 4 Stufen stützt:

  • Veröffentlichung Nutzung von CleanDB

    1. Umschalten auf eine andere Datenbank (Master zum Beispiel);

    2. gelten Sicherung CleanDB

    3. Nutzung wiederherstellen und wechseln Sie wieder vom Master zum CleanDB.

    Also das nächste Code funktioniert für mich:

    <sql splitStatements="true"> 
        use master; <!-- switch to master --> 
        <!-- avoid error that CleanDB already in use --> 
        alter database ${databaseName} 
        set single_user with rollback immediate; 
        <!-- apply backup --> 
        RESTORE DATABASE CleanDB 
        FROM DISK = '\\SomePublic\DevDB.bak' 
        WITH REPLACE; 
        <!-- Restore access to database --> 
        alter database ${databaseName} 
        set multi_user; 
        <!-- switch back for further Liquibase operations --> 
        use ${databaseName}; 
    
    </sql> 
    
  • +0

    Ich habe ein ähnliches Problem. Um es zu lösen, muss ich eine "Alter-Datenbank" erstellen. Aber ich bekomme diese Fehlermeldung: 'Migration für Änderungssatz gescheitert ... Fehler SQL: ALTER DATABASE $ {DatenbankName} ...'. Also mein Problem ist: Woher kommt die Eigenschaft 'databaseName'? Muss ich es manuell angeben ('') oder ist es eine "eingebaute" Eigenschaft in liquibase? –

    +0

    @CptS können Sie es über die Befehlszeile von liquebase '-DdatabaseName = YourDBName' angeben – Dewfy