Monitoring in Multitenant Datenbank Umgebungen

oder wie sieht man in CDB-Views nicht nur die Informationen aus der CDB$ROOT?

Für Monitoring in Multitenant Datenbanken Umgebungen ist es sinnvoll, wenn man den Monitoring Benutzer in der CDB$ROOT als Common User anlegt, und dort alle nötigen Berechtigungen auf V$ und CDB Views vergibt. Allerdings gibt es dabei ein kleines Problem.

Fangen wir einmal damit an, dass wir einen Common User in der CDB$ROOT anlegen, der nur in dieser (und nicht auch in den Containern) nutzbar sein soll:

connect / as sysdba
create user c##user identified by oracle;
grant create session to c##user;
grant select on cdb_data_files to c##user;

Damit kann sich c##user lediglich auf der CDB$ROOT anmelden und in der View CDB_DATA_FILES lesen gehen. Probieren wir das einmal aus:

connect c##user/oracle;
select con_id, substr(file_name,1,50) as name from cdb_data_files;

    CON_ID NAME
---------- --------------------------------------------------
         1 /u01/app/oracle/oradata/DB19EE/system01.dbf
         1 /u01/app/oracle/oradata/DB19EE/sysaux01.dbf
         1 /u01/app/oracle/oradata/DB19EE/undotbs01.dbf
         1 /u01/app/oracle/oradata/DB19EE/users01.dbf

Leider sind das nur die Informationen der CDB$ROOT. Beim Monitoring, wollen wir natürlich auch die Informationen aus den Pluggable Datenbanken auslegen können.

Der Trick ist, dass man dem Benutzer noch erlauben muss, die Informationen aus den PDBs ebenfalls sehen zu dürfen. Das geht entweder für alle PDBs:

connect / as sysdba
ALTER USER c##user SET CONTAINER_DATA=ALL CONTAINER=CURRENT;

oder nur für bestimmte PDBs:

ALTER USER c##user SET CONTAINER_DATA=(PDB1, PDB17, PDB23) CONTAINER=CURRENT;

Meldet man sich jetzt wieder an, sieht man auch die entsprechenden Informationen aus den PDBs:

connect c##user/oracle;
select con_id, substr(file_name,1,50) as name from cdb_data_files;

    CON_ID NAME
---------- --------------------------------------------------
         3 /u01/app/oracle/oradata/DB19EE/pdb1/system01.dbf
         3 /u01/app/oracle/oradata/DB19EE/pdb1/sysaux01.dbf
         3 /u01/app/oracle/oradata/DB19EE/pdb1/undotbs01.dbf
         3 /u01/app/oracle/oradata/DB19EE/pdb1/users01.dbf
         1 /u01/app/oracle/oradata/DB19EE/system01.dbf
         1 /u01/app/oracle/oradata/DB19EE/sysaux01.dbf
         1 /u01/app/oracle/oradata/DB19EE/undotbs01.dbf
         1 /u01/app/oracle/oradata/DB19EE/users01.dbf
         6 /u01/app/oracle/oradata/DB19EE/042C150F52294739E06
         6 /u01/app/oracle/oradata/DB19EE/042C150F52294739E06
         6 /u01/app/oracle/oradata/DB19EE/042C150F52294739E06
         6 /u01/app/oracle/oradata/DB19EE/042C150F52294739E06
         4 /u01/app/oracle/oradata/DB19EE/FF39DEB149B7A1D8E05
         4 /u01/app/oracle/oradata/DB19EE/FF39DEB149B7A1D8E05
         4 /u01/app/oracle/oradata/DB19EE/FF39DEB149B7A1D8E05
         4 /u01/app/oracle/oradata/DB19EE/FF39DEB149B7A1D8E05
         4 /u01/app/oracle/oradata/DB19EE/FF39DEB149B7A1D8E05
         4 /u01/app/oracle/oradata/DB19EE/FF39DEB149B7A1D8E05
         4 /u01/app/oracle/oradata/DB19EE/FF39DEB149B7A1D8E05
         5 /u01/app/oracle/oradata/DB19EE/FF5ECB84AAD6B3A8E05
         5 /u01/app/oracle/oradata/DB19EE/FF5ECB84AAD6B3A8E05
         5 /u01/app/oracle/oradata/DB19EE/FF5ECB84AAD6B3A8E05
         5 /u01/app/oracle/oradata/DB19EE/FF5ECB84AAD6B3A8E05
         5 /u01/app/oracle/oradata/DB19EE/FF5ECB84AAD6B3A8E05
         5 /u01/app/oracle/oradata/DB19EE/FF5ECB84AAD6B3A8E05
         5 /u01/app/oracle/oradata/DB19EE/FF5ECB84AAD6B3A8E05

Durch SET CONTAINER_DATA kann man selektiv definieren, aus welchen PDBs man die entsprechenden Informationen bekommen möchte. Die PDB$SEED (CON_ID=2) wird trotz ALL nicht angezeigt. Benötigt man diese Informationen zusätzlich, muss man noch folgendes machen:

alter session set "_exclude_seed_cdb_view"=FALSE;

Erst jetzt werden in den CDB Views auch die Informationen von der PDB$SEED angezeigt. Bitte wirklich nur ein ALTER SESSION und nicht ein ALTER SYSTEM nutzen! Es könnte andere Applikationen und Tools verwirren, wenn die PDB$SEED Informationen in allen CDB Views auftauchen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

This site uses Akismet to reduce spam. Learn how your comment data is processed.