it-swarm.com.de

Oracle Database 12c unter Oracle Linux 7 - Autostart, der die Verbindung als sysdba ermöglicht

Ich habe 12c unter Oracle Linux 7 für meine Entwicklungsarbeit gemäß Dokument Oracle Database Installation Guide 12c Release 1 for Linux (E41491-10) installiert. Meine bisherigen Erfahrungen mit der Verwaltung von Oracle Database sind Version 8 unter Novell Netware und 10gR2 unter Windows x64 an meinem vorherigen Arbeitsplatz. Ich habe nicht zu viel mit Linux gearbeitet, abgesehen von einigen einfachen Diensten unter Ubuntu.

Dieses Mal habe ich mich dafür entschieden, bei der Installation keine Datenbank zu erstellen. Daher musste ich Oracle Database Configuration Assistant ausführen, um dies zu tun, da ich einige Optionen benötigte, die die Standarddatenbank nicht hatte. Ich habe alles nach dem Buch gemacht, aber ich bin auf Problem 1 gestoßen: Oracle_HOME- oder Oracle_BASE-Umgebungsvariablen wurden nach der Erstellung nicht festgelegt. Ich musste .bash_profile bearbeiten um diese einzustellen.

Die Datenbank wurde am Standardspeicherort /home/Oracle/app/Oracle/oradata/<SID> Erstellt. Es wurde mit dem Listener gestartet und konfiguriert. Nach Abschluss der Datenbankerstellung bemerkte ich Problem zwei: Ich kann mit sqlplus/AS SYSDBA keine Verbindung zur Oracle-Instanz herstellen. Mir wird ORA-12162: TNS:net service name is incorrectly specified Angezeigt. Wie in Dokument Oracle Database Error Messages 12c Release 1 (E49325-06) angegeben, habe ich überprüft, ob TNSNAMES.ORA keine Fehler im Verbindungsdeskriptor enthält, dies jedoch nicht. Der vollständige Inhalt dieser Datei ist (KITET ist mein Instanzname):

KITET = 
  (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(Host = ORALINUX7VM)(PORT = 1521))
    (CONNECT_DATA = 
      (SERVER = SHARED)
      (SERVICE_NAME = Kitet)
    )
  )

Ich habe mich nur durch Angabe von sqlplus <user>/<password>@<service_name> Verbunden.

Nach dem Neustart meiner virtuellen Maschine bemerkte ich Problem drei: Listener und Oracle werden nicht automatisch gestartet . Ich kann den Listener mit lsnrctl start Starten, aber die Datenbank nicht starten (keine Verbindung mit / AS SYSDBA Herstellen). Ich dachte, ich könnte eine Verbindung herstellen, indem ich die Verbindungszeichenfolge mit service_name angeben würde, wurde aber mit ORA-12505: TNS:listener does not currently know of SID given in connect descriptor Begrüßt.

Nachdem ich hier und da im Internet nachgesehen hatte, stellte ich fest, dass ich durch das Exportieren von Oracle_SID das Problem "Kann nicht starten" lindern konnte, also tat ich genau das, indem ich ~/.bash_profile (Wieder) bearbeitete.

Was ich noch tun muss

Ich benötige einen automatischen Start des Listeners und der Datenbank beim Booten unter Oracle Linux 7. Natürlich besitze ich ein Dokument Oracle Linux Administrator's Guide for Release 7 (E54669), aber es gibt keine Informationen zum Erstellen von Startskripten für Oracle Database and Listener. Es gibt nur Informationen zum Starten und Stoppen vorhandener Dienste. Natürlich kann ich mich nicht bei jedem Einschalten bei meiner VM Box und den Startdiensten anmelden).

Bitte helfen.

3
Kitet

Basierend auf meinen eigenen Recherchen, den Google-Ergebnissen und der Antwort von ansible konnte ich eine Komplettlösung für Oracle Linux 7 entwickeln. Jedes Mal, wenn Sie Kitet lesen, ist dies meine Oracle Instance SID.

Zum Starten oder Stoppen der Datenbank werden die Skripte dbstart und dbshut verwendet. Sie befinden sich in $Oracle_HOME/bin. Beide benötigen einen Parameter, der $Oracle_HOME Ist. Wenn es keine Umgebungsvariable $Oracle_HOME Gibt, muss sie zuerst (und noch mehr) durch Ausführen festgelegt werden

. /usr/local/bin/oraenv

(Beachten Sie die vorhergehende Periode und es ist nicht $Oracle_HOME/bin/oraenv). Das Oraenv-Skript fragt nach einer SID, die zum Festlegen der korrekten $ Oracle_BASE erforderlich ist. Mit einfach

dbstart $Oracle_HOME

oder

dbshut $Oracle_HOME

startet und stoppt den Listener und die Datenbank.

Um den Listener mit lsnrctl zu starten oder SQL * Plus mit sqlplus / as sysdba Zu starten, muss auch . oraenv Vorher ausgeführt werden, es sei denn, der Benutzer möchte einige Umgebungsvariablen manuell festlegen. Wenn unsere Linux-Box nur eine Instanz hat, besteht die Möglichkeit, die Ausführung von . oraenv Durch Bearbeiten des Bash-Profils des Benutzers zu automatisieren. Eingeben

nano ~/.bash_profile

und geben Sie folgende Zeilen ein (es gibt wahrscheinlich bereits einen Eintrag umask 022 in dieser Datei gemäß Oracle Database Installation Guide 12c Release 1 for Linux E41491-10):

export Oracle_SID=Kitet
export ORAENV_ASK=NO
. /usr/local/bin/oraenv
export NLS_LANG=POLISH_POLAND.AL32UTF8
unicode_start

Zeile eins und drei sind selbsterklärend. In Zeile zwei wird oraenv nicht nach der Datenbank-SID gefragt und die exportierte Variable verwendet. Zeile vier ist optional und legt Ihre Spracheinstellung für Clientverbindungen fest (z. B. spricht SQL * Plus oder lsnrctl in Ihrer Muttersprache, falls verfügbar). Zeile fünf wird für die Konsole benötigt, um Zeichen mit Akzent anzuzeigen, und ist auch optional.

Automatisches Starten und Herunterfahren von Listener und Datenbank

1) Bearbeiten Sie nach dem Erstellen der Instanz die Datei /etc/oratab Und setzen Sie das Neustart-Flag für jede Instanz auf 'Y'. Meine Linie ist wie folgt:

Kitet:/home/Oracle/app/Oracle/product/12.1.0/dbhome_1:Y

2) Erstellen Sie als Nächstes eine Datei mit dem Namen /etc/init.d/dbora Als Root-Benutzer, die Folgendes enthält:

#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $Oracle_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the 
# Oracle database in ORA_HOME.

# path to Oracle home (needed only to check if dbstart exists)
ORA_HOME=/home/Oracle/app/Oracle/product/12.1.0/dbhome_1
# this is the user who installed Oracle
ORA_OWNER=Oracle

if [ ! -f $ORA_HOME/bin/dbstart ]
then
    echo "Oracle startup: cannot start"
    exit
fi

case "$1" in
    'start')
        # Start the Oracle database and listener:
        # Remove "&" if you don't want startup as a background process.
        export Oracle_SID=Kitet
        export ORAENV_ASK=NO
        . /usr/local/bin/oraenv
        # at this point we have $Oracle_HOME env variable set
        su $ORA_OWNER -c "dbstart $Oracle_HOME" &
        touch /var/lock/subsys/dbora
        ;;
    'stop')
        # Stop the Oracle database and listener:
        export Oracle_SID=Kitet
        export ORAENV_ASK=NO
        . /usr/local/bin/oraenv
        su $ORA_OWNER -c "dbshut $Oracle_HOME"
        rm -f /var/lock/subsys/dbora
        ;;
esac

3) Verwenden Sie den Befehl chmod, um die Berechtigungen auf 750 festzulegen:

chmod 750 /etc/init.d/dbora

4) Ordnen Sie den dbora-Dienst den entsprechenden Ausführungsstufen zu und stellen Sie ihn mit dem folgenden Befehl auf Autostart ein:

chkconfig --add dbora

Das ist alles. dbstart und dbshut sollten unter $Oracle_HOME/startup.log und $Oracle_HOME/shutdown.log in ihre jeweiligen Protokolle schreiben. Es gibt auch $Oracle_HOME/listener.log. Dort können wir überprüfen, ob und wie Instanz und Listener gestartet und gestoppt wurden. Wir könnten auch ps -ax | grep ora Oder ps -ax | grep lsnr Verwenden, um zu sehen, ob Listener/Oracle ausgeführt werden.

2
Kitet

So aktiviere ich den Autostart der Oracle-Datenbank für Demonstrationen und Entwicklung


Hier sind die Schritte, die ich verwendet habe, um den Autostart von Oracle Database Enterprise Edition 10g, 11g oder 12c während der Startzeit von Oracle Linux 5 und 6 zu aktivieren. Ich verwende diese Schritte auch mit Oracle Linux 7. Diese Schritte sind nützlich für Demonstrationsarten und Entwicklungs-Setups, die ich normalerweise brauche.

Diese Schritte sind für Oracle XE nicht erforderlich, da bei der Installation gefragt wird, ob die Datenbank automatisch gestartet werden soll, und das System automatisch konfiguriert wird.

Erstellen eines neuen Dienstskripts Erstellen Sie eine Datei /etc/init.d/dbora mit dbora mit Inhalt

 #!/bin/sh -x 
 # 
 # chkconfig: 2345 80 05 
 # Beschreibung: Starten und Beenden von Oracle Database Enterprise Edition unter Oracle Linux 5 und 6 
 # 
 
 # Ändern Sie in/etc/oratab das Autostart-Feld für alle 
 # Datenbanken, die Sie automatisch starten möchten, von N nach Y. 
 # 
 # Erstellen Sie diese Datei als /etc/init.d/dbora und führen Sie Folgendes aus: 
 # Chmod 750 /etc/init.d/dbora[.____.‹# chkconfig --add dbora 
 # Chkconfig dbora on 
 
 # Hinweis: Ändern Sie den Wert von Oracle_HOME, um das richtige Oracle-Ausgangsverzeichnis 
 # für Ihre Installation anzugeben. 
 # Oracle_HOME =/u01/app/Oracle/product/11.1.0/db_1 
 Oracle_HOME =/u01/app/Oracle/product/12.1.0/dbhome_1 
 
 # 
 # Hinweis: Ändern Der Wert von Oracle für den Anmeldenamen des Oracle-Besitzers 
 Oracle = Orakel 
 
 PATH = $ {PATH}: $ Oracle_HOME/bin 
 Host = `Hostname `
 PLATFORM =` uname` 
 Oracle_HOME PATH exportieren 
 
 Fall $ 1 in 
 'Start') 
 Echo -n $ "Oracle wird gestartet:" 
 su $ Oracle -c "$ Oracle_HOME/bin/dbstart $ Oracle_HOME" & 
 ;; 
 'stop') 
 echo -n $ "Oracle herunterfahren:" 
 su $ Oracle -c "$ Oracle_HOME/bin/dbshut $ Oracle_HOME" & 
 ;; 
 'Neustart') 
 echo -n $ "Oracle herunterfahren:" 
 su $ Oracle -c "$ Oracle_HOME/bin/dbshut $ Oracle_HOME" & 
 sleep 5 
 echo -n $ " Starten von Oracle: "
 Su $ Oracle -c" $ Oracle_HOME/bin/dbstart $ Oracle_HOME "& 
 ;; 
 *) 
 Echo" Verwendung: $ 0 { start | stop | restart} "
 exit 
 ;; 
 esac 
 
 exit 

Legen Sie die Berechtigungen für das Skript fest

# chmod 750 /etc/init.d/dbora

Weisen Sie Linux an, den Dienst automatisch zu starten/zu stoppen. Führen Sie unter Oracle Linux 5 und 6 Folgendes aus:

# chkconfig --add dbora
# chkconfig dbora on

Führen Sie unter Oracle Linux 7 Folgendes aus:

# systemctl enable dbora

Bearbeiten von/etc/oratab Ändern Sie in/etc/oratab das Feld für den Autostart für alle Datenbanken, die automatisch gestartet werden sollen, von N in Y.

Starten/Stoppen der Datenbank Die Datenbank wird beim Starten und Herunterfahren der Maschine gestartet und gestoppt.

Oder es kann manuell gesteuert werden mit:

-Auf Oracle Linux 5 und 6 verwenden:

# service dbora start

und

# service dbora stop

- Verwenden Sie unter Oracle Linux 7:

# systemctl start dbora

und

# systemctl stop dbora

Starten von Oracle Database 12c Multitenant-PDBs Um auch alle steckbaren Datenbanken beim Starten der Containerdatenbank zu starten, führen Sie dies in SQL * Plus als SYSDBA aus:

 Trigger sys.after_startup 
 nach dem Start in der Datenbank erstellen oder ersetzen 
 begin 
 sofort ausführen 'steckbare Datenbank alle offen ändern'; 
 end after_startup; 
/

Siehe: Aktivieren des automatischen Starts der Oracle-Datenbank für Demonstrationen und Entwicklung

1
DuongLx-Jack

Verwenden Sie zuerst den Befehl $Oracle_HOME/bin/oraenv? Auf diese Weise werden normalerweise die Umgebungsvariablen Oracle_BASE, Oracle_HOME und Oracle_SID auf einem Linux-System mithilfe der Oracle-Datenbank festgelegt. Wenn Sie unter Linux über die Befehlszeile eine Verbindung zu einer Oracle-Datenbank herstellen, sollte das Ausführen von oraenv normalerweise Ihr erster Schritt sein, da Sie zur Eingabe der SID der Datenbank aufgefordert werden, zu der Sie eine Verbindung herstellen möchten, und die Oracle_ [SID festlegen | HOME | BASE] -Variablen basierend auf dem Eintrag dieser SID in der oratab-Datei (Standardspeicherort ist normalerweise /etc/oratab). Sie müssen das Skript mithilfe der Syntax . oraenv Beschaffen, damit die vom Skript festgelegten Variablen in der aktuellen Shell aktiv bleiben. Für den Benutzer "Oracle" sollte bereits $Oracle_HOME/bin In der Shell festgelegt sein Variable $PATH, Sodass Sie einfach . oraenv Über die Befehlszeile ausführen, die SID für die Datenbank angeben und dann sqlplus / as sysdba Ausgeben können, um sich erfolgreich anzumelden. Für andere Benutzer außer dem Benutzer "Oracle" - nach dem Ausführen des Skripts root.sh Gemäß den Anweisungen der OUI während der Softwareinstallation wird das Skript oraenv nach /usr/local/bin/ Kopiert, sodass andere Benutzer können auf oraenv zugreifen, um auch die Oracle-Umgebungsvariablen festzulegen.

Wenn Sie die Datei oratab richtig konfigurieren und . oraenv Aufrufen, sollten Sie Ihre Probleme lösen, wenn Sie sich bei der Datenbank anmelden und diese starten können (unabhängig vom Listener).

Zweitens gibt es auch ein Skript namens $Oracle_HOME/bin/dbstart (Und seinen Begleiter dbshut), das den TNS-Listener und alle Datenbanken in der Datei oratab mit dem Wert "automatisch startet. Y "für diese Datenbank-SID. Sie können und sollten diese beiden Skripts verwenden, um Ihre Oracle-Datenbanken automatisch zu starten und herunterzufahren. Es ist besonders wichtig, alle offenen Datenbanken sauber herunterzufahren, bevor Sie den VM oder Server) ausschalten/herunterfahren/neu starten.

Um den TNS-Listener und die Oracle-Datenbanken beim Systemstart automatisch zu starten, können Sie ein einfaches Bash-Skript schreiben, um dbstart für Sie aufzurufen. Dies beinhaltet normalerweise das Platzieren des Skripts im Ordner /etc/init.d/. Weitere Informationen zum Schreiben eines Skripts für verschiedene Linux-Distributionen, die beim Start ausgeführt werden, wurden an anderer Stelle in SE ausführlich beantwortet ( https://unix.stackexchange.com/questions/7793/bash-script-on-startup) -linux ). TLDP hat auch ein gutes Beispiel mit direkten Verweisen auf die Oracle-Datenbank (unter Verwendung von dbstart und dbshut) - http://www.tldp.org/HOWTO/Oracle-7- HOWTO-6.html . Dies verweist auf eine ältere Version der Oracle-Datenbank mit RHEL 5.0, sollte jedoch für Ihr System weiterhin relevant sein.

0
ansible