转载

Oracle 12c系列(一)|多租户容器数据库

Oracle 12.1发布至今已有多年,但国内Oracle 12C的用户并不多,随着12.2在去年的发布,选择安装Oracle 12c的客户量明显增加,在接下来的一两年中,Oracle 12c将逐步得到普及。

目前关于12C新特性的文章很多,但大多都不成体系,本次的文章是一个非常完整、连贯的系列,将带你全面的从基础到深入全方位的理解Oracle 12C

本篇为Oracle 12c系列的开篇文章《Oracle 12c系列(1)Multitenant Container》。

可插入数据库的概念

Oracle Multitenant Container Database(CDB),即多租户容器数据库,是Oracle 12C引入的特性,指的是可以容纳一个或者多个可插拔数据库的数据库,这个特性允许在CDB容器数据库中创建并且维护多个数据库,在CDB中创建的数据库被称为PDB,每个PDBCDB中是相互独立存在的,在单独使用PDB时,与普通数据库无任何区别。

CDB根容器数据库的主要作用就是容纳所有相关的PDB的元数据,以及在CDB中对所有的PDB进行管理。

多租户环境的组成

  • ROOT
    Root容器数据库,是CDB环境中的根数据库,在根数据库中含有主数据字典视图,其中包含了与Root容器有关的元数据和CDB中所包含的所有的PDB信息。在CDB环境中被标识为CDB$ROOT,每个CDB环境中只能有一个Root容器数据库。
  • CDB seed
    CDB seed为PDB的种子,其中提供了数据文件,在CDB环境中被标识为PDB$SEED,是创建新的 PDB的模板,你可以连接PDB$SEED,但是不能执行任何事物,因为PDB$SEED是只读的,不可进行修改。
  • PDBs
    PDB数据库,在CDB环境中每个PDB都是独立存在的,与传统的Oracle数据库基本无差别,每个PDB拥有自己的数据文件和objects,唯一的区别在于PDB可以插入到CDB中,以及在CDB中拔出,并且在任何一个时间点之上PDB必须拔出或者插入到一个CDB中,当用户链接PDB时不会感觉到根容器和其他PDB的存在。

CDB with PDBs


 

sys. ora12c>show pdbs

 

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         3 ORA12CPDB                      READ WRITE NO

         4 PDB2                           MOUNTED

         5 PDB1                           MOUNTED

         6 PDB3                           READ WRITE NO

sys. ora12c>

 

PDB$SEED为CDB seedORA12CPDB/PDB1/PDB2/PDB3PDB数据库。

 

Application Containers

12cR2版本中,Oracle对多租户功能进行了增强,在CDB root容器中可以创建一个叫做Application root的容器,可在其内创建多个依赖于Application rootApplication PDBs,架构图如下:

Application Containers in a CDB
Oracle 12c系列(一)|多租户容器数据库

 “Application”
Oracle 12c系列(一)|多租户容器数据库
Oracle 12c系列(一)|多租户容器数据库

更多的关于Application Containers相关内容请参考之前的Application Containers系列:

Oracle12cR2版本Application Containers特性(1)

Oracle12cR2版本Application Containers特性(2)

Oracle12cR2版本Application Containers特性(3)

 

CDB环境中的用户

CDB环境中包含两类用户,公用用户和本地用户。

  • 公用用户
    公用用户是在root数据库中和所有的PDB数据库中都存在的用户,公用用户必须在根容器中创建,然后此用户会在所有的现存的PDB中自动创建,公用用户标识必须以c##或者C##开头,syssystem用户是OracleCDB环境中自动创建的公用用户。
    create user c##yyh identified by yyh;
    创建完成公用用户,需要为公用用户赋予所有可插拔数据库的权限,公用用户才可以访问其他PDB,如果在连接根容器时仅仅为公用用户赋予了相关权限,那么该权限不会被传递到所有的可插拔数据库中,必须为公用用户赋予能够传递到PDB中的权限,可以创建公用角色然后赋予公用用户,或者在为公共用户付权时指定子句container=ALL;
    例如:
    create role c##dbaprivs container=all;
    grant dba to c##dbaprivs container=all;

    grant c##dbaprivs to c##yyh container=all;
    或者
    grant dba to c##yyh container=all;
  • 本地用户
    本地用户指的是在PDB中创建的普通用户,只有在创建它的PDB中才会存在该用户,并且PDB中只能创建本地用户。

 

CDB中你需要再次了解的基础知识

SYSTEM/SYSAUX

CDB的数据库环境中,SYSTEM/SYSAUX表空间并不是公用,CDB$ROOT以及每个PDB都拥有自己的SYSTEMSYSAUX表空间。

REDO文件

CDB环境中所有的PDB共用CDB$ROOT中的REDO文件,REDO中的条目标识REDO来自那个PDB

PDB中无法执行ALTER SYSTEM SWITCH LOGFILE命令,只有公用用户在ROOT容器中才可以执行该命令。

另外ALTER SYSTEM CHECKPOINT命令是可以在PDB中执行的。

归档

CDB环境中所有的PDB共用CDB的归档模式,以及归档文件,不可以单独为PDB设置自己的归档模式,只有特权用户连接根容器之后才可以启动归档模式。

UNDO MODE

  在12.2之前的版本中,所有的PDB共用CDB$ROOT中的UNDO文件,在12.2之后的版本中UNDO的使用模式有两种:SHARED UNDO MODELOCAL UNDO MODE,顾名思义,LOCAL UNDO MODE就是每个PDB使用自己的UNDO表空间,但当PDB中没有自己的UNDO表空间时,会使用CDB$ROOT中的公共UNDO表空间。

 

查看UNDO表空间的使用模式(CDB$ROOT)

COL PROPERTY_NAME FOR A50

COL PROPERTY_VALUE FOR A50

COL DESCRIPTION FOR A50

SELECT property_name, property_value

FROM database_properties

WHERE property_name='LOCAL_UNDO_ENABLED';

 

PROPERTY_NAME        PROPERTY_VALUE

-------------------- --------------------

LOCAL_UNDO_ENABLED   TRUE

 

在创建CDB时使用了SHARED UNDO MODE方式,如果后续想更改为LOCAL UNDO MODE,我们可以使用如下命令更改UNDO MODELOCAL UNDO MODE:

startup upgrade

alter database local undo on;

shutdown immediate

startup

更改为local undoCDB中的所有的PDB会自动创建自己的UNDO表空间。

临时文件

每个PDB都有自己的临时表空间,如果PDB没有自己的临时表空间文件,那么,PDB可以使用CDB$ROOT中的临时表空间。

 

08:42:46 sys. woqu>select con_id, tablespace_name from cdb_temp_files;

 

    CON_ID TABLESPACE_NAME

---------- --------------------

         1 TEMP

         3 TEMP

 

Elapsed: 00:00:00.11

08:43:02 sys. woqu>

参数文件

参数文件中只记录了根容器的参数信息,没有记录PDB级别的参数信息,在根容器中修改初始化参数,会被继承到所有的PDB中,在PDB中修改参数后,PDB的参数会覆盖CDB级别的参数,PDB级别的参数记录在根容器的pdb_spfile$视图中,但并不是所有的参数都可以在PDB中修改,可以通过v$system_parameter视图查看PDB中可修改的参数:

SELECT name FROM v$system_parameter

WHERE ispdb_modifiable = 'TRUE'

ORDER BY name;

 

pdb_spfile$:

08:37:58 sys. yyh>show parameter open_cursors

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- -----

open_cursors                         integer     999

08:38:04 sys. yyh>show parameter local_listener

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ----------------

local_listener                       string      PDB_YYH

08:38:08 sys. yyh>select pdb_uid, name, value$ from pdb_spfile$;

 

   PDB_UID NAME               VALUE$

---------- ------------------ ------------------

1167267009 open_cursors       999

1167267009 local_listener     'PDB_YYH'

 

Elapsed: 00:00:00.00

08:38:11 sys. yyh>

这里在PDB:1167267009中更改了open_cursors/ local_listener两个参数。

控制文件

CDB环境中只有一组控制文件,所有的PDB共用这组公共的控制文件,从任何PDB中添加数据文件都会记录到公共控制文件当中,公用用户连接根容器时,可对控制文件进行管理。

 

20:51:03 sys. woqu>show parameter control_files

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_files                        string      /u01/app/oracle/oradata/woqu/c

                                                 ontrol01.ctl, /u01/app/oracle/

                                                 oradata/woqu/control02.ctl

20:51:06 sys. woqu>

 

 

20:50:55 sys. woqupdb>show parameter control_files

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_files                        string      /u01/app/oracle/oradata/woqu/c

                                                 ontrol01.ctl, /u01/app/oracle/

                                                 oradata/woqu/control02.ctl

20:51:23 sys. woqupdb>

 

告警日志以及跟踪文件

CDB中所有的PDB共用一个告警日志和一组跟踪文件,所有的PDB告警信息都会写入同一个告警日志中。

时区

CDB环境中可以为CDB以及所有的PDB设置相同的时区,也可以为每个PDB设置单独的时区。

 

20:51:50 sys. woqu>show pdbs

 

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         3 WOQUPDB                        READ WRITE NO

20:52:00 sys. woqu>select dbtimezone from dual;

 

DBTIME

------

+00:00

 

Elapsed: 00:00:00.00

20:52:01 sys. woqu>

 

 

20:51:53 sys. woqupdb>select dbtimezone from dual;

 

DBTIME

------

+08:00

 

Elapsed: 00:00:00.00

20:52:02 sys. woqupdb>

 

字符集

CDB中定义字符集也可以应用于它所含有的PDB中,每个PDB也可以有自己的字符集设置。

20:52:33 sys. woqu>SELECT a.value || '_' || b.value || '.' || c.value NLS_LANG

20:52:33   2  FROM nls_database_parameters a, nls_database_parameters b, nls_database_parameters c

20:52:33   3  WHERE a.parameter = 'NLS_LANGUAGE' AND b.parameter = 'NLS_TERRITORY' AND c.parameter = 'NLS_CHARACTERSET';

 

 

NLS_LANG

----------------------------------------

AMERICAN_AMERICA.AL32UTF8

 

Elapsed: 00:00:00.06

20:52:33 sys. woqu>20:52:33 sys. woqu>

 

 

20:52:36 sys. woqupdb>SELECT a.value || '_' || b.value || '.' || c.value NLS_LANG

20:52:36   2  FROM nls_database_parameters a, nls_database_parameters b, nls_database_parameters c

20:52:36   3  WHERE a.parameter = 'NLS_LANGUAGE' AND b.parameter = 'NLS_TERRITORY' AND c.parameter = 'NLS_CHARACTERSET';

 

 

NLS_LANG

----------------------------------------

AMERICAN_AMERICA.ZHS16GBK

 

Elapsed: 00:00:00.08

20:52:36 sys. woqupdb>20:52:36 sys. woqupdb>

数据字典视图与动态性能视图

CDB环境中引入了CDB级别的数据字典视图,它的级别高于DBA_/ALL_/USER_CDB级别的数据字典视图含有所有PDB的元数据信息,其中增加了con_id列,con_idCDB中所有容器唯一标识符,其中con_id0的是CDB$ROOTcon_id2的是PDB$SEED,每个PDBCDB中都会分配一个唯一的con_id。如果要想查看CDB级别的数据字典视图,必须使用公用用户在跟容器中查看,并且要查看的PDB必须处于open状态,才可以看到PDB中的信息。

20:53:42 sys. woqu>show pdbs

 

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         3 WOQUPDB                        READ WRITE NO

20:53:45 sys. woqu>

 

20:54:40 sys. woqu>select con_id, pdb_id, pdb_name, dbid, status from cdb_pdbs;

 

    CON_ID    PDB_ID PDB_NAME          DBID         STATUS

---------- --------- ------------------------------ --------------

         2         2 PDB$SEED          2834527297   NORMAL      

         3         3 WOQUPDB           3238406520   NORMAL

20:54:43 sys. woqu>

 

CDB的创建

    如果要使用可插拔数据库的功能,需要在创建数据库时专门指定启用可插拔数据库,创建CDB通常有如下两种方式:

  • 使用DBCA图形工具创建CDB
        这里需要注意的是Oracle 12.2之后支持LOCAL UNDO,这里注意需要手动要勾选LOCAL UNDO选项。
  • CREATE DATABASE语句创建CDB
        在使用脚本创建CDBOracle提供了两种方法,一种是使用OMF,另外一种是OMF的方式,注意参数文件中需要将ENABLE_PLUGGABLE_DATABASE设置为TRUE。

这里演示使用OMF方式创建CDB,数据名称为ora12c
1.
设置ENABLE_PLUGGABLE_DATABASE参数为TRUE,参数文件如下:

audit_file_dest='/u01/app/oracle/admin/ora12c/adump'

audit_trail='none'

compatible='12.2.0'

control_files='/u01/app/oracle/oradata/ora12c/control01.ctl','/u01/app/oracle/oradata/ora12c/control02.ctl'

db_block_size=8192

db_domain='linux.com'

db_name='ora12c'

diagnostic_dest='/u01/app/oracle'

enable_pluggable_database=true

memory_target=801m

nls_language='AMERICAN'

nls_territory='AMERICA'

remote_login_passwordfile='EXCLUSIVE'

undo_tablespace='UNDOTBS1'

 

2.创建相应目录以及设置环境变量

export ORACLE_SID=ora12c

export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/perl/bin:$ORACLE_HOME/jdk/bin:$PATH

 

3.CREATE DATABASE脚本createdb.sql如下:

CREATE DATABASE ora12c

USER SYS IDENTIFIED BY oracle

USER SYSTEM IDENTIFIED BY oracle

LOGFILE GROUP 1 ('/u01/app/oracle/oradata/ora12c/redo01a.log','/u01/app/oracle/oradata/ora12c/redo01b.log')

           SIZE 100M BLOCKSIZE 512,

        GROUP 2 ('/u01/app/oracle/oradata/ora12c/redo02a.log','/u01/app/oracle/oradata/ora12c/redo02b.log')

           SIZE 100M BLOCKSIZE 512,

        GROUP 3 ('/u01/app/oracle/oradata/ora12c/redo03a.log','/u01/app/oracle/oradata/ora12c/redo03b.log')

           SIZE 100M BLOCKSIZE 512

MAXLOGHISTORY 1

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 1024

CHARACTER SET AL32UTF8

NATIONAL CHARACTER SET AL16UTF16

EXTENT MANAGEMENT LOCAL

DATAFILE '/u01/app/oracle/oradata/ora12c/system01.dbf'

  SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED

SYSAUX DATAFILE '/u01/app/oracle/oradata/ora12c/sysaux01.dbf'

  SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED

DEFAULT TABLESPACE deftbs

   DATAFILE '/u01/app/oracle/oradata/ora12c/deftbs01.dbf'

   SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED

DEFAULT TEMPORARY TABLESPACE tempts1

   TEMPFILE '/u01/app/oracle/oradata/ora12c/temp01.dbf'

   SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED

UNDO TABLESPACE undotbs1

   DATAFILE '/u01/app/oracle/oradata/ora12c/undotbs01.dbf'

   SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED

ENABLE PLUGGABLE DATABASE

  SEED

  FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/ora12c/',

                       '/u01/app/oracle/oradata/ora12c/pdbseed/')

  SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED

  SYSAUX DATAFILES SIZE 100M

USER_DATA TABLESPACE usertbs

  DATAFILE '/u01/app/oracle/oradata/ora12c/pdbseed/usertbs01.dbf'

  SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

 

这段代码中只有红色字体部分与PDB有关,其他部分与创建传统的Oracle数据库语句均相同。

 

FILE_NAME_CONVERT    子句指定了使用'/u01/app/oracle/oradata/ora12c/'中的文件名在'/u01/app/oracle/oradata/ora12c/pdbseed/'中生产CDB seeds

 

USER_DATA_TABLESPACE    子句可以在容器中创建额外的表空间,这个表空间在后续使用PDB$SEED创建PDB时会被复制到PDB中。

 

4.将数据库启动到nomount状态,然后执行上面createdb.sql脚本创建CDB

 

startup nomount;

@createdb.sql

 

当数据库创建成功之后可以看到新建立的数据库被加入到/etc/oratab文件中。

#cat /etc/oratab

+ASM:/u01/app/11.2.0/grid:N

ora12c:/u01/app/oracle/product/12.2.0/dbhome_1:N

orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N          # line added by Agent

newdb:/u01/app/oracle/product/12.2.0/dbhome_1:N

yyh:/u01/app/oracle/product/12.2.0/dbhome_1:N

 

5.查看监听,根容器的服务ora12c.linux.com已经被注册到监听中。

Service "ora12c.linux.com" has 1 instance(s).

  Instance "ora12c", status READY, has 1 handler(s) for this service...

 

6.运行catcdb.sql脚本创建CDB相关视图:

@?/rdbms/admin/catcdb.sql

 注意事项:

1.catcdb.pl执行过中需要输入两个参数,文档中并没有指出是什么参数.

第一个参数应输入:$ORACLE_HOME/rdbms/admin

第二个参数应输入:catcdb.pl

 

2.环境变量中必须将$ORACLE_HOME/perl/bin指定到PATH中,否则报如下错误:

Can't locate Term/ReadKey.pm

3.需要将$ORACLE_HOME/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash中的catcdb.pl文件内容:

use Data::Dumper;

use util qw(trim, splitToArray);

use catcon qw(catconSqlplus);

更改为

use Data::Dumper;

use Util qw(trim, splitToArray);

use catcon qw(catconSqlplus);


4.切换到$ORACLE_HOME/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash目录中,然后sqlplus连接到数据,在执行catcdb.sql,否则报如下错误:

Can't locate Util.pm


7.开启local undo mode(因为上面再创建CDB时没有加入local undo mode子句)

sys. ora12c>shutdown immediate

sys. ora12c>startup upgrade

sys. ora12c>alter database local undo on;

 

Database altered.

 

Elapsed: 00:00:00.72


查看是否为local undo mode

SELECT property_name, property_value

FROM database_properties

WHERE property_name='LOCAL_UNDO_ENABLED';

 

PROPERTY_NAME        PROPERTY_VALUE

-------------------- --------------------

LOCAL_UNDO_ENABLED   TRUE

 

Elapsed: 00:00:00.02

sys. ora12c>


重启数据库

shutdown immediate

startup

启动数据库的过程中会在PDB$SEED中自动创建UNDO表空间,提供给后来采用PDB$SEED方式创建PDB所使用。

PS:如果CDB中已经存在多个PDB,当在根容器中使用alter database local undo on;开启local undo mode时会自动为每个PDB创建local undo


8.检查CDB是否已经创建成功

sys. ora12c>SELECT dbid, name, open_mode, cdb, con_id FROM v$database;

 

      DBID NAME      OPEN_MODE            CDB     CON_ID

---------- --------- -------------------- --- ----------

 323027068 ORA12C    READ WRITE           YES          0

 

Elapsed: 00:00:00.11

sys. ora12c>


此时CDB中含有两个容器:根容器CDB$ROOT和种子容器PDB$SEED,如下:

sys. ora12c>SELECT con_id, dbid, con_uid, guid, name FROM v$containers;

 

CON_ID       DBID    CON_UID GUID                              NAME

------ ---------- ---------- --------------------------------- ----------

     1  323027068          1 50A57CDEFD150C96E0530838A8C0206E  CDB$ROOT

     2 1453953285 1453953285 50A57CDEFD160C96E0530838A8C0206E  PDB$SEED

 

Elapsed: 00:00:00.00

sys. ora12c>SELECT con_id, tablespace_name, file_id, file_name

FROM cdb_data_files;

 

CON_ID TABLESPACE_NAME FILE_ID FILE_NAME

------ --------------- ------- --------------------------------------------

     1 SYSTEM                1 /u01/app/oracle/oradata/ora12c/system01.dbf

     1 SYSAUX                3 /u01/app/oracle/oradata/ora12c/sysaux01.dbf

     1 UNDOTBS1              5 /u01/app/oracle/oradata/ora12c/undotbs01.dbf

     1 DEFTBS                6 /u01/app/oracle/oradata/ora12c/deftbs01.dbf

 

Elapsed: 00:00:00.01

sys. ora12c>show con_id con_name user

 

CON_ID

------------------------------

1

 

CON_NAME

------------------------------

CDB$ROOT

USER is "SYS"

sys. ora12c>

 

CDB的管理

管理CDB时,通常需要使用sys用户连接根容器数据库,在操作方式上与非CDB数据库同样。

 

当前连接容器的信息

1.

23:03:31 sys. woqu>show con_id con_name user

 

CON_ID

------------------------------

1

 

CON_NAME

------------------------------

CDB$ROOT

USER is "SYS"

23:03:33 sys. woqu>

 

2.

COL CON_ID FOR A10

COL CUR_CONTAINER FOR A25

COL CUR_USER FOR A25

SELECT

    sys_context('USERENV','CON_ID') con_id,

    sys_context('USERENV','CON_NAME') cur_container,

    sys_context('USERENV','session_user') cur_user

FROM dual;

 

CON_ID     CUR_CONTAINER             CUR_USER

---------- ------------------------- -------------------------

1          CDB$ROOT                  SYS

 

启动和停止CDB

只有公用用户才可以连接根容器,并且启动和停止CDB,停止和启动与普通数据库的处理过程相同,当公用用户连接PDB时,无法启动和停止CDB

sys. ora12c>startup

 

默认情况下启动CDB时不会自动启动PDBs,我们可以使用手工的方式启动PDB

 

ALTER PLUGGABLE DATABASE [pdb_name] OPEN;

ALTER PLUGGABLE DATABASE ALL OPEN;      --打开所有PDB

 

sys. ora12c>shutdown immediate

在关闭CDB时,CDB中正在运行PDSs会也会关闭,连接CDBPDBssession均会断开。

 

查看CDB环境中表空间使用情况

with generator0 as

 (select cf.con_id, cf.tablespace_name, sum(cf.bytes) / 1024 / 1024 frm

    from cdb_free_space cf

   group by cf.con_id, cf.tablespace_name),

generator1 as

 (select cd.con_id, cd.tablespace_name, sum(cd.bytes) / 1024 / 1024 usm

    from cdb_data_files cd

   group by cd.con_id, cd.tablespace_name),

generator2 as(

select g0.con_id, c.name con_name, g0.tablespace_name, g0.frm, g1.usm

  from generator0 g0, generator1 g1, v$containers c

 where g0.con_id = g1.con_id

   and g0.tablespace_name = g1.tablespace_name

   and c.con_id = g1.con_id

union

select c.con_id,

       c.name,

       ct.tablespace_name,

       null,

       sum(ct.bytes) / 1024 / 1024

  from v$containers c, cdb_temp_files ct

 where c.con_id = ct.con_id

 group by c.con_id, c.name, ct.tablespace_name)

select con_id,

case when con_name = LAG(con_name, 1) OVER(PARTITION BY con_name ORDER BY tablespace_name) THEN null ELSE con_name END

con_name, tablespace_name, frm freemb, usm usemb

from generator2

order by con_id;

 

CON_ID CON_NAME     TABLESPACE_NAME     FREEMB      USEMB

------ ------------ --------------- ---------- ----------

     1 CDB$ROOT     SYSAUX                  28        470

     1              SYSTEM              6.5625        810

     1              TEMP                               33

     1              UNDOTBS1            1.9375         60

     1              USERS                    4          5

     3 ORA12CPDB    SYSAUX              18.125        360

     3              SYSTEM                1.25        250

     3              TEMP                               64

     3              UNDOTBS1                33        100

     3              USERS                    4          5

 

切换容器

使用公用用户连接CDB后可以使用alter session的方式切换不同的容器

 

alter session set container=pdb1;

alter session set container = cdb$root;

 

在切换容器时无需运行监听器和密码文件。只要公用用户拥有相关权限就可以切换到另外的容器中。

正文到此结束
Loading...