Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Muss eine SQL-Abfrage für zwei Oracle-DBs gleichzeitig im Shell-Skript ausführen und die Daten in separate CSV-Dateien exportieren

Eine bestimmte sqlplus-Sitzung kann jeweils nur eine Verbindung zu einer Datenbank herstellen, sodass Ihre Anforderung „gleichzeitig“ im Wesentlichen ein Nichtstarter ist. Wenn „zur gleichen Zeit“ wirklich „nacheinander, im selben Skript“ bedeutet, dann sind Sie wieder dabei, Ihre Verbindungszeichenfolge zu reparieren. Und dabei haben Sie "mehr Fehler als ein frühes Mets-Spiel" (mit Entschuldigung an alle NY Mets-Fans).

Erstens zeigt Ihr Skript an, dass Ihr sqlplus-Befehl der allererste eigentliche Befehl nach der Angabe Ihres Shell-Prozessors und 'set -x' ist. Dennoch machen Sie intensiven Gebrauch von Umgebungsvariablen als Ersatz für Benutzername, Passwort und Verbindungsname – ohne diese Variablen jemals zu setzen.

Zweitens ist Ihre Verwendung eines '&' in der Befehlszeile sowohl für mich als auch für den Parser völlig verwirrend.

Drittens müssen Sie Ihrem Verweis auf das SQL-Skript ein '@' voranstellen.

Viertens ist Ihre Reihenfolge der Elemente in der Befehlszeile komplett falsch.

Versuchen Sie dies

#!/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