Multitenant : Querying Container Data Objects (CONTAINER_DATA)
The visibility of the data for container data objects is controlled using the CONTAINER_DATA attribute of a common user.
oracle 12cconfigurationintermediate
by OracleDba
12 views
The visibility of the data for container data objects is controlled using the CONTAINER_DATA attribute of a common user.
12345
CONN / AS SYSDBA
SELECT view_name FROM cdb_views WHERE container_data = 'Y';
SELECT table_name FROM cdb_tables WHERE container_data = 'YES';12345678910111213141516171819202122232425262728293031
CONN / AS SYSDBA
CREATE USER c##my_user IDENTIFIED BY MyPassword1;
GRANT CREATE SESSION, DBA TO c##my_user CONTAINER=ALL;
CONN c##my_user/MyPassword1@cdb1
SELECT name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u02/oradata/CDB1/system01.dbf
/u02/oradata/CDB1/sysaux01.dbf
/u02/oradata/CDB1/undotbs01.dbf
/u02/oradata/CDB1/users01.dbf
SQL>
CONN c##my_user/MyPassword1@pdb1
SELECT name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u02/oradata/CDB1/pdb1/system01.dbf
/u02/oradata/CDB1/pdb1/sysaux01.dbf
/u02/oradata/CDB1/pdb1/undotbs01.dbf
/u02/oradata/CDB1/pdb1/users01.dbf
/u02/oradata/CDB1/8664FAA157F47230E055000000000001/datafile/o1_mf_apex_gc329dg6_.dbf
SQL>12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
CONN / AS SYSDBA
ALTER USER c##my_user SET CONTAINER_DATA=ALL CONTAINER=CURRENT;
SET LINESIZE 100
COLUMN username FORMAT A20
COLUMN owner FORMAT A20
COLUMN object_name FORMAT A20
COLUMN container_name FORMAT A20
SELECT username,
owner,
object_name,
all_containers,
container_name
FROM cdb_container_data
WHERE username = 'C##MY_USER'
ORDER BY 1,2,3;
USERNAME OWNER OBJECT_NAME A CONTAINER_NAME
-------------------- -------------------- -------------------- - --------------------
C##MY_USER Y
SQL>
CONN c##my_user/MyPassword1@cdb1
SELECT name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u02/oradata/CDB1/system01.dbf
/u02/oradata/CDB1/sysaux01.dbf
/u02/oradata/CDB1/undotbs01.dbf
/u02/oradata/CDB1/pdbseed/system01.dbf
/u02/oradata/CDB1/pdbseed/sysaux01.dbf
/u02/oradata/CDB1/users01.dbf
/u02/oradata/CDB1/pdbseed/undotbs01.dbf
/u02/oradata/CDB1/pdb1/system01.dbf
/u02/oradata/CDB1/pdb1/sysaux01.dbf
/u02/oradata/CDB1/pdb1/undotbs01.dbf
/u02/oradata/CDB1/pdb1/users01.dbf
/u02/oradata/CDB1/8664FAA157F47230E055000000000001/datafile/o1_mf_apex_gc329dg6_.dbf
12 rows selected.
SQL>
CONN / AS SYSDBA
ALTER USER c##my_user SET CONTAINER_DATA=DEFAULT CONTAINER=CURRENT;
SELECT username,
owner,
object_name,
all_containers,
container_name
FROM cdb_container_data
WHERE username = 'C##MY_USER'
ORDER BY 1,2,3;
no rows selected
SQL>12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
ALTER USER c##my_user SET CONTAINER_DATA=(CDB$ROOT,PDB1) CONTAINER=CURRENT;
SELECT username,
owner,
object_name,
all_containers,
container_name
FROM cdb_container_data
WHERE username = 'C##MY_USER'
ORDER BY 1,2,3;
USERNAME OWNER OBJECT_NAME A CONTAINER_NAME
-------------------- -------------------- -------------------- - --------------------
C##MY_USER N PDB1
C##MY_USER N CDB$ROOT
SQL>
CONN c##my_user/MyPassword1@cdb1
SELECT name from v$datafile;
NAME
----------------------------------------------------------------------------------------------------
/u02/oradata/CDB1/system01.dbf
/u02/oradata/CDB1/sysaux01.dbf
/u02/oradata/CDB1/undotbs01.dbf
/u02/oradata/CDB1/users01.dbf
/u02/oradata/CDB1/pdb1/system01.dbf
/u02/oradata/CDB1/pdb1/sysaux01.dbf
/u02/oradata/CDB1/pdb1/undotbs01.dbf
/u02/oradata/CDB1/pdb1/users01.dbf
/u02/oradata/CDB1/8664FAA157F47230E055000000000001/datafile/o1_mf_apex_gc329dg6_.dbf
9 rows selected.
SQL>
ALTER USER c##my_user ADD CONTAINER_DATA=(PDB$SEED) CONTAINER=CURRENT;
SELECT username,
owner,
object_name,
all_containers,
container_name
FROM cdb_container_data
WHERE username = 'C##MY_USER'
ORDER BY 1,2,3;
USERNAME OWNER OBJECT_NAME A CONTAINER_NAME
-------------------- -------------------- -------------------- - --------------------
C##MY_USER N CDB$ROOT
C##MY_USER N PDB1
C##MY_USER N PDB$SEED
SQL>
ALTER USER c##my_user REMOVE CONTAINER_DATA=(PDB$SEED) CONTAINER=CURRENT;
SELECT username,
owner,
object_name,
all_containers,
container_name
FROM cdb_container_data
WHERE username = 'C##MY_USER'
ORDER BY 1,2,3;
USERNAME OWNER OBJECT_NAME A CONTAINER_NAME
-------------------- -------------------- -------------------- - --------------------
C##MY_USER N PDB1
C##MY_USER N CDB$ROOT
SQL>
ALTER USER c##my_user SET CONTAINER_DATA=DEFAULT CONTAINER=CURRENT;
SELECT username,
owner,
object_name,
all_containers,
container_name
FROM cdb_container_data
WHERE username = 'C##MY_USER'
ORDER BY 1,2,3;
no rows selected
SQL>12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
CONN / AS SYSDBA
ALTER USER c##my_user SET CONTAINER_DATA=(CDB$ROOT,PDB1) FOR sys.v_$datafile CONTAINER=CURRENT;
SELECT username,
owner,
object_name,
all_containers,
container_name
FROM cdb_container_data
WHERE username = 'C##MY_USER'
ORDER BY 1,2,3;
USERNAME OWNER OBJECT_NAME A CONTAINER_NAME
-------------------- -------------------- -------------------- - --------------------
C##MY_USER SYS V_$DATAFILE N PDB1
C##MY_USER SYS V_$DATAFILE N CDB$ROOT
SQL>
ALTER USER c##my_user SET CONTAINER_DATA=DEFAULT CONTAINER=CURRENT;
SELECT username,
owner,
object_name,
all_containers,
container_name
FROM cdb_container_data
WHERE username = 'C##MY_USER'
ORDER BY 1,2,3;
USERNAME OWNER OBJECT_NAME A CONTAINER_NAME
-------------------- -------------------- -------------------- - --------------------
C##MY_USER SYS V_$DATAFILE N PDB1
C##MY_USER SYS V_$DATAFILE N CDB$ROOT
SQL>
ALTER USER c##my_user SET CONTAINER_DATA=DEFAULT FOR sys.v_$datafile CONTAINER=CURRENT;
SELECT username,
owner,
object_name,
all_containers,
container_name
FROM cdb_container_data
WHERE username = 'C##MY_USER'
ORDER BY 1,2,3;
no rows selected
SQL>Please to add comments
No comments yet. Be the first to comment!