Как запустить пакет файлов sql по рецепту шеф-повара - PullRequest
0 голосов
/ 13 сентября 2018

Мне нужно запустить несколько файлов сценариев SQL по рецепту шеф-повара. Когда я выполняю рецепты, используя ресурс batch, как показано ниже, ничего не происходит.

batch 'cdb_scripts' do
    architecture :x86_64
    code <<-EOH    
      C:\\app\\Administrator\\product\\12.2.0\\dbhome_1\\bin\\sqlplus /nolog @C:\\app\\scri\\CreateDB.sql
      C:\\app\\Administrator\\product\\12.2.0\\dbhome_1\\bin\\sqlplus /nolog @C:\\app\\scri\\CreateDBFiles.sql
      C:\\app\\Administrator\\product\\12.2.0\\dbhome_1\\bin\\sqlplus /nolog @C:\\app\\scri\\CreateDBCatalog.sql
    EOH
    not_if {File.exists?('C:\scri\cdb')}
  end

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

Я использовал execute ресурс, как показано ниже:

execute 'test_script_execute' do
  environment ({"ORACLE_SID" => "orclsid"})
  command "C:\\app\\Administrator\\product\\12.2.0\\dbhome_1\\bin\\sqlplus.exe -s sys/Password_123@orclsid as sysdba @C:\\app\\scri\\CreateDB.sql"  
  only_if  {some_guard_condition}
  timeout 1800
end

Это просто журнал "execute [test_script_execute] успешно запущен". Но скрипт не запустился.

В диспетчере задач работает sqlplus.exe. Кажется, висит, а не выполняется.

Может ли кто-нибудь дать мне рабочее предложение запустить несколько файлов SQL в последовательности, не перекрывая друг друга?

Спасибо

1 Ответ

0 голосов
/ 26 сентября 2018

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

Внутри командного файла я положил

ORACLE_HOME\bin\sqlplus /nolog @C:\script_path\myscriptscall.sql

Внутри myscriptscall.sql

set verify off
echo on 
spool C:\logs_path\scriptlogs.log

@C:\script_path\sqlscript1.sql
@C:\script_path\sqlscript2.sql
@C:\script_path\sqlscript3.sql

spool off
exit;

Обязательно «выходите» после выполнения, иначе программа зависнет.

...