在多个Oracle DB上执行SQL脚本

时间:2013-12-12 14:34:24

标签: sql oracle

我经常需要在多个不同的Oracle DB上执行同一个SQL脚本(不同的SID,但同一个用户并通过)。到目前为止,我的方法是单独登录并单独执行脚本,但这非常耗时。我检查了使用sqlplus cmd行脚本执行的选项,但我只看到变量登录到单个DB。 你能推荐一个选项,或者可能是SQL开发人员插件吗?

谢谢。

5 个答案:

答案 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
....

一些警告:

  1. 目前它只支持SQL和PL / SQL,而不支持SQL * Plus脚本。但是,如果您的SQL * Plus脚本只是一些简单的语句,您可以轻松地将它们包装在PL / SQL块中。
  2. 此程序是为DBA构建的,可以快速运行数百个数据库的语句。如果你只有少数几个数据库,那可能就不值得了。
  3. 系统建立在数据库链接上,您提到由于操作过程,不允许使用数据库链接。数据库链接本身并不安全,我认为组织禁止它们的唯一原因是因为人们经常滥用它们。我竭尽全力确保Method5不会重复任何相同的错误。它不使用共享密码,它会删除DES密码哈希等。有关更多详细信息,请参阅项目页面上的文件security.md。该信息以及作为“商业现成软件”的程序可能足以帮助您制定安全例外。

答案 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"