ich einen Bash-Skript, das auf einmal mehr laufenden Instanzen ermöglicht. Es gibt jedoch eine sqlplus-Verbindung zu einer Oracle-Datenbank, um einen Wert abzurufen. Wenn dieser Wert von mehreren Bash-Skript-Instanzen gleichzeitig abgerufen wird, können sie denselben Wert abrufen, da die zweite Instanz bereits während der Verarbeitung der ersten Instanz die 'alten Daten' überprüft.Bash Linux Kraft mehr Instanzen für die Ausführung von sqlplus Befehl warten zu beenden
Ich kann nur von zwei Option denken, die durch eine PIDFILE die Funktion blockiert. Nachteil ist, dass wenn der Benutzer den Vorgang abbricht, bevor das Pidfile entfernt wird, wird es Probleme verursachen. Ein anderes ist das Sperren des gesamten Skripts basierend auf dem Deklarieren von maximalen Prozessen, die mit gezählt werden. Dies würde jedoch das gesamte Skript und nicht nur den Datenbankbereich sperren.
Also gibt es vielleicht eine andere Option? Ist diese sqlplus-Verbindung zur Datenbank irgendwie zu erfassen, so kann ich die mehreren laufenden Instanzen in Pause setzen, während diese Funktion von einer der Instanzen ausgeführt wird?
dieses Gut, dass mein Skript nicht haha jeden einfacher. Ziemlich viel umständlich im Vergleich zum Sperren des gesamten Skripts, aber ich denke, es funktioniert. Ich werde etwas Zeit brauchen, um all das zu testen und mein Skript anzupassen. Es gibt also nur eine andere Option, die ich danach gelernt habe (die ich aber auch noch nicht versucht habe); ist ein Schema-Benutzer, der nur 1 Verbindung erlaubt. Wie auch immer, danke für Ihren Code, Zeit und Mühe! :) –
@IvanM Ich höre dich! Ich habe mich mehr auf die Möglichkeit konzentriert, einen Teil des Skripts zu sperren, da mir anfangs nicht klar war, dass Sie versuchen, genau eine Verbindung mit der Datenbank zu sperren. Es gibt viele Unbekannte an meinem Ende, aber ein paar Gedanken .., beeinflusst der Parameter SESSIONS_PER_USER Lesevorgänge? Wenn Sie versuchen, das Lesen vollständig einzuschränken; Abhängig von den Leistungsanforderungen können Sie 'lsof -t/path/to/db.sql' verwenden, um den physischen Zugriff auf die Datei zu erkennen. – hmedia1
@IvanM Wie für den Abbruch der Operation .. um die Situation "Benutzer abbrechen" zu verringern, können Sie die Sperrdatei im Abschnitt cleanup() entfernen/überprüfen/bereinigen. Es ist Templates, um eine Strg + C abzufangen, aber Sie könnten jedes Ereignis zuweisen, das vom Endbenutzer stammt. – hmedia1