Oracle
 sql >> Base de données >  >> RDS >> Oracle

Administration de base d'Oracle 12c Multitenant

Vérifiez si la base de données est CDB ou non-CDB

SQL> sélectionnez cdb à partir de v$database;CDB---OUI

Connexion au conteneur

$ export ORACLE_SID=pcdb01$ sqlplus / as sysdbaSQL> show con_nameCON_NAME------------------------------CDB$ROOTSQL> show con_idCON_ID------------------------------1SQL> show pdbs;CON_ID CON_NAME MODE OUVERT RESTREINT-------- -- ------------------------------ ---------- -------- --2 PDB$SEED LECTURE SEULE NON3 PRD_PDB_CON LECTURE ECRITURE NON4 PRD_PDB_TEN LECTURE ECRITURE NON

Naviguer entre les PDB

SQL> alter session set container=PDB$SEED;Session alterée.SQL> alter session set container=PRD_PDB_CON;Session alterée.SQL>

Informations sur les PDB

SQL> COLONNE PDB_NAME FORMAT A15SQL> COLONNE PDB_NAME FORMAT A15SQL> SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;PDB_ID PDB_NAME STATUS---------- ---------- ----- ---------2 PDB$SEED NORMAL3 PRD_PDB_CON NORMAL4 PRD_PDB_TEN NORMAL

Vérifier/modifier le paramètre

SQL> select * from v$system_parameter;SQL> select * from PDB_SPFILE$;SQL> alter system set parameter_name=value;SQL> alter system set parameter_name=value CONTAINER=CURRENT;

Démarrage et arrêt de PDB

Quelques valeurs typiques :

DÉMARRAGE [NOMOUNT | MONTAGE | RESTREINDRE | MISE À NIVEAU | FORCER | LECTURE SEULEMENT]

ARRÊT [IMMÉDIAT | ABORT]

$ export ORACLE_SID=pcdb01$ sqlplus / as sysdbaSQL> arrêt immédiat ;

Arrêter la base de données enfichable

SQL> alter pluggable database PRD_PDB_CON close [immediate];SQL> alter pluggable database ALL SAUF PRD_PDB_CON close [immediate];SQL> alter pluggable database ALL close;SQL> alter pluggable database PRD_PDB_CON close [immediate] [instances=all];

Ou :

SQL> alter SESSION SET CONTAINER =PRD_PDB_CON;SQL> arrêt immédiat ;

Démarrer la base de données enfichable

FORCE DE DÉMARRAGE

STARTUP OPEN READ WRITE [RESTRICT]

STARTUP OPEN READ ONLY [RESTRICT]

MISE À NIVEAU DE DÉMARRAGE

SHUTDOWN [IMMEDIATE]

SQL> alter pluggable database PDB01 open;SQL> alter pluggable database ALL SAUF PRD_PDB_CON open;SQL> alter pluggable database ALL open;SQL> alter pluggable database PDB01 open [instances=all];

Ou :

SQL> alter SESSION SET CONTAINER =PRD_PDB_CON;SQL> startup;SQL> alter PLUGGABLE DATABASE  OPEN READ WRITE [RESTRICTED] [FORCE];SQL> alter PLUGGABLE DATABASE  OPEN READ ONLY [RESTRICTED][FORCE];SQL> alter PLUGGABLE DATABASE  OPEN UPGRADE [RESTRICTED];SQL> alter PLUGGABLE DATABASE  CLOSE [IMMEDIATE];

Conserver l'état de démarrage de la PDB (12.1.0.2 et versions ultérieures)

SQL> alter PLUGGABLE DATABASE pdb2 OPEN;SQL> alter PLUGGABLE DATABASE pdb2 SAVE STATE;

La vue DBA_PDB_SAVED_STATES affiche des informations sur l'état enregistré des conteneurs.

SQL> COLUMN nom_con FORMAT A20SQL> COLUMN nom_instance FORMAT A20SQL> SELECT nom_con, nom_instance, état FROM dba_pdb_saved_states;CON_NAME INSTANCE_NAME STATE-------------------- --- ----------------- --------------PRD_PDB_CON pcdb01 OUVERT

Taille de la base de données enfichable

SQL> FORMAT NOM DE COLONNE A20SQL> SELECT DBID, NAME, CON_ID, CON_UID, TOTAL_SIZE FROM V$CONTAINERS ORDER BY CON_ID;DBID NAME CON_IDCON_UID TOTAL_SIZE---------- -------- ---------------------- ---------- ---------- -------- --2732069181 CDB$ROOT 1 1 03552543733 PDB$SEED 2 3552543733 7759462404008367944 PRD_PDB_CON 3 4008367944 12037652482667104724 PRD_PDB_TEN 4 262
 

Temps de démarrage de la base de données enfichable

SQL> set linesize 180SQL> col name for a30SQL> col open_time for a33SQL> select con_id,name,dbid,open_mode,open_time from v$containers;CON_ID NAME DBID OPEN_MODE OPEN_TIME---------- - ---------- -------------- ---------- ---------- - --------------------------------1 CDB$ROOT 456650806 LIRE ÉCRIRE 17-MAR-18 11.59.36.176 PM -03 :002 PDB $ Seed 2688102972 Lire seulement 17-mars-18 11.59.36.182 PM -03:003 PDB_PN1O0101 1079206163 lire 18-mars-18 12.00.00.589 AM -03:004 PDB_BATCHWEB 2340495643 AM -03:004 lignes sélectionnées.

Disponibilité de la base de données enfichable

SQL> set linesize 180SQL> col name for a30SQL> col open_time for a28SQL> select name,floor(sysdate-cast(open_time as date))||'Days '||floor(((sysdate-cast(open_time as date))-floor(sysdate-cast(open_time as date)))*24)||'hours '||round(((sysdate-cast(open_time as date)-floor(sysdate-cast(open_time as date) ) *24)-floor((sysdate-cast(open_time as date)-floor(sysdate-cast(open_time as date))*24)))*60)||'minutes' "Database Uptime" de v$containers;NAME Disponibilité de la base de données --------------- --------------------------- CDB $ ROOT 1331 jours 11 heures 28 minutes PDB $SEED 1331Jours 11heures 28minutesPDB_PN1O0101 1331Jours 11heures 28minutesPDB_BATCHWEB 1331Jours 11heures 28minutes4 lignes sélectionnées.

Nom des services

SQL> FORMAT DE NOM DE COLONNE A30SQL> SELECT NAME,CON_ID,PDB FROM V$SERVICES ORDER BY CON_ID;NAME CON_ID PDB----------------------- ------- ---------- ------------------------------pcdb01XDB 1 CDB $ROOTSYS$BACKGROUND 1 CDB$ROOTSYS$USERS 1 CDB$ROOTpcdb01 1 CDB$ROOTprd_pdb_con 3 PRD_PDB_CONprd_pdb_ten 4 PRD_PDB_TEN6 lignes sélectionnées.


Créer des utilisateurs communs avec accès à tous les pdbs

SQL> CREATE USER c##user1 IDENTIFIED BY password1 CONTAINER=ALL ; Utilisateur créé.SQL> GRANT CREATE SESSION TO c##user1 CONTAINER=ALL ; Octroi réussi.

Créer des utilisateurs communs sans accès à pdbs

SQL> CREATE USER c##user2 IDENTIFIED BY password1;User created.SQL> GRANT CREATE SESSION TO c##user2;Accord réussi.

Créer un utilisateur local avec accès uniquement à pdb

SQL> CREATE USER user3 IDENTIFIED BY password3 CONTAINER=CURRENT;Utilisateur créé.SQL> GRANT CREATE SESSION TO user3 CONTAINER=CURRENT;Accord réussi.

Créer un rôle commun

SQL> CONN / AS SYSDBASQL> CREATE ROLE c##role1;Rôle créé.SQL> GRANT CREATE SESSION TO c##role1;Accord réussi.

Attribuer un rôle à un utilisateur commun

SQL> GRANT c##role1 TO c##user1 CONTAINER=ALL ; Octroi réussi.

Attribuer un rôle à un utilisateur commun à un utilisateur local

SQL> alter SESSION SET CONTAINER =PRD_PDB_CON;Session modified.SQL> GRANT c##role1 TO user2;Grant réussi.

Rôles locaux

SQL> CONN / AS SYSDBASQL> alter SESSION SET CONTAINER =PRD_PDB_CON;Session modifiée.SQL> CREATE ROLE role1;Rôle créé.SQL> GRANT CREATE SESSION TO role1;L'octroi a réussi.

Créer des PDB

SQL> créer une base de données enfichable HMLPDB utilisateur administrateur identifié par PassDw1 rôles =(DBA);SQL> créer une base de données enfichable DSVPDB utilisateur administrateur identifié par Manager1roles =(DBA) stockage (MAXSIZE 1G) FILE_NAME_CONVERT=('/u01/app /oracle/oradata/pcdb01/pcdb01_pdbseed_','/u01/app/oracle/oradata/dsvpdb/dsvpdb_');SQL> créer une base de données enfichable DSVPDB1 à partir de DSVPDB file_name_convert=('/DSVPDB/','/DSVPDB1/'); 

Hors PDB

SQL> modifier la base de données enfichable DSVPDB1 close [immediate] [instances=all] ;SQL> supprimer la base de données enfichable DSVPDB1, y compris les fichiers de données ;

Débrancher les PDB

$ sqlplus / as sysdbaSQL> alter pluggable database PRD_PDB_CON close;SQL> alter pluggable database PRD_PDB_CON unplug into '/tmp/prd_pdb_con.xml';

Brancher les PDB

$ sqlplus / as sysdbaSQL> créer une base de données enfichable PRD_PDB_CON en utilisant '/tmp/prd_pdb_con.xml' FILE_NAME_CONVERT=('/oradata/cdb1/prd_pdb_con', '/oradata/cdb2/prd_pdb_con');SQL> modifier la base de données enfichable PRD_PDB_CON ouvrir ;

Configuration des services sur Oracle RAC avec des CDB

$ srvctl add service -db CDB01 -service new_service -pdb PRD_PDB_CON$ srvctl modify service -db CDB01 -service new_service -pdb PRD_PDB_CON$ srvctl remove service -db CDB01 -service new_serviceBEGINDBMS_SERVICE.CREATE_SERVICE(service_name => 'new_service',network_name => 'nouveau_service.com');END;/BEGINDBMS_SERVICE.DELETE_SERVICE(nom_service => 'nouveau_service');END;/

Avec le conteneur racine, nous avons cdb_tablespaces et cdb_data_files affiche le tablespace et les fichiers de données de tous les conteneurs de la CDB.

Lorsqu'ils sont connectés à une PDB, cdb_tablespaces et cdb_data_files affichent les mêmes informations que dba_tablespaces, dba_data_files pour la PDB.

SQL> alter session set container=CDB$ROOT;Session modified.SQL> select tablespace_name, con_id from cdb_tablespaces order by con_id;TABLESPACE_NAME CON_ID------------------- ----------- --------SYSTEM 1SYSAUX 1UNDOTBS2 1TEMP 1USERS 1UNDOTBS1 1SYSTEM 3SYSAUX 3TBS_GEN_01 3TEMP 3TBS_CON_IDX_01 3TBS_CON_DT_01 3USERS 3SYSTEM 4SYSAUX 4TBS_GEN_01 4USERS 4TEMP 418 rows selected.SQL> select tablespace_name from dba_tablespaces; -----------------------------SYSTEMSYSAUXUNDOTBS1TEMPUSERSUNDOTBS26 lignes sélectionnées.

Comment vérifier la fonctionnalité d'annulation locale dans la version 12.2

Dans Oracle Database 12c Release 1, tous les conteneurs d'une instance partageaient le même tablespace d'annulation.

Dans Oracle 12c Release 2, chaque conteneur d'une instance peut utiliser son propre tablespace d'annulation.

SQL> shutdown immediate;SQL> startup upgrade;SQL> alter database local undo on;SQL> shutdown immediate;SQL> startup;SQL> col property_name format a30SQL> col property_value format a30SQL> select property_name, property_value from database_properties where property_name ='LOCAL_UNDO_ENABLED';PROPERTY_NAME PROPERTY_VALUE----------- -------------- LOCAL_UNDO_ENABLED TRUE
 

Références

https://docs.oracle.com