如何在厨师食谱中 运行 一批 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'执行后程序会挂起。
我需要 运行 一些 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'执行后程序会挂起。