我经常需要在多个不同的Oracle DB上执行同一个SQL脚本(不同的SID,但同一个用户并通过)。到目前为止,我的方法是单独登录并单独执行脚本,但这非常耗时。我检查了使用sqlplus cmd行脚本执行的选项,但我只看到变量登录到单个DB。 你能推荐一个选项,或者可能是SQL开发人员插件吗?
谢谢。
答案 0 :(得分:3)
一种选择是通过dblink从一个数据库连接到所有其他数据库并执行命令。
可行性取决于命令的类型,实际上。
或者当然,通常你会使用企业管理器来处理这类事情,但如果你有这样的话,你可能已经想到了它。
答案 1 :(得分:1)
经过与同事的一些商议后,我找到了一个合适的解决方案,我想与大家分享一下:.bat文件:
@echo off
FOR %%A IN (SID1 SID2 SID3) DO sqlplus -S user/pass@SID%%A @QFinfo.sql >> QFinfo.xls append
答案 2 :(得分:0)
这在某种程度上取决于脚本产生的输出,但我肯定会为所有实例上的执行制作某种批处理文件。每次执行都会生成一些日志,它们会合并到一个文件中,然后您可以完全检查结果。特别是如果它只是一项维护任务。
答案 3 :(得分:0)
查看开源程序Method5。 (免责声明:我是该计划的作者。)
它允许您同时对任意数量的数据库运行SQL或PL / SQL。所有工作都在Oracle中完成,因此它适用于SQL Developer或任何其他IDE。
将其安装在一个中央管理数据库上,并将其配置为连接到您的数据库。 (这可能很容易或很痛苦,具体取决于您拥有的数据库数量以及环境的标准化程度。) 然后接受这样的声明:
SQL> select * from dual;
D
-
X
然后像这样运行:
SQL> select * from table(m5('select * from dual'));
DATABASE_NAME D
-------------- -
db1 X
db2 X
db3 X
db4 X
....
一些警告:
答案 4 :(得分:0)
尝试以下简单代码段
#!/bin/bash
cat service_names.txt | while read line
do
sqlplus -s username/password@$line @/u01/scripts/script.sql
done
## DB service names should be kept in different lines in "service_names.txt"