Oracle 12c 新特性之 Multitenant Architecture (二)

    要使用CDB环境,我们首先要创建一个CDB,其实创建起来是非常简单的,和non-CDB差不多,总的来说有两种方式:(1)使用DBCA的方式,这也是Oracle强烈推荐的一种方式 (2)使用SQLPLUS来创建。

    在一个CDB中,大部分用户数据是放在PDB中的,只有非常少的数据放在root容器中,一个CDB最多包含253个PDB,并且seed也是算在内的。对于每个容器(root seed  pdbs)都有单独的数据文件,但对于一个单实例的CDB,redolog只有一份,RAC环境下每个实例一份,所有的数据文件和redolog都必许放在共享存储上。一个CDB中只有一个参数文件,默认是spfile,在root中设置的参数会被自动继承到pdb中,涉及到参数文件内容的修改,可以使用传统alter system …..,但此时的容器必须是root,如果修改某个pdb的参数,则可以使用alter system set …=xxx container=current/all scope=xxxx;对于单个pdb的参数修改并没有记录到spfile中,而是记录到了pdb_spfile$的表中了:

SQL> select con_id,dbid,name from v$pdbs;
   CON_ID    DBID NAME
---------- ---------- -------------
 2 4064981781 PDB$SEED
 3 1752457863 NEWPDB1
 4 1337772140 NEWPDB2
SQL> selectDB_UNIQ_NAME,PDB_UID,SID,NAME,VALUE$ from pdb_spfile$;
DB_UNIQ_NA   PDB_UID SID NAME         VALUE$
---------- ---------- ----------------------- ----------
newcdb      1752457863 *  open_cursors  150


   对于CDB中的表空间,每个容器都有自己的表空间,但redolog和controlfile只能有一个,

例如下面CDB名为newcdb,包含两个PDB为newpdb1 newpdb2,查看相关文件就可以验证这些

,我们可以为root和pdb指定单独的默认表空间。活动的UNDO表空间在整个CDB中只能有一个

 

SQL> select FILE#,TS#,NAME,CON_ID fromv$datafile order by 4;
    FILE#   TS# NAME                            CON_ID
---------- ---------- ------------------------------------------------------------
   6        4/u01/oracle/oradata/newcdb/users01.dbf              1
   3        1/u01/oracle/oradata/newcdb/sysaux01.dbf             1
   4        2/u01/oracle/oradata/newcdb/undotbs01.dbf            1
   1        0/u01/oracle/oradata/newcdb/system01.dbf             1
   5        0/u01/oracle/oradata/newcdb/pdbseed/system01.dbf     2
   7        1/u01/oracle/oradata/newcdb/pdbseed/sysaux01.dbf         2
   8        0/u01/oracle/oradata/newcdb/newpdb1/system01.dbf         3
   9        1/u01/oracle/oradata/newcdb/newpdb1/sysaux01.dbf         3
  10        3/u01/oracle/oradata/newcdb/newpdb1/newpdb1_users01      3
            .dbf
    FILE#   TS# NAME                            CON_ID
---------- ------------------------------------------------------------ ----------
  11        0/u01/oracle/oradata/newcdb/newpdb2/system01.dbf         4
  12        1/u01/oracle/oradata/newcdb/newpdb2/sysaux01.dbf         4
  13        3/u01/oracle/oradata/newcdb/newpdb2/newpdb2_users01      4
            .dbf
SQL> select group#,member,con_id from v$logfile;
   GROUP# MEMBER                        CON_ID
------------------------------------------------------------ ----------
   3 /u01/oracle/oradata/newcdb/redo03.log          0
   2 /u01/oracle/oradata/newcdb/redo02.log          0
   1 /u01/oracle/oradata/newcdb/redo01.log          0
SQL> select status,name,con_id fromv$controlfile;
STATUS              NAME                             CON_ID
----------------------------------------------------------------------- ----------
            /u01/oracle/oradata/newcdb/control01.ctl             0
            /u01/oracle/fast_recovery_area/newcdb/control02.ct    0
            L


  对于内部的pdb里的数据库服务,在RAC架构下可以使用srvctl来添加,如果是单实例架构可以使用DBMS_SERVICE来修改,如下:

 

BEGIN
    DBMS_SERVICE.DELETE_SERVICE(
    service_name => 'newpdb1_test');
END;
BEGIN
    DBMS_SERVICE.CREATE_SERVICE(
    service_name => 'pdb1test',
    network_name => 'pdb1test');
END;
BEGIN
    DBMS_SERVICE.START_SERVICE(service_name => 'pdb1test');
END;
SQL> select service_id,name,network_namefrom ALL_SERVICES;
SERVICE_ID NAME     NETWORK_NAME
---------- ----------------------------------------
     6 newpdb1      newpdb1
     1 pdb1test     pdb1test


通过lsnrctlstatus命令可以看到,pdb1test服务已经启动

Service"pdb1test" has 1 instance(s).

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

The commandcompleted successfully

 

   在CDB中,root和pdbs共享一个实例,我们可以启动和关闭整个CDB,但对于单个PDB不能进行这样的操作,当CDB打开后,可以对单独PDB使用ALTER PLUGGABLE DATABASE xxxx命令来改变PDB的状态。

SQL> show pdbs;
    CON_ID CON_NAME            OPEN MODE  RESTRICTED
---------------------------------------- ---------- ----------
                2 PDB$SEED            READ ONLY NO
                3 NEWPDB1             READ WRITE NO
                4 NEWPDB2             READ WRITE NO
SQL> alter pluggable database newpdb1 close;
Pluggable databasealtered.
SQL> show pdbs;
    CON_ID CON_NAME            OPEN MODE  RESTRICTED
---------------------------------------- ---------- ----------
                2 PDB$SEED            READ ONLY NO
                3 NEWPDB1             MOUNTED
                4 NEWPDB2             READ WRITE NO
SQL> alter pluggable database newpdb1 open;
Pluggable database altered.
SQL> show pdbs;
    CON_ID CON_NAME            OPEN MODE  RESTRICTED
---------------------------------------- ---------- ----------
                2 PDB$SEED            READ ONLY NO
                3 NEWPDB1             READ WRITE NO
                4 NEWPDB2             READ WRITE NO


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值