chef-infra - 如何在厨师食谱中运行一批 sql 文件
问题描述
我需要在厨师食谱中运行一些 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 文件而不会相互重叠吗?
谢谢
解决方案
我找到了一种简化需求并执行一批脚本的方法。我创建了一个批处理文件并在那里添加了 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;
确保在执行后“退出”,否则程序将挂起。
推荐阅读
- go - 如何在 Go 中制作通用容器?
- css - CSS渐变不透明度在悬停时闪烁
- compression - LZW如何进行编码和解码
- mysql - NodeJS + MySQL 托管(Heroku 除外)
- security - 为什么 google.com 不使用 CSP?
- python - 如何测试导入仅在生产服务器中可用的库的python代码
- python-3.x - 在推送 Twitter 通知上调用代码
- paypal - PayPal:授权一次,多部分捕获
- vba - Word VBA - 格式化和重新链接超链接中的脚注和尾注
- amazon-web-services - 使用 Terraform 在多个 S3 存储桶中创建多个文件夹