Heim > Artikel > System-Tutorial > Oracle-Parametersatz und Reset-Einstellungen
Tatsächliche Beispiele für das Setzen und Zurücksetzen in der Oracle-Parametereinstellung
Umgebung: Oracle 10.2.0.5 RAC
Anforderungen: Die aq_tm_processes von Knoten 1 müssen auf die Standardeinstellungen zurückgesetzt werden und die Einstellungen von Knoten 2 müssen unverändert bleiben
Hintergrundeinführung:
Sie finden den Parameter aq_tm_processes in der offiziellen Datei 10.2. Sie können sehen, dass der Standardwert dieses Parameters 0 ist. Nennen wir ihn Standard 0.
Dann haben wir tatsächlich herausgefunden, dass die Wirkung dieser Standardeinstellung 0 völlig anders ist als die, wenn man SET manuell auf 0 setzt.
Als ich diese Angelegenheit mit Kollegen kommunizierte, erfuhr ich endlich ein technisches Detail:
In Oracle erspart Ihnen die Verwendung von SET zum Festlegen von Parameterwerten tatsächlich viel Arbeit. Wenn Sie den Standardwert von Oracle wiederherstellen möchten, ist es am effektivsten, den Wert zurückzusetzen, damit alles dem Standarddesign von Oracle folgt.
Wenn Sie sich speziell das aktuelle Szenario ansehen, unterscheidet sich der Parameter aq_tm_processes vollständig vom ursprünglichen Standardwert 0, wenn Sie ihn auf 0 setzen.
Wenn es auf 0 gesetzt ist, werden alle q00-Arbeitsprozesse heruntergefahren und nicht neu gestartet. Wenn es standardmäßig 0 ist, kann der q00-Workerprozess gestartet werden.
Der aktuell erzeugte Parameterinhalt ähnelt diesem, mit globalen Einstellungen und Instanz-1-Einstellungen, wie folgt:
*.aq_tm_processes=1 jy1.aq_tm_processes=0
Wir wissen, dass die Einstellungspriorität für Instanzen hoch ist, was bedeutet, dass diese Einstellung bewirkt, dass der Parameter für Instanz 1 0 und der Parameter für Instanz 2 1 ist.
Das heißt: Instanz 1 kann den q00-Workerprozess nicht starten, aber Instanz 2 kann den q00-Workerprozess starten.
Erstellen Sie eine Testumgebung, um die Produktion zu simulieren:
Setzen Sie zunächst aq_tm_processes auf 1:
alter system set aq_tm_processes = 1 scope=both sid='*'; --create pfile='/tmp/pfile11.ora' from spfile;
Zu diesem Zeitpunkt gibt es folgende Einstellungen in der Parameterdatei:
*.aq_tm_processes=1
Setzen Sie aq_tm_processes von Instanz 1 auf 0
alter system set aq_tm_processes = 0 scope=both sid='jy1'; --create pfile='/tmp/pfile12.ora' from spfile;
Zu diesem Zeitpunkt gibt es folgende Einstellungen in der Parameterdatei:
*.aq_tm_processes=1 jy1.aq_tm_processes=0
An dieser Stelle wird die aktuelle Situation der Produktionsumgebung simuliert. Werfen wir einen Blick auf den tatsächlichen Betriebsablauf:
SQL> SQL> alter system set aq_tm_processes = 1 scope=both sid='*'; System altered. SQL> create pfile='/tmp/pfile11.ora' from spfile; File created. SQL> show parameter aq
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 1 SQL> !ps -ef|grep q00 oracle 1462 27385 0 15:27 pts/1 00:00:00 /bin/bash -c ps -ef|grep q00 oracle 1464 1462 0 15:27 pts/1 00:00:00 grep q00 oracle 26534 1 0 15:08 ? 00:00:00 ora_q002_jy1 oracle 31538 1 0 15:21 ? 00:00:00 ora_q000_jy1
SQL> SQL> alter system set aq_tm_processes = 0 scope=both sid='jy1'; System altered. SQL> create pfile='/tmp/pfile12.ora' from spfile; File created. SQL> show parameter aq
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 0 SQL> !ps -ef|grep q00 oracle 2044 27385 0 15:28 pts/1 00:00:00 /bin/bash -c ps -ef|grep q00 oracle 2046 2044 0 15:28 pts/1 00:00:00 grep q00
SQL>
Sie können sehen, dass der q00-Prozess verschwindet, nachdem er auf 0 gesetzt wurde. Auch wenn die Instanz neu gestartet wird, wird der q00-Prozess nicht mehr gestartet.
Was wir jetzt tun müssen, ist, die aq_tm_processes von Knoten 1 auf die Standardeinstellungen zurückzusetzen, ohne die Einstellungen von Knoten 2 zu ändern.
alter system reset aq_tm_processes scope=spfile sid='jy1'; create pfile='/tmp/pfile13.ora' from spfile;
Überprüfung von Knoten 1 neu starten? Bestätigen Sie, ob die Anforderungen erreicht werden können?
Die spezifischen tatsächlichen Vorgänge sind wie folgt:
SQL> alter system reset aq_tm_processes scope=spfile sid='jy1'; System altered. SQL> create pfile='/tmp/pfile13.ora' from spfile; File created. SQL> show parameter aq
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 0 SQL> !ps -ef|grep q00 oracle 3801 27385 0 15:32 pts/1 00:00:00 /bin/bash -c ps -ef|grep q00 oracle 3803 3801 0 15:32 pts/1 00:00:00 grep q00
SQL> startup force ORACLE instance started. Total System Global Area 599785472 bytes Fixed Size 2098112 bytes Variable Size 301993024 bytes Database Buffers 289406976 bytes Redo Buffers 6287360 bytes Database mounted. Database opened. SQL> show parameter aq
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 1 SQL> !ps -ef|grep q00 oracle 4228 1 0 15:33 ? 00:00:00 ora_q000_jy1 oracle 4232 1 0 15:33 ? 00:00:00 ora_q002_jy1 oracle 5021 27385 0 15:35 pts/1 00:00:00 /bin/bash -c ps -ef|grep q00 oracle 5023 5021 0 15:35 pts/1 00:00:00 grep q00
SQL>
Wie Sie sehen, lautet die Antwort offensichtlich: Nein.
Da dadurch nur die Parameter von Instanz 1 zurückgesetzt werden, es aber zuvor einen globalen Parameter *�� gab, werden Sie feststellen, dass der Parameter aq_tm_processes nach dem Neustart von Instanz 1 1 ist.
Mit anderen Worten: Wenn die Einstellungen für Instanz 1 entfernt werden, werden die Gesamteinstellungen natürlich übernommen.
Auf der oben genannten Grundlage haben wir die Idee, die Anforderungen umzusetzen:
Lassen Sie uns darüber nachdenken. Wenn wir die globalen Parameter zurücksetzen, wirkt sich dies auf die vorherigen Einstellungen von Knoten 2 aus. Auf diese Weise können wir den Wert von Knoten 2 nur separat festlegen und dann die globalen Parameter zurücksetzen.
alter system set aq_tm_processes = 1 scope=both sid='jy2'; --create pfile='/tmp/pfile14.ora' from spfile; alter system reset aq_tm_processes scope=spfile sid='*'; --create pfile='/tmp/pfile15.ora' from spfile;
Überprüfung von Knoten 1 neu starten? ? Bestätigen Sie, ob die Anforderungen erreicht werden können?
Die spezifischen tatsächlichen Vorgänge sind wie folgt:
SQL> alter system set aq_tm_processes = 1 scope=both sid='jy2'; System altered. SQL> create pfile='/tmp/pfile14.ora' from spfile; File created. SQL> alter system reset aq_tm_processes scope=spfile sid='*'; System altered. SQL> create pfile='/tmp/pfile15.ora' from spfile; File created. SQL> startup force ORACLE instance started.
Total System Global Area 599785472 bytes Fixed Size 2098112 bytes Variable Size 301993024 bytes Database Buffers 289406976 bytes Redo Buffers 6287360 bytes Database mounted. Database opened.
SQL> show parameter aq NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 0 SQL> !ps -ef|grep q00 oracle 7446 1 1 15:40 ? 00:00:00 ora_q000_jy1 oracle 7448 1 0 15:40 ? 00:00:00 ora_q001_jy1 oracle 7450 1 0 15:40 ? 00:00:00 ora_q002_jy1 oracle 7452 1 0 15:40 ? 00:00:00 ora_q003_jy1 oracle 7480 27385 0 15:41 pts/1 00:00:00 /bin/bash -c ps -ef|grep q00 oracle 7482 7480 0 15:41 pts/1 00:00:00 grep q00 SQL>
Es ist ersichtlich, dass die durch den realen Betriebstest verifizierte Antwort mit der Erwartung übereinstimmt: Ja.
Hinweis: Alle Schritte zum Erstellen einer P-Datei können entfernt werden. Damals habe ich diesen Vorgang nach jedem Schritt hinzugefügt, weil ich bestätigen wollte, ob die Theorie richtig war.
Zusammenfassend lässt sich sagen, dass in der tatsächlichen Kundenumgebung die folgenden drei Schritte unternommen werden sollten, um die Anforderungen zu erfüllen:
--保障节点2的设置不变 alter system set aq_tm_processes=1 scope=spfile sid='jy2'; --reset节点1的设置 alter system reset aq_tm_processes scope=spfile sid='jy1'; --reset全局的设置 alter system reset aq_tm_processes scope=spfile sid='*';
Zusammenfassung der Wissenspunkte in diesem Artikel: Tatsächlich müssen Sie nur die folgenden 3 Wissenspunkte verstehen:
Der Reset-Vorgang entfernt eigentlich nur diesen Wert aus der SP-Datei;
Einstellungen für eine bestimmte Instanzebene haben eine höhere Priorität als Gesamteinstellungen;
Beachten Sie, dass Oracle für SET-Parameterwerte tatsächlich viel weniger tut. Ein einfaches Verständnis ist, dass sich der Standardwert 0 von der Einstellung 0 unterscheidet.
Das obige ist der detaillierte Inhalt vonOracle-Parametersatz und Reset-Einstellungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!