1. Ligar à bash do container oracle:

# Descobrir o container-id do Oracle
[user@localhost ~]$ sudo docker ps -a

# Aceder à linha de comandos do container
[user@localhost ~]$ sudo docker exec -it <container-id> bash

 


2. Passos de ligação a uma CDB ou a uma PDB

Ligar à base de dados de root (CDB):

Como sys as sysdba:

# Estabelecer ligação à CDB
[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1@localhost:1521/ORCLCDB.localdomain as sysdba

# Output:
# SQL*Plus: Release 12.2.0.1.0 Production on Mon Nov 16 05:44:34 2020
# Copyright (c) 1982, 2016, Oracle.  All rights reserved.
# Last Successful login time: Mon Nov 16 2020 04:02:24 +00:00
# Connected to:
# Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
# SQL>

Verificar nome e numero da ligacao:

-- Consultar nome da ligação:
SQL> show con_name

-- Output:
-- CON_NAME
-- ------------------------------
-- CDB$ROOT

-- Consultar o número da ligação:
SQL> show con_id

-- Output:
-- CON_ID
-- ------------------------------
-- 1

Mostrar todos os serviços associados à instalação:

SQL> select name, con_id from v$active_services order by 1;

-- Output:
-- NAME                                                             CON_ID
-- ---------------------------------------------------------------- ----------
-- ORCLCDBXDB                                                       1
-- ORCLCDBXDB                                                       1
-- SYS$BACKGROUND                                                   1
-- SYS$USERS                                                        1
-- orclpdb1.localdomain                                             3

Ligar à CDB usando a autenticação do SO:

[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba

# Output:
# SQL*Plus: Release 12.2.0.1.0 Production on Tue Nov 17 06:03:35 2020
# Copyright (c) 1982, 2016, Oracle.  All rights reserved.
# Connected to:
# Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
# SQL>

Verificar nome e numero da ligacao:

-- Consultar nome da ligação:
SQL> show con_name

-- Output:
-- CON_NAME
-- ------------------------------
-- CDB$ROOT


-- Consultar o número da ligação:
SQL> show con_id

-- Output:
-- CON_ID
-- ------------------------------
-- 1

Ligar a uma Pluggable DataBase (PDB):

[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1@localhost:1521/orclpdb1.localdomain as sysdba

Verificar nome e numero da ligacao:

-- Consultar nome da ligação:
SQL> show con_name

-- Output:
-- CON_NAME
-- ------------------------------
-- ORCLPDB1

-- Consultar o número da ligação:
SQL> show con_id

-- Output:
-- CON_ID
-- ------------------------------
-- 3

Ligar a uma PDB através de uma ligação à CDB

# Aceder à linha de comandos do container
[user@localhost ~]$ sudo docker exec -it <container-id> bash

# Aceder como sysdba à da CDB:
[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba
-- Estabelecer ligação através da CDB à PDB:
SQL> connect sys/Oradoc_db1@localhost:1521/orclpdb1.localdomain as sysdba

-- Output:
-- Connected.

 


3. Criar uma PDB a partir da Seed PDB

Antes de começar é necessário criar a pasta para acomodar os ficheiros da nova PDB. Usamos para isso o filesystem do nosso host:

# Ligar como su:
[user@localhost ~]$ sudo su

# Criar a pasta: 
[user@localhost ~]# sudo mkdir $docker_data/oracle/u02/app/oracle/oradata/ORCL/aebd

# Alterar as permissões:
[user@localhost ~]# chown oracle:oinstall $docker_data/oracle/u02/app/oracle/oradata/ORCL/aebd

Ligar à CDB

Usando a bash do container como anteriormente:

# Aceder à linha de comandos do container
[user@localhost ~]$ sudo docker exec -it <container-id> bash

# Aceder como sysdba à root da CDB:
[oracle@container-id /]$ sqlplus sys/Oradoc_db1 as sysdba  
-- Comando de criação da PDB através da PDB Seed:
SQL> create pluggable database aebd 
        admin user aebd_admin identified by aebd 
        roles = (DBA) 
        FILE_NAME_CONVERT=('/u02/app/oracle/oradata/ORCL/pdbseed','/u02/app/oracle/oradata/ORCL/aebd');

-- Output:
-- Pluggable database created.

Verificar o estado da nova PDB criada:

SQL> select pdb_name, status from cdb_pdbs;

-- Output:
-- PDB_NAME                    STATUS
-- ------------------------    ------------
-- AEBD                        NEW
-- PDB$SEED                    NORMAL
-- ORCLPDB1                    NORMAL

Verificar o open_mode da nova PDB criada (READ WRITE, READ ONLY, MOUNTED):

SQL> select name, open_mode from v$pdbs;

-- Output:
-- NAME                      OPEN_MODE
-- -----------------------   ----------
-- PDB$SEED                  READ ONLY
-- ORCLPDB1                  READ WRITE
-- AEBD                      MOUNTED

Verificar o Service Name da nova PDB criada:

SQL> select name, con_id from v$active_services order by 1;

-- Output:
-- NAME                                                          CON_ID
-- ------------------------------------------------------------- ----------
-- ORCLCDB.localdomain                                           1
-- ORCLCDBXDB                                                    1
-- SYS$BACKGROUND                                                1
-- SYS$USERS                                                     1
-- aebd.localdomain                                              5
-- orclpdb1.localdomain                                          3

Foi criada a nova PDB. É possível ver agora quais os datafiles criados:

SQL> select name from v$datafile where con_id=4;

-- Output:
-- NAME
-- --------------------------------------------------------------------------------
-- /u02/app/oracle/oradata/ORCL/aebd/system01.dbf
-- /u02/app/oracle/oradata/ORCL/aebd/sysaux01.dbf
-- /u02/app/oracle/oradata/ORCL/aebd/undotbs01.dbf

 


4. Gerir a CDB e as PDB

Garantir que a ligação estaelecida é à CDB como SYSDBA

# Aceder à linha de comandos do container
[user@localhost ~]$ sudo docker exec -it <container-id> bash

# Aceder como sysdba à root da CDB:
[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba
SQL> show con_name

-- Output:
-- CON_NAME
-- ------------------------------
-- CDB$ROOT

Desligar a Base de Dados:

SQL> shutdown immediate

-- Output:
-- Database closed.
-- Database dismounted.
-- ORACLE instance shut down.

Esta operação desmonta todas as PDB, desmonta todos os ficheiros de controlo e desliga a instância.

Arrancar a base de dados:

SQL> startup

-- Output:
-- ORACLE instance started.

-- Total System Global Area 1342177280 bytes
-- Fixed Size                  8792536 bytes
-- Variable Size             620758568 bytes
-- Database Buffers          704643072 bytes
-- Redo Buffers                7983104 bytes
-- Database mounted.
-- Database opened.

Esta operação monta liga a instância, monta os todos ficheiros de controlo e abre apenas o container de root.

Verificar o open_mode de todos os elementos da instância:

SQL> select name, open_mode from v$pdbs;

-- Output:
-- NAME                          OPEN_MODE
---------------------------   ----------
-- PDB$SEED                      READ ONLY
-- ORCLPDB1                      READ WRITE
-- AEBD                          MOUNTED

Como é possível observar a PDB ORDCLPDB1 está pronta a trabalhar. Isto acontece porque havia sido criado um trigger no momento da instalação para que isto acontecesse. Iremos de seguida verificar como é possível fazer esse trigger para a PDB AEBD.

Abrir PDB

SQL> alter pluggable database AEBD open;

-- Output:
-- Pluggable database altered.

-- Validar o novo estado após a alteração:
SQL> select name, open_mode from v$pdbs;

-- Output:
-- NAME                          OPEN_MODE
-- ---------------------------   ----------
-- PDB$SEED                      READ ONLY
-- ORCLPDB1                      READ WRITE
-- AEBD                          READ WRITE

Abrir todas as PDB de uma só vez

SQL> alter pluggable database all open;

-- Output:
-- Pluggable database altered.

Fechar PDB

SQL> alter pluggable database AEBD close immediate;

-- Output:
-- Pluggable database altered.

SQL> select name, open_mode from v$pdbs;

-- Output:
-- NAME                          OPEN_MODE
-- ---------------------------   ----------
-- PDB$SEED                      READ ONLY
-- ORCLPDB1                      READ WRITE
-- AEBD                          MOUNTED

Fechar todas as PDB de uma só vez:

SQL> alter pluggable database all close immediate;

-- Output:
-- Pluggable database altered.

Criar trigger para arrancar todas as PDB quando a instância é inciada

SQL> create or replace trigger Sys.After_Startup after startup on database
begin
   execute immediate 'alter pluggable database all open';
end After_Startup;
/

-- Output:
-- Trigger created.

Desligar a Base de Dados e Arrncar para verificar o estado das PDB

-- Desligar a base de dados
SQL> shutdown immediate

-- Arrancar a base de dados
SQL> startup

-- Validar estados das PDB
SQL> select name, open_mode from v$pdbs;

-- Output:
-- NAME                          OPEN_MODE
-- ---------------------------   ----------
-- PDB$SEED                      READ ONLY
-- ORCLPDB1                      READ WRITE
-- AEBD                          READ WRITE

Alterar o nome de uma PDB

Ligar à PDB e colocar em open restrict mode:

-- Fechar a base de dados
SQL> alter pluggable database aebd close immediate;

-- Abrir em modo restrito
SQL> alter pluggable database aebd open restricted;

-- Validar o estado
SQL> select name, restricted from v$pdbs;

-- Output:
-- NAME                          RES
-- ---------------------------   ----------
-- PDB$SEED                      NO
-- ORCLPDB1                      NO
-- AEBD                          YES

Para renomear uma PDB é necessário estar connectado à mesma:

SQL> alter pluggable database aebd rename global_name to aebd;

-- Output:
-- alter pluggable database aebd rename global_name to aebd
-- *
-- ERROR at line 1:
-- ORA-65046: operation not allowed from outside a pluggable database
-- Ligar à PDB
SQL> connect sys/Oradoc_db1@localhost:1521/aebd.localdomain as sysdba

-- Alterar o nome
SQL> alter pluggable database aebd rename global_name to aebd1;

-- Output:
-- Pluggable database altered.

Fechar a PDB e de seguida montar para voltar para produção:

-- Fechar a base de dados:
SQL> alter pluggable database close immediate;

-- Abrir a base de dados:
SQL> alter pluggable database open;

-- validar o novo estado
SQL> select name, open_mode from v$pdbs;

 


5. Gerir o espaço na CDB e nas PDB associadas

Garantir que a ligação estaelecida é à CDB como SYSDBA

[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba
SQL> show con_name

-- Output:
-- CON_NAME
-- ------------------------------
-- CDB$ROOT

Verificar quais os tablespaces existentes na CDB

SQL> select tablespace_name, con_id from cdb_tablespaces where con_id=1;

-- Output:
-- TABLESPACE_NAME                    CON_ID
-- ------------------------------ ----------
-- SYSTEM                                  1
-- SYSAUX                                  1
-- UNDOTBS1                                1
-- TEMP                                    1
-- USERS                                   1

Verificar quais os datafiles existentes na base de dados CDB:

SQL> select file_name, con_id from cdb_data_files where con_id=1;

-- Output:
-- FILE_NAME                                               CON_ID
-- -------------------------------------------------       ---------
-- /u02/app/oracle/oradata/ORCL/users01.dbf                1
-- /u02/app/oracle/oradata/ORCL/undotbs01.dbf              1
-- /u02/app/oracle/oradata/ORCL/system01.dbf               1
-- /u02/app/oracle/oradata/ORCL/sysaux01.dbf               1

Verificar quais os ficheiros temporários existentes na CDB:

SQL> select file_name, con_id from cdb_temp_files where con_id=1;

-- Output:
-- FILE_NAME                                               CON_ID
-- -------------------------------------------------       ---------
-- /u02/app/oracle/oradata/ORCL/temp01.dbf                1

Criar um tablespace permanente na root:

SQL> create tablespace cdata datafile '/u02/app/oracle/oradata/ORCL/cdata01.dbf' SIZE 10M;

-- Output:
-- Tablespace criado.

Verificar a criação do tablespace:

SQL> select tablespace_name, con_id from cdb_tablespaces order by con_id;

-- Output
-- TABLESPACE_NAME                CON_ID
-- ------------------------------ ----------
-- SYSTEM                         1
-- SYSAUX                         1
-- CDATA                          1
-- UNDOTBS1                       1
-- TEMP                           1
-- USERS                          1
-- SYSTEM                         3
-- SYSAUX                         3
-- UNDOTBS1                       3
-- TEMP                           3
-- AEBD_TEMP                      3

-- TABLESPACE_NAME                CON_ID
-- ------------------------------ ----------
-- HR_TABLES                      3
-- HR_TEMP                        3
-- AEBD_TABLES                    3
-- USERS                          3
-- SYSTEM                         5
-- TEMP                           5
-- UNDOTBS1                       5
-- SYSAUX                         5

Verificar a criação do datafile:

SQL> select file_name, con_id from cdb_data_files order by con_id;

-- Output:
-- FILE_NAME                                                       CON_ID
-- -------------------------------------------------               ---------
-- /u02/app/oracle/oradata/ORCL/users01.dbf                        1
-- /u02/app/oracle/oradata/ORCL/undotbs01.dbf                      1
-- /u02/app/oracle/oradata/ORCL/system01.dbf                       1
-- /u02/app/oracle/oradata/ORCL/sysaux01.dbf                       1
-- /u02/app/oracle/oradata/ORCL/cdata01.dbf                        1
-- /u02/app/oracle/oradata/ORCLCDB/orclpdb1/system01.dbf           3
-- /u02/app/oracle/oradata/ORCLCDB/orclpdb1/sysaux01.dbf           3
-- /u01/app/oracle/product/12.2.0/dbhome_1/dbs/AEBD_FILES_01.dbf   3
-- /u02/app/oracle/oradata/ORCLCDB/orclpdb1/users01.dbf            3
-- /u01/app/oracle/product/12.2.0/dbhome_1/dbs/HR_FILES_01.dbf     3
-- /u02/app/oracle/oradata/ORCLCDB/orclpdb1/undotbs01.dbf          3
-- /u02/app/oracle/oradata/ORCL/aebd/system01.dbf                  5
-- /u02/app/oracle/oradata/ORCL/aebd/undotbs01.dbf                 5
-- /u02/app/oracle/oradata/ORCL/aebd/sysaux01.dbf                  5

Criar tablespace temporário na CDB:

SQL> create temporary tablespace temp_root tempfile '/u02/app/oracle/oradata/ORCL/temproot01.dbf' SIZE 10M;

-- Output:
-- Tablespace created.

Verificar a criação do tablespace temporário:

SQL> select tablespace_name, con_id from cdb_tablespaces where contents='TEMPORARY' and con_id=1;

-- Output
-- TABLESPACE_NAME                CON_ID
-- ------------------------------ ---------
-- TEMP                           1
-- TEMP_ROOT                      1

Verificar a criação do tempfile:

SQL> select file_name, con_id from cdb_temp_files where con_id=1;

-- Output:
-- FILE_NAME                                                       CON_ID
-- -------------------------------------------------               ---------
-- /u02/app/oracle/oradata/ORCL/temp01.dbf                         1
-- /u02/app/oracle/oradata/ORCL/temproot01.dbf                     1

Criar um tablespace numa PDB:

#Garantir a Ligação à PDB:
[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba
SQL> connect sys/Oradoc_db1@localhost:1521/orclpdb1.localdomain as sysdba
create tablespace pdata datafile '/u02/app/oracle/oradata/ORCL/pdata01.dbf' SIZE 10M;

-- Output:
-- Tablespace created.

Verificar a criação do tablespace e do datafile:

-- Verificar criação do tablespace:
SQL> select tablespace_name, con_id from cdb_tablespaces order by con_id;

-- Output:
-- TABLESPACE_NAME                    CON_ID
-- ------------------------------ ----------
-- SYSTEM                                  3
-- SYSAUX                                  3
-- UNDOTBS1                                3
-- TEMP                                    3
-- USERS                                   3
-- PDATA                                   3

-- Verificar criação do Datafile
SQL> select file_name, con_id from cdb_data_files order by con_id;

-- Output
-- FILE_NAME                                                    CON_ID
-----------------------------------------------------------     ------
-- /u02/app/oracle/oradata/ORCLCDB/orclpdb1/system01.dbf        3
-- /u02/app/oracle/oradata/ORCLCDB/orclpdb1/sysaux01.dbf        3
-- /u02/app/oracle/oradata/ORCLCDB/orclpdb1/undotbs01.dbf       3
-- FILE_NAME                                                    CON_ID
-----------------------------------------------------------     ------
-- /u02/app/oracle/oradata/ORCLCDB/orclpdb1/users01.dbf         3
-- /u02/app/oracle/oradata/ORCL/pdata01.dbf                     3

Criar um tablespace temporário na PDB:

#Garantir a Ligação à PDB:
[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba
SQL> connect sys/Oradoc_db1@localhost:1521/orclpdb1.localdomain as sysdba

Verificar a criação do tablespace temporário e do tempfile:

-- Criar tablespace temporário:
SQL> create temporary tablespace temp_pdb3 tempfile '/u02/app/oracle/oradata/ORCL/aebd/temppdb301.dbf' SIZE 10M;

-- Output:
-- Tablespace created.

-- Verificar a criação do tablespace temporario:
SQL> select tablespace_name, con_id from cdb_tablespaces where contents='TEMPORARY';

-- Output:
-- TABLESPACE_NAME                    CON_ID
-- ------------------------------ ----------
-- TEMP                                    3
-- TEMP_PDB3                               3


-- Verificar a criação do tempfile:
SQL>  select file_name from dba_temp_files;

-- Output:
-- FILE_NAME
-- --------------------------------------------------------------------------------
-- /u02/app/oracle/oradata/ORCL/aebd/temppdb301.dbf
-- /u02/app/oracle/oradata/ORCLCDB/orclpdb1/temp012017-03-02_07-54-38-075-AM.dbf

 


6. Gerir a segurança nas PDB

Cada container numa CDB possui utilizadores local e common. Cada utilizador, apenas pode exercer os privilégios dentro do container ao qual está ligado.
 » COMMON: São criados na root e automaticamente são replicados para todas as PDB exceto a seed. Podem ligar-se a qualquer PDB. O nome associado a um common user tem de começar por c##.
 » LOCAL: São criados apenas na PDB que serão utilizados. Estes utiliadores só conseguem ligar-se à PDB na qual foram criados e não são visiveis para as restantes PDB na mesma CDB.

Criar user:

#Garantir a Ligação à CDB:
[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba
SQL> create user c##1 identified by oracle container=all;

-- Output:
-- User created.

Verificar a criação do user:

SQL> select username, common, con_id from cdb_users where username like 'C##%';

-- Output:
-- USERNAME                COMMON    CON_ID
-- ----------------------- --------- ---------         
-- C##1                    YES       1
-- C##1                    YES       3
-- C##1                    YES       4

Ligar com o user criado a uma PDB:

SQL> connect c##1/oracle@localhost:1521/orclpdb1.localdomain

-- Output:
-- ERROR:
-- ORA-01045: user C##1 lacks CREATE SESSION privilege; logon denied
-- Warning: You are no longer connected to ORACLE.

Falta a criação dos privilégios necessários! Será abordado mais à frente.

Criar utilizador local numa PDB:

Ligar à PDB:

#Garantir a Ligação à CDB:
[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba
-- Ligar à PDB orclpdb1:
SQL> connect sys/Oradoc_db1@localhost:1521/orclpdb1.localdomain as sysdba

SQL> create user novouser identified by oracle;

-- Output:
-- User created.

Verificar a criação do user:

SQL> select username, common, con_id  from cdb_users where username ='NOVOUSER';

Output
USERNAME                       COMMON    CON_ID
------------------------------ --------- ---------         
NOVOUSER                       NO        3

Tentar ligar às PDB existentes:

SQL>  connect novouser/oracle@localhost:1521/aebd1.localdomain

-- Output:
-- ERROR:
-- ORA-01017: invalid username/password; logon denied
-- Warning: You are no longer connected to ORACLE.

O utilizador foi criado no container orclpdb1.localdomain, como tal não é possível efetuar o login noutra PDB. É como se o utilizador nem existisse.

SQL>  connect novouser/oracle@localhost:1521/orclpdb1.localdomain

-- Output:
-- ERROR:
-- ORA-01045: user NOVOUSER lacks CREATE SESSION privilege; logon denied

Temos novamente falha nos privilégios!

Gerir Privilégios Grants & Roles

Cada container numa CDB possui roles local e common.
 » COMMON ROLES: São criados na root e automaticamente são replicados para todas as PDB exceto a seed. O nome associado a um common user tem de começar por c##. Os grants pode ser dados commonly: Operação replicada por todas as PDB excepto a seed; locally: aplicadas apenas no container onde a operação é executada.
 » LOCAL: São criados apenas na PDB que serão utilizados. Estes roles são apenas usados na PDB na qual foram criados e não são visiveis para as restantes PDB na mesma CDB.

Criar um common role

#Garantir a Ligação à CDB:
[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba
SQL> create role c##r1 container=all;

-- Output:
-- Role created.

Verificar a criação do role:

SQL> select role, common, con_id from cdb_roles where role='C##R1';

-- Output:
-- ROLE                     COMMON    CON_ID
-- -----------------------  --------- ---------         
-- C##R1                    YES       1
-- C##R1                    YES       3
-- C##R1                    YES       4

Criar role numa PDB:

Ligar à PDB:

#Garantir a Ligação à CDB:
[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba
-- Ligar à PDB orclpd1.localdomain
SQL> connect sys/Oradoc_db1@localhost:1521/orclpdb1.localdomain as sysdba

SQL> create role hr_manager;

-- Output:
-- Role created.

Verificar a criação do role:

SQL> select role, common, con_id from cdb_roles where role='HR_MANAGER';

-- Output:
-- ROLE                     COMMON    CON_ID
-- -----------------------  --------- ---------         
-- HR_MANAGER                NO       3
-- ~~~

Tentar criar role global dentro da PDB:

~~~sql
SQL> create role c##r2 container=all;

-- Output:
-- ERROR at line 1:
-- ORA-65050: Common DDLs only allowed in root.

Managing Common and Local Privileges

Podem ser atríbuidos grants local e common a users ou roles. Os privilégios tomam a propriedade de common ou local conforme são atribuídos. São common quando são executados com a clausula CONTAINER=ALL na root.

    >> **_COMMON PRIVILEGES_**: São atrbuidos automaticamente a todas as PDB excepto na seed.
    >> **_LOCAL PRIVILEGES_**: São atribuídos a um _user_ ou _role_ de uma PDB específica.
#Garantir a Ligação à CDB:
[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba
SQL> grant create session to c##1 container=all;

-- Output:
-- Grant succeeded.

SQL> select grantee, privilege, common, con_id from cdb_sys_privs
where privilege='CREATE SESSION' and grantee='C##1';

-- Output:
-- GRANTEE                              PRIVILEGE       COM     CON_ID
--------------------------------------- ---------       ----    -------
-- C##1                                 CREATE SESSION  YES     1
-- C##1                                 CREATE SESSION  YES     3
-- C##1                                 CREATE SESSION  YES     4

-- Validar os privilegios do user criado na aebd:
SQL> connect c##1/oracle@localhost:1521/aebd1.localdomain

SQL> select * from session_privs;

-- Output:
-- PRIVILEGE
-- ----------------------------------------
-- CREATE SESSION

 


7. Eliminar (drop) PDB

#Garantir a Ligação à CDB:
[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba

Fechar todas as PDB:

SQL> alter pluggable database all close immediate;

-- Output:
-- Pluggable database altered.

Verificar que todas as PDB estão fechadas:

SQL> select name, open_mode from v$pdbs;

-- Output:
-- NAME                          OPEN_MODE
-- ---------------------------   ----------
-- PDB$SEED                      READ ONLY
-- ORCLPDB1                      MOUNTED
-- AEBD                          MOUNTED

Apagar a PDB incluíndo os datafiles:

SQL> drop pluggable database aebd1 including datafiles;

-- Output:
-- Pluggable database dropped.

Confirmar que a PDB foi eliminada:

SQL> select name from v$pdbs;

-- Output:
-- NAME
-- --------------------------------------------------------------------------------
-- PDB$SEED
-- ORCLPDB1

8. Reverter todas as alterações##

Para reverter as alterações aqui executadas deverá:

#Garantir a Ligação à CDB:
[oracle@ddfbc6fee0b5 /]$ sqlplus sys/Oradoc_db1 as sysdba

Eliminar o utilizador e role common criados:

SQL> drop user c##1;
SQL> drop role c##r1;

Eliminar os tablespaces criados na root da CDB:

SQL> drop tablespace cdata including contents;
SQL> drop tablespace temp_root including contents;

Abrir a orclpdb1 e substituir o trigger criado para apenas abir a orclpdb1 no arranque do CDB.

SQL> alter pluggable database orclpdb1 open;

SQL> create or replace trigger Sys.After_Startup after startup on database
        begin
                execute immediate 'alter pluggable database orclpdb1 open';
        end After_Startup;
/