Teil 6: Von Oracle ausgelieferte Datenbank Benutzer
Abhängig von den installierten Optionen und Features gibt es innerhalb der Oracle Datenbank eine gewisse Anzahl von Benutzern, die Oracle mitbringt. Oft würde man gerne wissen, welche Benutzer dies sind um diese explizit auszuschließen. Abhängig von der Oracle Release gibt es dafür Möglichkeiten:
Alle Oracle Datenbank Editionen
Folgende Abfrage geht zumindest ab Oracle 9i.
SELECT OWNER
FROM DBA_LOGSTDBY_SKIP
WHERE STATEMENT_OPT = 'INTERNAL SCHEMA'
UNION ALL
SELECT username
FROM DBA_USERS
WHERE username like 'APEX%';
Ab Oracle 12c gibt es einen einfacheren Weg
Ab Oracle 12c liefert Oracle die Information selbst.
SELECT username
FROM DBA_USERS
WHERE ORACLE_MAINTAINED = 'Y';
Nutzung für Monitoring
Damit kann man die Oracle Benutzeraccounts jetzt einfach und effizient beim Monitoring ausschließen - beispielsweise, wenn man den Platzverbrauch der Applikation(en) in einer Datenbank überwachen möchte.
Das Beispiel zeigt eine Query, die die Oracle Benutzeraccounts zuerst in einer WITH Clause abholt - das ist nicht zwingend nötig, macht die Abfrage aber leichter lesbar (und potentiell auch schneller).
WITH orauser as (SELECT username FROM DBA_USERS WHERE ORACLE_MAINTAINED = 'Y')
SELECT owner as "DB Schema", trunc(sum(bytes)/1024/1024/1024,3) as "GB used"
FROM DBA_SEGMENTS
WHERE owner not in (SELECT username FROM orauser)
GROUP BY owner;