在多个数据库中运行批处理oracle查询

时间:2017-12-05 12:00:13

标签: oracle batch-file oracle-sqldeveloper oracle12c

我在SQL开发人员(oracle)中有4个数据库连接。晚上我必须在同一台服务器上的所有4个连接中定期运行一些脚本。是否有任何快捷方式,我只运行一次脚本,并反映在连接到某个DB的所有连接中。

(注意:所有4个连接都将保留完全相同的信息。)

有人可以建议怎么做吗?

1 个答案:

答案 0 :(得分:0)

以下是我如何做到这一点:使用命令提示功能,而不是GUI。唯一的先决条件是在您的计算机上安装SQL * Plus。

例如,创建您即将运行的SQL脚本并将其保存到C:\ Temp目录中;让它命名为#34; my_script.sql"。它可以包含SQL和PL / SQL(在这种情况下不要忘记用斜杠终止它!)。

以下是它的样子:

connect &2
spool &1
set echo on
set define off

-- Your SQL statements go here:

select to_char(sysdate, 'dd.mm.yyyy hh24:mi') vrijeme from dual;

begin
  pkg_payments.p_gimme_my_money;
  commit;
end;
/

-- End of your SQL statements

spool off
exit

然后创建一个DOS批处理脚本,让它命名为" run_my_script.bat"并把这样的代码放在那里:

@echo on
set SCRIPT=C:\Temp\my_script.sql
set SCRIPT_LOG=C:\Temp\my_script

if not exist %SCRIPT% goto END

start sqlplus.exe /nolog @%SCRIPT% %SCRIPT_LOG%.site_1.log "username_1"/"password_1"@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host_1_name)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=service_name_1)))
start sqlplus.exe /nolog @%SCRIPT% %SCRIPT_LOG%.site_2.log "username_2"/"password_2"@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host_2_name)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=service_name_2)))
start sqlplus.exe /nolog @%SCRIPT% %SCRIPT_LOG%.site_3.log "username_3"/"password_3"@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host_3_name)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=service_name_3)))
start sqlplus.exe /nolog @%SCRIPT% %SCRIPT_LOG%.site_4.log "username_4"/"password_4"@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host_4_name)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=service_name_4)))

:END

如你所见,它

  • 设置局部变量(SCRIPT,它指向.SQL文件 已创建)和SCRIPT_LOG,其中包含有关脚本的日志信息 执行)
  • 调用SQL * Plus(并行;如果您希望它们执行 按顺序,只需删除START关键字),连接到每个数据库 并运行脚本

测试它的最简单方法是双击.BAT文件;它将打开4"黑色"命令提示符窗口并在SQL脚本完成其作业后终止它们。检查LOG文件!

如果您对结果感到满意,请在任务计划程序中安排.BAT文件的执行,以便定期执行这些文件。自动。

这就是全部,我猜想。