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

来源:互联网 发布:剑三捏脸数据截图 编辑:程序博客网 时间:2024/05/19 13:45

    要使用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 NEWPDB2SQL> 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            .dbfSQL> 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          0SQL> 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 NOSQL> 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 NOSQL> 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


 


原创粉丝点击