如何在厨师食谱中 运行 一批 sql 文件

How to run a batch of sql files in a chef recipe

我需要 运行 一些 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] ran successfully"。 但是脚本还没有运行。

在任务管理器中,sqlplus.exe是运行ning。似乎是挂起而不是执行。

有人可以给我一个工作建议,让 运行 多个 SQL 文件按顺序排列而不相互重叠吗?

谢谢

我找到了一种方法来简化需求并执行一批脚本。 我创建了一个批处理文件并在其中添加了 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;

确保'exit'执行后程序会挂起。