
Ich muss sqlplus
mit dem Oracle-Benutzer sudo eine eindeutig angegebene Datenbank (Umgebungsvariable ORACLE_SID
) mit einem Einzeilenbefehl aufrufen. Die übliche Vorgehensweise besteht aus zwei Schritten:
$ sudo -u oracle -i
$ ORACLE_SID=DBNAME sqlplus / as sysdba
Aber ich muss es in einer Zeile machen (um Zeit zu sparen, zumindest einigermaßen). Ich versuche es ganz einfach so:
$ sudo -u oracle -i ORACLE_SID=DBNAME sqlplus / as sysdba
Aber es scheint, dass sqlplus
die Änderung der Umgebungsvariable nicht erkannt wird ORACLE_SID
und eine Verbindung zur Standarddatenbank hergestellt wird. Außerdem kann ich -i
die Sudo-Option nicht ausschließen, da ich sicher sein muss, dass alle anderen Umgebungsvariablen einwandfrei initialisiert wurden.
Wie kann ich in meinem Fall eine Anwendung mit sudo und benutzerdefinierter Umgebungsvariable ausführen?
Antwort1
Versuchen Sie den folgenden Befehl:
sudo -i su - oracle -c 'ORACLE_SID=DBNAME && sqlplus'
Erläuterung:
"sudo -i" will take care of the environment variables.
"su - user" will consider the user's environment variables
"-c" -> the command you wish to issue.
Antwort2
Die beste Möglichkeit zum Lösen dieses Problems besteht in der Verwendung des folgenden Befehls:
sudo -u oracle -i sh -c "ORACLE_SID=DBNAME sqlplus / as sysdba"
Und wenn wir das SQL-Skript direkt in einer Zeile übergeben möchten:
sudo -u oracle -i sh -c "ORACLE_SID=DBNAME sqlplus / as sysdba" <<-EOF
SELECT 1 FROM DUAL;
EOF