AWS has just added the possibility to create your oracle Database as as CDB (Container Database), the "new" architecture of Oracle where an instance can manage multiple databases, adding a new level between the heavy instance and lightweight schema:

At the time I'm writing this, I see it only in the "old" console ("original interface") not in "new database creation flow". It is displayed as a different Edition, however it is exactly the same price even when license is included.
The CDB name is always RDSCDB but you can choose the PDB name as "Database name" - I left the default "ORCL" here:
ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> select con_id, cdb, dbid, con_dbid, name, created, log_mode, open_mode, database_role, force_logging, platform_name, flashback_on, db_unique_name from v$database; CON_ID CDB DBID CON_DBID NAME CREATED LOG_MODE OPEN_MODE DATABASE_ROLE FORCE_LOGGING PLATFORM_NAME FLASHBACK_ON DB_UNIQUE_NAME _________ ______ ________________ ______________ _________ ____________ _______________ _____________ ________________ ________________ ___________________ _______________ _________________ 0 YES 3,360,638,310 490,545,968 RDSCDB 07-MAY-21 NOARCHIVELOG READ WRITE PRIMARY NO Linux x86 64-bit NO RDSCDB_A ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> SELECT pdb_id,pdb_name,dbid,con_uid,guid,status,con_id FROM dba_pdbs; PDB_ID PDB_NAME DBID CON_UID GUID STATUS CON_ID _________ ___________ ______________ ______________ ___________________________________ _________ _________ 3 ORCL 490,545,968 490,545,968 C3395C709E011676E0530100007F3932 NORMAL 3 ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> select service_id, name, network_name, creation_date, pdb, sql_translation_profile from dba_services; SERVICE_ID NAME NETWORK_NAME CREATION_DATE PDB SQL_TRANSLATION_PROFILE _____________ _______ _______________ ________________ _______ __________________________ 7 ORCL ORCL 26-MAY-21 ORCL ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> This is not a best practice, but there's no services declared there which mean that I can connect only with the default service registered from the PDB name. The documentation even recommends to connect with (CONNECT_DATA=(SID=pdb_name)) - I filled a feedback about this as this is a bad practice for 20 years.
I use EZCONNECT and create my own service:
ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> connect oracle19c/franck@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL Connected. ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> exec dbms_service.start_service(service_name=>'MY_APP') PL/SQL procedure successfully completed. ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> select name,network_name,creation_date,con_id from v$active_services 2 / NAME NETWORK_NAME CREATION_DATE CON_ID _________ _______________ ________________ _________ orcl orcl 26-MAY-21 3 MY_APP MY_APP 26-MAY-21 3 I can now connect as oracle19c/franck@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/MY_APP
Even if it is multitenant and I have only one PDB there, the whole CDB is mine:
ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> select listagg(rownum ||': '||con_id_to_con_name(rownum),', ') con_name from xmltable('1 to 5000') where con_id_to_con_name(rownum) is not null; CON_NAME ____________________________________ 1: CDB$ROOT, 2: PDB$SEED, 3: ORCL This lists all containers around me. Of course, I cannot go to CDB$ROOT as I have only a local user here.
ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> show parameter max_pdbs NAME TYPE VALUE -------- ------- ----- max_pdbs integer 5 The MAX_PDBS is set to 5 anyway because of Oracle detection of AWS hypervisor (see Oracle disables your multitenant option when you run on EC2)
ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> select listagg(role,',') within group (order by role) from session_roles; LISTAGG(ROLE,',') ______________________________________________________________________________________________________________________________________________________________ AQ_ADMINISTRATOR_ROLE,AQ_USER_ROLE,CAPTURE_ADMIN,CONNECT,CTXAPP,DATAPUMP_EXP_FULL_DATABASE,DATAPUMP_IMP_FULL_DATABASE,DBA,EM_EXPRESS_ALL,EM_EXPRESS_BASIC ,EXECUTE_CATALOG_ROLE,EXP_FULL_DATABASE,GATHER_SYSTEM_STATISTICS,HS_ADMIN_EXECUTE_ROLE,HS_ADMIN_SELECT_ROLE,IMP_FULL_DATABASE,OEM_ADVISOR,OEM_MONITOR ,OPTIMIZER_PROCESSING_RATE,PDB_DBA,RDS_MASTER_ROLE,RECOVERY_CATALOG_OWNER,RESOURCE,SCHEDULER_ADMIN,SELECT_CATALOG_ROLE,SODA_APP,XDBADMIN,XDB_SET_INVOKER ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> select * from dba_sys_privs where grantee='PDB_DBA'; GRANTEE PRIVILEGE ADMIN_OPTION COMMON INHERITED __________ ____________________________ _______________ _________ ____________ PDB_DBA CREATE PLUGGABLE DATABASE NO NO NO PDB_DBA CREATE SESSION NO NO NO ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> show parameter pdb_lockdown NAME TYPE VALUE ------------ ------ --------------------- pdb_lockdown string RDSADMIN_PDB_LOCKDOWN ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/ORCL> select * from v$lockdown_rules; RULE_TYPE RULE CLAUSE CLAUSE_OPTION STATUS USERS CON_ID ____________ ___________________________ _____________________________ ________________ __________ ________ _________ STATEMENT ALTER PLUGGABLE DATABASE DISABLE ALL 3 STATEMENT ALTER PLUGGABLE DATABASE ADD SUPPLEMENTAL LOG DATA ENABLE ALL 3 STATEMENT ALTER PLUGGABLE DATABASE DROP SUPPLEMENTAL LOG DATA ENABLE ALL 3 STATEMENT ALTER PLUGGABLE DATABASE ENABLE FORCE LOGGING ENABLE ALL 3 STATEMENT ALTER PLUGGABLE DATABASE OPEN RESTRICTED FORCE ENABLE ALL 3 STATEMENT ALTER PLUGGABLE DATABASE RENAME GLOBAL_NAME ENABLE ALL 3 I have many roles, including RDS_MASTER_ROLE, DBA and PDB_DBA (CREATE PLUGGABLE DATABASE) and it seems that the only lockdown profile rues are about ALTER PLUGGABLE DATABASE.
The documentation says that the RDSADMIN user is a common user. How is it possible?
ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/MY_APP> select username, account_status, lock_date, expiry_date, created, profile, password_versions, common, oracle_maintained from dba_users; USERNAME ACCOUNT_STATUS LOCK_DATE EXPIRY_DATE CREATED PROFILE PASSWORD_VERSIONS COMMON ORACLE_MAINTAINED _________________________ ___________________ ____________ ______________ ____________ ___________ ____________________ _________ ____________________ XS$NULL EXPIRED & LOCKED 07-MAY-21 07-MAY-21 DEFAULT 11G YES Y OUTLN LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y SYS OPEN 07-MAY-21 RDSADMIN 11G 12C YES Y SYSTEM OPEN 07-MAY-21 RDSADMIN 11G 12C YES Y APPQOSSYS LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y DBSFWUSER LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y GGSYS LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y ANONYMOUS LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y CTXSYS OPEN 07-MAY-21 DEFAULT YES Y GSMADMIN_INTERNAL LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y XDB LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y DBSNMP LOCKED 07-MAY-21 07-MAY-21 RDSADMIN YES Y GSMCATUSER LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y REMOTE_SCHEDULER_AGENT LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y SYSBACKUP LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y GSMUSER LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y SYSRAC LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y ORACLE19C OPEN 22-NOV-21 26-MAY-21 DEFAULT 11G 12C NO N AUDSYS LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y DIP LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y SYSKM LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y SYS$UMF LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y SYSDG LOCKED 07-MAY-21 07-MAY-21 DEFAULT YES Y RDSADMIN OPEN 26-MAY-21 RDSADMIN 11G 12C YES N 24 rows selected. ORACLE19C@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/MY_APP> show parameter common%prefix NAME TYPE VALUE ------------------------- ------ -------- common_user_prefix string Yes, RDSADMIN is a common user, probably created with COMMON_USER_PREFIX='' as we see no C## here. That's not really a problem if it is correctly managed, and anyway, for the moment there's no plug and clone operations on this PDB.
This is a start to support the Oracle Multitenant architecture. I hope we will be able to benefit from multitenant: multiple PDBs (you can have up to 3 without additional license, in any edition), data movement (imagine a cross-region refreshable PDB with ability to switchover...), thin clones...
On Performance Insight, we see the CDB level statistics without a PDB dimension ("pdb" is the name of my RDS instance here)

Note that in order to connect to your Oracle database, the easiest is to download SQLcl:
wget -qc https://download.oracle.com/otn_software/java/sqldeveloper/sqlcl-latest.zip && unzip -qo sqlcl-latest.zip sqlcl/bin/sql oracle19c/franck@//pdb.cywlwrcont2f.us-east-1.rds.amazonaws.com/MY_APP This is how I connected to run all this.
Top comments (0)