2016-08-04 3 views
1

Я пытаюсь преобразовать наши сценарии создания базы данных Oracle, чтобы использовать Flyway, чтобы упростить распространение базы данных в базе данных. Эти скрипты состоят в основном из команд sql и не требуют почти никаких изменений, так что это нормально. Я использую версию командной строки Flyway (4.0.3) для базы данных Oracle 11.2 Express.Ошибка при использовании «connect sys as sysdba» в миграции FlywayDb

Однако есть один сценарий, с которым у меня возникают проблемы, а именно при создании схем, ролей и предоставлении привилегий этим схемам/ролям.

Вот пример того, как файл SQL миграции выглядит следующим образом:

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; 

Файл, конечно, гораздо больше, но это должно быть достаточно, чтобы дать общее представление о том, как он выглядит.

Так что, когда я бегу пролетный путь миграции на этих команд SQL, которые я получаю следующее сообщение об ошибке:

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

Если удалить Соединим SYS/ПАРОЛЬ @ хе как SYSDBA линии, то я получаю эту ошибку:

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

Я использую пользователя системы Oracle, который настроен в файле конфигурации flyway.conf.

Итак, вопрос в том, можно ли каким-либо образом изменить пользователя на пользователя sysdba в файле sql, или мне нужно создать пользователей/роли схемы и предоставить им права вручную перед запуском команды миграции flyway?

Эта задача будет выполнена только при создании новой базы данных, которая не должна происходить очень часто.

Надеется, что вы можете помочь мне с этим :)

ответ

0

Я не думаю, что вы можете использовать «Connect» -SQL-заявление в миграции пролетного пути, так как это SQL*Plus-Syntax. Что вы могли бы сделать мигрируют первые миграции, которые нуждаются в более привилегированный пользователе через командную строку, прежде чем начать миграцию с помощью конфиг-файл:

параметров
flyway -configFile=path/to/flyway.conf -user="SYS as sysdba" -password=<password> -target=<#ofInitialMigration> migrate 

в командной строке затем переопределяют параметры, указанные в config, и, таким образом, вы можете выполнить свою первую миграцию как SYS. После этого вы можете вернуться к предыдущему пути инициирования миграции пролетного пути, и затем он должен просто пропустить первую миграцию, как это уже применялось ранее. Оба вызова могут быть объединены в shell-скрипт, чтобы минимизировать ручное усилие.

Конечно, это работает только в том случае, если ваша первоначальная миграция действительно является самой первой миграцией. Это может быть не идеально, но я думаю, что лучше, чем предоставлять все вручную заранее.

+0

Благодарю вас за ваш ответ. Однако из-за других проблем в моей работе мне пришлось отправить этот проект в другую команду в другой стране. Так что прямо сейчас у меня нет возможности проверить, может ли ваше решение работать, но я все равно пометю его как решение :) – Elvar