2016-08-04 47 views
1

Ich versuche, unsere Oracle-Datenbankerstellungsskripts so zu konvertieren, dass Flyway verwendet wird, sodass die verteilte Entwicklung auf der Datenbank einfacher wird. Diese Skripte bestehen hauptsächlich aus SQL-Befehlen und erfordern fast keine Änderung, so dass es in Ordnung ist. Ich verwende die Kommandozeilenversion von Flyway (4.0.3) gegen eine Oracle 11.2 Express Datenbank.Fehler bei der Verwendung von "connect sys as sysdba" in der Migration von FlywayDb

Allerdings gibt es ein Skript, mit dem ich einige Probleme habe, nämlich beim Erstellen der Schemas, der Rollen und Gewähren von Berechtigungen für diese Schemas/Rollen. Hier

ist ein Beispiel, wie die SQL-Migration-Datei wie folgt aussieht:

alter user SAMPLEDB identified by ${schemaPassword}; 
alter user LOCDB identified by ${schemaPassword}; 
grant create session,create view,resource to SAMPLEDB; 
grant create session,create view,resource to LOCDB; 

connect sys/[email protected] as sysdba; 

grant EXECUTE ON SYS.DBMS_PIPE to SAMPLEDB; 

Die Datei ist natürlich viel größer, aber dies sollte ausreichen, um die allgemeine Vorstellung zu geben, wie es aussieht.

Also, wenn ich flyway laufen wandern auf diesen SQL-Befehle, die ich die folgende Fehlermeldung erhalten:

SQL State : 42000 
Error Code : 900 
Message : ORA-00900: invalid SQL statement 
Statement : connect sys/[email protected] as sysdba 

Wenn ich das connect sys/password @ xe als sysdba Linie entfernen dann habe ich diesen Fehler:

SQL State : 42000 
Error Code : 1031 
Message : ORA-01031: insufficient privileges 
Statement : grant EXECUTE ON SYS.DBMS_PIPE to SAMPLEDB 

Ich verwende den Oracle "System" -Benutzer, der in der Konfigurationsdatei "flyway.conf" konfiguriert ist.

Also die Frage ist, kann ich irgendwie den Benutzer zu dem Benutzer sysdba in der SQL-Datei ändern, oder sollte ich die Schema-Benutzer/Rollen erstellen und ihnen Berechtigungen manuell gewähren, bevor Sie den Befehl flyway migrieren?

Diese Aufgabe wird nur ausgeführt, wenn eine neue Datenbank erstellt wird, die nicht oft vorkommen sollte.

Hoffe ihr könnt mir helfen mit diesem

Antwort

0

:) Ich glaube nicht, dass Sie eine „connect“ -SQL-Statement in einer Flyway Migration verwenden können, da dies SQL*Plus-Syntax ist. Was Sie tun können, um die ersten Migrationen Migration, die einen privilegierten Benutzer über die Kommandozeile benötigen, bevor Sie die Migration mit der config-Datei starten:

flyway -configFile=path/to/flyway.conf -user="SYS as sysdba" -password=<password> -target=<#ofInitialMigration> migrate 

Die Kommandozeilenparameter dann die Parameter außer Kraft setzen in dem angegebenen würde Konfigurationsdatei und somit könnten Sie Ihre erste Migration als SYS ausführen. Danach können Sie wieder zu Ihrer vorherigen Methode zurückkehren, die Migrationsroutine zu initiieren. Die erste Migration sollte dann einfach übersprungen werden, da sie bereits zuvor angewendet wurde. Beide Aufrufe können in einem Shell-Skript kombiniert werden, um den manuellen Aufwand zu minimieren.

Natürlich funktioniert das nur, wenn Ihre erste Migration wirklich die allerersten Migrationen ist. Es ist vielleicht nicht ideal, aber ich denke, es ist besser, als alles manuell zu genehmigen.

+0

Ich danke Ihnen für Ihre Antwort. Aufgrund anderer Probleme in meiner Arbeit musste ich dieses Projekt an ein anderes Team in einem anderen Land liefern. Im Moment habe ich keine Möglichkeit zu testen, ob Ihre Lösung funktioniert, aber ich werde sie trotzdem als Lösung markieren :) – Elvar