Bis Version 23ai bestanden Fehlermeldungen nur aus dem sogenannten Facility Name, z. B. ORA oder RMAN, dem dazugehörigen Error Code sowie einen mal mehr mal weniger aussagekräftigen Namen des Problems, sodass dies nicht gerade immer hilfreich war. Dieser Umstand hat den DBAs von Hochsicherheitsumgebung ohne Internetzugang bestimmt öfter einige Nerven geraubt. Ein Glück, dass Oracle mit dem neuen Release den Anwendern entgegenkommt.
Bei unbekannten Fehlermeldungen kann der HELP-Befehl neben seinen alten Funktionen jetzt auch helfen. Der Command gibt bei Angabe des Fehlercodes die URL inklusive des Inhalts der entsprechenden Seite im Oracle Help Center aus.
SQL> HELP ORA-01081
Message: "cannot start already-running ORACLE - shut it down first"
Help: docs.oracle.com/error-help/db/ora-01081/
Cause: An attempt was made to start Oracle while it was
already running.
Action: Shut down Oracle first, if you want to restart it.
Folgende Schreibweisen sind ebenfalls gültig:
HELP ORA 01081
HELP 01081
Dieses Feature ist nicht nur mit ORA-Meldungen kompatibel, sondern kann auch für RMAN und weitere Fehlermeldungen genutzt werden.
SQL> HELP RMAN 6026
Message: "some targets not found - aborting restore"
Help: docs.oracle.com/error-help/db/rman-6026/
Cause: Some of the files specified for restore could not be found.
<…>
Wird jedoch der Facility Name ausgelassen, geht der Befehl davon aus, dass es sich um eine ORA-Meldung handelt.
SQL> HELP 06026
Message: "NETASY: port close failure"
Help: docs.oracle.com/error-help/db/ora-06026/
Cause: Async driver unable to close port
<…>
Anderes als HELP dient OERR exklusiv dem Zweck, den Inhalt des Oracle Help Center auszugeben.
SQL> OERR ORA-01081
Message: "cannot start already-running ORACLE - shut it down first"
Help: docs.oracle.com/error-help/db/ora-01081/
<…>
OERR kann ebenfalls mit RMAN und sonstigen Error Meldungen umgehen und lässt folgende Schreibweisen zu:
OERR RMAN 06026
OERR RMAN06026
Bei OERR ist die Angabe des Facility Name zwingend notwendig.
Die Einstellung ERRORDETAILS ermöglicht es den Output bei Fehlermeldungen zu erweitern, wobei ON den Default-Wert darstellt.
Option | Bedeutung |
---|---|
OFF | Output wie in vorherigen Versionen |
ON | Link zum Artikel im „Oracle Help Center“ wird hinzugefügt |
VERBOSE | Link und Inhalt des Artikels wird hinzugefügt |
SQL> show errordetails
errordetails ON
SQL> SELECT * FROM DUMMY;
SELECT * FROM DUMMY
*
ERROR at line 1:
ORA-00942: table or view "SYS"."DUMMY" does not exist
Help: docs.oracle.com/error-help/db/ora-00942/
SQL> set errordetails off
SQL> SELECT * FROM DUMMY;
SELECT * FROM DUMMY
*
ERROR at line 1:
ORA-00942: table or view "SYS"."DUMMY" does not exist
SQL> set errordetails verbose
SQL> SELECT * FROM DUMMY;
SELECT * FROM DUMMY
*
ERROR at line 1:
ORA-00942: table or view "SYS"."DUMMY" does not exist
Help: docs.oracle.com/error-help/db/ora-00942/
Cause: The specified table or view did not exist, or a synonym
pointed to a table or view that did not exist.
<…>
Action: Check each of the following:
- The spelling of the table or view name is correct.
- The referenced table or view name does exist.
- The synonym points to an existing table or view.
<…>
Params: 1) object_name: The table or view name specified as
SCHEMA.OBJECT_NAME, if one is provided.
Otherwise, it is blank.
Um Konflikte mit älterer Software zu vermeiden, ist das Feature mittels der Umgebungsvariable ORA_SUPPRESS_ERROR_URL auf Betriebssystemebene deaktivierbar. Die Umgebungsvariable muss dazu auf den Wert TRUE gesetzt werden.
[oracle@tl017 ~]$ export ORA_SUPPRESS_ERROR_URL=TRUE
[oracle@tl017 ~]$ sqlplus / as sysdba
SQL*Plus: Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems on Wed Oct 23 13:03:10 2024
Version 23.5.0.24.07
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.5.0.24.07
SQL> show errordetails
errordetails ON
SQL> select * from dummy;
select * from dummy
*
ERROR at line 1:
ORA-00942: table or view "SYS"."DUMMY" does not exist
In der Praxis wird diese Funktion wahrscheinlich eher von Oracle "Neulingen" genutzt werden , da der zusätzliche Output alteingesessene Oracle Anwender wohl eher stört.
Die Neuerungen im Bereich Netzwerk sparen dem Nutzer Zeit, da mehr Netzwerk-Informationen abgerufen werden können:
Der Command SHOW CONNECTION NETSERVICENAMES gibt Informationen über die eingetragenen Services aus. Ohne die Angabe eines Servicenamen gibt der Befehl den Pfad zur TNSNAMES.ORA-Datei und sämtliche eingetragene Servicenamen aus.
SQL> SHOW CONNECTION NETSERVICENAMES
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
ORA-HOST-01_INST-01
FREE
LISTENER_FREE
Bei der Übergabe von einem oder mehreren Servicenamen an den Command, werden die dazugehörigen Einträge aufgelistet.
SQL> SHOW CONNECTION NETSERVICENAMES FREE ORA-HOST-01_INST-01
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
FREE = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(HOST = *********)) (CONNECT_DATA = <…>
ORA-HOST-01_INST-01 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = <…>
Der Befehl kann auf SHO CONN NETS gekürzt werden.
Der PING-Command stellt eine in SQL*Plus integrierte Alternative zu TNSPING dar. Die Syntax des PING-Command ist Folgende:
PING [[LISTENER] <TNS-Alias>]
Bei einem Ping ohne Angabe eines TNS-Alias wird die Verbindung auf die Datenbank, an der man bereits angemeldet ist, geprüft.
[oracle@tl017 ~]$ sqlplus sys@ORA-HOST-01_INST-01 as sysdba
<…>
Connected to an idle instance.
SQL> PING
Elapsed: -1622747:-33:-49.-79
Bei einem Ping mit Angabe eines TNS-Alias wird der Alias aufgelöst und der Ping auf dieses Ziel hin geprüft, dabei ist der Status des Listeners relevant.
SQL> PING ORA-HOST-01_INST-01
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
Attempting to contact: (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = *****)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = INST-01)))
Ok (2.258 msec
SQL> PING LISTENER ORA-HOST-01_INST-01
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
Attempting to contact: (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = *****)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = INST-01)))
Der Listener der entsprechenden DB wurde für folgenden Test heruntergefahren.
SQL> startup nomount
<…>
SQL> PING
OK (0.643 ms)
SQL> PING ORA-HOST-01_INST-01
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
Attempting to contact: (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = *****)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = INST-01)))
SP2-1683: Ping nicht erfolgreich, Fehler: TNS-12541.
Hilfe: docs.oracle.com/error-help/db/sp2-1683/
SQL> PING LISTENER ORA-HOST-01_INST-01
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
Attempting to contact: (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = *****)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = INST-01)))
SP2-1683: Ping nicht erfolgreich, Fehler: TNS-12541.
Hilfe: docs.oracle.com/error-help/db/sp2-1683/
Von der Shell des Betriebssystems ist ein Ping mittels des Parameters -p möglich.
[oracle@tl017 ~]$ sqlplus -p ORA-HOST-01_INST-01
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
Attempting to contact: (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = *****)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = INST-01)))
Ok (2.459 msec)
3. SCRIPTING
Für das SCRIPTING beschert Oracle SQL*PLUS den neuen Befehl ARGUMENT, der die Manipulation von fehlenden Skriptparametern erleichtert. Anhand der Position der Skriptparameter kann bestimmt werden, was mit diesen passieren soll, sofern kein Wert beim Skriptaufruf übergeben wird. Für die Parameter können entweder Default-Werte definiert und/oder der Nutzer zur Eingabe eines Wertes aufgefordert werden. Bei Nutzung von Nutzereingaben gilt wie immer in der IT: mögliche Injection Attacken vorab evaluieren.
Der Befehl ARGUMENT stellt folgende Optionen zur Verfügung.
Option | Bedeutung |
---|---|
PROMPT | Aufforderung des Nutzers zu einer Eingabe |
HIDE | Zeigt die eigegebenen Zeichen nicht an |
DEFAULT | Definiert einen Default-Wert |
Sollten die Optionen PROMPT und DEFAULT gemeinsam verwenden werden, greift der Default-Wert nur, wenn weder beim Skriptaufruf noch bei der Eingabeaufforderung ein Wert übergeben wird.
Skript-Beispiel
Im folgenden Skript werden zwei Skript-Parameter ausgegeben, für die der Nutzer Werte hinterlegen muss, sofern er diese beim Skriptaufruf auslässt. Der zweite Parameter wird mit der HIDE-Option gesammelt.
SET VERIFY OFF
ARGUMENT 1 PROMPT 'Enter your first argument: '
ARGUMENT 2 PROMPT 'Enter your second argument: ' HIDE
COL FIRST_ARGUMENT FORMAT A14
COL SECOND_ARGUMENT FORMAT A15
SELECT '&1' AS FIRST_ARGUMENT, '&2' AS SECOND_ARGUMENT;
undefine 1
undefine 2
Die Zeilen haben folgende Bedeutung:
Zeile 1 | Unterdrückt Output zur Initialisierung von Variablen |
Zeile 2-3 | Der thematisierte Befehl |
Zeile 4-5 | Output Formatierung |
Zeile 6 | Der Output |
Zeile 7-8 | Löschen der Variablen |
Das Skript wurde einmal mit und einmal ohne Angabe von Werten beim Aufruf ausgeführt.
SQL> @/home/oracle/sql/test.sql 1 2
FIRST_ARGUMENT SECOND_ARGUMENT
-------------- ---------------
1 2
SQL> @/home/oracle/sql/test.sql
Enter your first argument: A
Enter your second argument:
FIRST_ARGUMENT SECOND_ARGUMENT
-------------- ---------------
A B
Das Skript wird folgendermaßen angepasst:
SET VERIFY OFF
ARGUMENT 1 PROMPT 'Enter your first argument: ' DEFAULT 'A'
ARGUMENT 2 DEFAULT 'B'
COL FIRST_ARGUMENT FORMAT A14
COL SECOND_ARGUMENT FORMAT A15
SELECT '&1' AS FIRST_ARGUMENT, '&2' AS SECOND_ARGUMENT;
undefine 1
undefine
Das Skript wurde einmal mit Werten aufgerufen, beim zweite Mal wurden keine Werte übergeben.
SQL> @/home/oracle/sql/test.sql 1 2
FIRST_ARGUMENT SECOND_ARGUMENT
-------------- ---------------
1 2
SQL> @/home/oracle/sql/test.sql
Enter your first argument:
FIRST_ARGUMENT SECOND_ARGUMENT
-------------- ---------------
A B
Die neuen Funktionen von SQL*Plus in der Oracle Version 23ai sparen den Anwendern einiges an Zeit und sind definitiv einen Blick wert.
In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den
Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.