IANADBA, aber ich schreibe ein Skript, das aktiv wird, solange die Oracle-Standby-Datenbank nicht aktiviert wurde. Was ich suche, sind zwei Abfragen (oder Abfragesätze, falls erforderlich).
1 - Ist die Datenbank gemountet (d. h. hat jemand „Alter Database Mount Standby Database“ ausgeführt)
2 – Wie kann ich feststellen, ob die Datenbank aktiviert ist (z. B. „Datenbank ändern, Standby-Datenbank aktivieren“)?
Wie gesagt, ich bin auf der Suche nach Anfragen, aber wenn es eine Möglichkeit gibt, das im System zu erkennen, bin ich auch dafür offen. Danke!
Aktualisieren
Ich habe den folgenden Vorschlag übernommen (leicht modifiziert, da ich mit Oracle 8i arbeite) und erhalte Folgendes:
SQL> SELECT INSTANCE_NAME, DATABASE_STATUS, INSTANCE_ROLE from v$instance;
INSTANCE_NAME DATABASE_STATUS INSTANCE_ROLE
---------------- ----------------- ------------------
RGR01 ACTIVE PRIMARY_INSTANCE
Derzeit stellt diese Instanz aktiv Archivprotokolle wieder her, ist aber nicht „live“. Ich suche immer noch nach einer Möglichkeit, festzustellen, ob sie nicht als Standby-Datenbank bereitgestellt ist.
Antwort1
Ich habe es!
CONTROLFILE_TYPE von v$database ist der Schlüssel
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
CURRENT
gegen
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
STANDBY
Antwort2
Dies funktioniert für einen physischen Standby, Oracle 10g (und höher)
Wählen Sie open_mode aus v$database;
Wenn der Wert ist:
- ‚MOUNTED‘, Ihre Datenbank ist gemountet.
- „LESEN SCHREIBEN“, dann können Sie davon ausgehen, dass es aktiviert wurde.
- „NUR LESEN“, dann wird es möglicherweise zur Abfrage im Nur-Lese-Modus geöffnet, aber nicht aktiviert.
- „NUR LESEN MIT ANWENDEN“ bei Verwendung von Active Dataguard.
Auf der Primärseite:
select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
Auf dem Slave:
OPEN_MODE
-------------------- --------------------
MOUNTED or READ ONLY WITH APPLY
Es könnte auch andere Werte geben, ich bin nicht sicher.
HTH
Antwort3
Ich kenne die Antwort auf diese Frage nicht wirklich - "Wie kann ich feststellen, ob eine Oracle-Datenbank gemountet und aktiviert ist?", aberIch muss eine Antwort posten, um die Leute wissen zu lassen, dass sie sich bitte nicht von den Antworten dieses Beitrags in die Irre führen lassen sollen, denn die meisten davon sind grob falsch.
Diejenigen, die sagen, dass „v$instance“ verwendet werden soll, liegen absolut falsch, da dadurch festgestellt wird, ob „Instance“ gemountet oder gestartet wird oder aktiv ist oder nicht.Bitte beachten Sie, dass Datenbank und Datenbankinstanz unterschiedliche Dinge sind, also, wenn Sie den Unterschied nicht kennen, dann lesen Sie besser, und lesen Sie auch überOracle RAC und Oracle Data Guard.
Die von Ihnen genannten Verwendungszwecke
select CONTROLFILE_TYPE from v$database;
sind ebenfalls nicht richtig, da gemäßOrakelDiese Spalte enthält Informationen zur Steuerdatei und gibt an, ob die Datenbank im Standby-Modus oder im aktiven Modus ist. Dies ist etwas anderes als die Angabe, ob die Datenbank gemountet ist oder ob sie aktiv ist.
Wie gesagt, ich halte es für sehr wichtig, den Unterschied zwischen Datenbank und Datenbankinstanz zu verstehen und auch zu wissen, was Oracle RAC und Oracle Data Guard ist.
Angenommen, ich habe eine primäre Datenbank und eine weitere Standby-Databguard-Datenbank und beide Datenbanken/Instanzen sind aktiv und einsatzbereit. Sehen Sie jedoch den Unterschied in den folgenden Screenshots:
Primäre Datenbank:
Standby-Data-Guard-Datenbank:
Antwort4
Könnten Sie die Verbindungen zur Datenbank über netstat/lsof überwachen? Vermutlich würden Sie bemerken, dass Clients beginnen, sie zu verwenden.
Möglicherweise können Sie auch das Archivprotokoll für diese Befehle überwachen.