我有file1.sh文件,它需要在内部同时对两个Oracle dbs执行一个sql查询,并且需要将日期导出到csv文件,下面是对两个DBs执行查询的示例外壳脚本。
....
#!bin/bash
set -X
sqlplus -S ${user1}@${DBCONNECTIONNAME_1}/${Pwd} Datesquery.sql & >> ${Targetdirectory}/csvfile1.csv
sqlplus -S ${user1}@${DBCONNECTIONNAME_2}/${Pwd} Datesquery.sql & >> ${Targetdirectory}/csvfile2.csv
sed 1d csvfile2.csv > file2noheader.csv
cat csvfile1.csv file2noheader.csv > ${Targetdirectory}/Expod.csv
....但是它没有连接到DB,也不执行任何查询,只是简单地显示sqlplus手册如何使用连接字符串,请让我知道如何对两个数据库调用一个查询,并在parrallay中执行它们,并将输出绑定到单独的csv文件。
发布于 2020-07-28 22:44:10
给定的sqlplus会话一次只能连接到一个数据库,因此您的“同时”需求本质上是不可能实现的。如果“在同一时间”真的意味着“在相同的脚本中按顺序”,那么你又回到了修复你的连接字符串。在这一点上,你“比大都会早期的比赛有更多的错误”(向所有纽约大都会的球迷道歉)。
首先,脚本指出sqlplus命令是指定shell处理器和'set -x‘之后的第一个实际命令。然而,您大量使用环境变量来替代用户名、密码和连接名称,而没有设置这些变量。
其次,您在命令行中使用'&‘完全使我和解析器感到困惑。
第三,您需要在引用sql脚本之前加上“@”。
第四,命令行中元素的顺序都是错误的。
尝尝这个
#!/bin/bash
orauser1=<supply user name here>
orapw2=<supply password here>
oradb_1=<supply connection name of first database>
#
orauser1=<supply user name here>
orapw2=<supply password here>
oradb_1=<supply connection name of first database>
#
Targetdirectory=<supply value here>
#
sqlplus -S ${orauser1}/${orapw1}@${oradb_1} @Datesquery.sql >> ${Targetdirectory}/csvfile1.csv
sqlplus -S ${orauser2}/${orapw2}@${oradb_1} @Datesquery.sql >> ${Targetdirectory}/csvfile2.csv发布于 2020-07-30 05:55:05
或者创建一个从一个数据库到另一个数据库的数据库链接,然后在一个数据库中运行两个sqls,一个通过数据库链接。
select * from tab1 union select * from tab1@db_link
https://stackoverflow.com/questions/63135837
复制相似问题