CDB和PDB是ORACLE 12C一個很亮的新特性,因爲他們的引入致使傳統的ORACLE數據庫管理理念很多發生了改變,這裏列舉了部分最基本的cdb和pdb管理方式html
cdb和pdb關係圖sql
ORACLE 12C版本數據庫
SQL>select*fromv$version; BANNER CON_ID -------------------------------------------------------------------------------- ---------- OracleDatabase12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0 PL/SQL Release 12.1.0.1.0 - Production 0 CORE 12.1.0.1.0 Production 0 TNSforLinux: Version 12.1.0.1.0 - Production 0 NLSRTL Version 12.1.0.1.0 - Production
啓動關閉pdbc#
SQL> startup ORACLE instance started. Total SystemGlobalArea 597098496 bytes FixedSize 2291072 bytes VariableSize 272632448 bytes DatabaseBuffers 314572800 bytes Redo Buffers 7602176 bytes Databasemounted. Databaseopened. SQL>selectcon_id,dbid,NAME,OPEN_MODEfromv$pdbs; CON_ID DBIDNAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4048821679 PDB$SEED READONLY 3 3313918585 PDB1 MOUNTED 4 3872456618 PDB2 MOUNTED SQL>alterPLUGGABLEdatabasepdb1open; Pluggabledatabasealtered. SQL>selectcon_id,dbid,NAME,OPEN_MODEfromv$pdbs; CON_ID DBIDNAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4048821679 PDB$SEED READONLY 3 3313918585 PDB1 READWRITE 4 3872456618 PDB2 MOUNTED SQL>alterPLUGGABLEdatabasepdb1close; Pluggabledatabasealtered. SQL>selectcon_id,dbid,NAME,OPEN_MODEfromv$pdbs; CON_ID DBIDNAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4048821679 PDB$SEED READONLY 3 3313918585 PDB1 MOUNTED 4 3872456618 PDB2 MOUNTED SQL>alterPLUGGABLEdatabaseallopen; Pluggabledatabasealtered. SQL>selectcon_id,dbid,NAME,OPEN_MODEfromv$pdbs; CON_ID DBIDNAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4048821679 PDB$SEED READONLY 3 3313918585 PDB1 READWRITE 4 3872456618 PDB2 READWRITE SQL>alterPLUGGABLEdatabaseallclose; Pluggabledatabasealtered. SQL>selectcon_id,dbid,NAME,OPEN_MODEfromv$pdbs; CON_ID DBIDNAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4048821679 PDB$SEED READONLY 3 3313918585 PDB1 MOUNTED 4 3872456618 PDB2 MOUNTED SQL>altersessionsetcontainer=pdb1; Session altered. SQL> startup PluggableDatabaseopened. SQL> selectcon_id,dbid,NAME,OPEN_MODEfromv$pdbs; CON_ID DBIDNAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 3 3313918585 PDB1 READWRITE
pdb的管理能夠在cdb中進行也能夠在pdb中進行,若是是cdb中進行,須要PLUGGABLE關鍵字,若是是pdb中直接和普通數據庫同樣session
登陸pdboracle
[oracle@xifenfei ~]$ lsnrctl status LSNRCTLforLinux: Version 12.1.0.1.0 - Productionon12-MAY-2013 08:07:02 Copyright (c) 1991, 2013, Oracle. Allrights reserved. Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xifenfei)(PORT=1521))) STATUSofthe LISTENER ------------------------ Alias LISTENER Version TNSLSNRforLinux: Version 12.1.0.1.0 - Production StartDate 11-MAY-2013 18:30:54 Uptime 0 days 13 hr. 36min. 8 sec TraceLevel off Security ON:LocalOS Authentication SNMP OFF Listener Parameter File /u01/app/grid/product/12.1/network/admin/listener.ora Listener Log File /u01/app/grid/diag/tnslsnr/xifenfei/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xifenfei)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=xifenfei)(PORT=5500)) (Security=(my_wallet_directory=/u01/oracle/12.1/db_1/admin/cdb/xdb_wallet))(Presentation=HTTP)(Session=RAW)) Services Summary... Service"+ASM"has 1 instance(s). Instance"+ASM", status READY, has 1 handler(s)forthis service... Service"cdb"has 1 instance(s). Instance"cdb", status READY, has 1 handler(s)forthis service... Service"cdbXDB"has 1 instance(s). Instance"cdb", status READY, has 1 handler(s)forthis service... Service"pdb1"has 1 instance(s). Instance"cdb", status READY, has 1 handler(s)forthis service... Service"pdb2"has 1 instance(s). Instance"cdb", status READY, has 1 handler(s)forthis service... The command completed successfully [oracle@xifenfei ~]$ tnsping pdb1 TNS Ping UtilityforLinux: Version 12.1.0.1.0 - Productionon12-MAY-2013 08:07:09 Copyright (c) 1997, 2013, Oracle. Allrights reserved. Used parameter files: Used TNSNAMES adaptertoresolve the alias Attemptingtocontact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xifenfei) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1))) OK (20 msec) [oracle@xifenfei ~]$ sqlplus sys/xifenfei@pdb1assysdba SQL*Plus: Release 12.1.0.1.0 ProductiononSun May 12 08:08:02 2013 Copyright (c) 1982, 2013, Oracle. Allrights reserved. Connectedto: OracleDatabase12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production Withthe Partitioning, Automatic Storage Management, OLAP, Advanced Analytics andRealApplication Testing options SQL> show con_name; CON_NAME ------------------------------ PDB1 [oracle@xifenfei ~]$ sqlplus /assysdba SQL*Plus: Release 12.1.0.1.0 ProductiononSun May 12 08:09:14 2013 Copyright (c) 1982, 2013, Oracle. Allrights reserved. Connectedto: OracleDatabase12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production Withthe Partitioning, Automatic Storage Management, OLAP, Advanced Analytics andRealApplication Testing options SQL>altersessionsetcontainer=pdb1; Session altered. SQL> show con_name; CON_NAME ------------------------------ PDB1
pdb能夠經過alter session container進入也能夠直接經過tns方式登陸app
建立用戶tcp
SQL> show con_name; CON_NAME ------------------------------ CDB$ROOT SQL>selectcon_id,dbid,NAME,OPEN_MODEfromv$pdbs; CON_ID DBIDNAME OPEN_MODE ---------- ---------- ------------------------------ ---------- 2 4048821679 PDB$SEED READONLY 3 3313918585 PDB1 READWRITE 4 3872456618 PDB2 MOUNTED SQL>createuserxff identifiedbyxifenfei; createuserxff identifiedbyxifenfei * ERRORatline 1: ORA-65096: invalid commonuserorrolename SQL> !oerr ora 65096 65096, 00000,"invalid common user or role name" // *Cause: An attempt was madetocreatea commonuserorrolewithaname // that wassnotvalidforcommon usersorroles. Inadditionto // the usual rulesforuserandrole names, commonuserandrole // names must startwithC##orc##andconsistonlyofASCII // characters. // *Action: Specify a valid commonuserorrolename. // SQL>createuserc##xff identifiedbyxifenfei; Usercreated. SQL>SELECTUSERNAME,CON_ID,USER_IDFROMCDB_USERSWHEREUSERNAME='C##XFF'; USERNAME CON_ID USER_ID ---------- ---------- ---------- C##XFF 1 103 C##XFF 3 104 SQL>altersessionsetcontainer=pdb1; Session altered. SQL> show con_name CON_NAME ------------------------------ PDB1 SQL>createuserxff identifiedbyxifenfei; Usercreated. SQL>createuserc##abc identifiedbyxifenfei; createuserc##abc identifiedbyxifenfei * ERRORatline 1: ORA-65094: invalidlocaluserorrolename
建立用戶默認的是container=all,在cdb中只能建立全局用戶(c##開頭),會在cdb和全部的pdb中建立該用戶(可是pdb中的全局用戶須要另外受權纔可以在pdb中訪問)。在pdb中只能建立的用戶爲本地用戶ide
用戶受權this
SQL>grantconnecttoc##xff; Grantsucceeded. SQL>selectGRANTEE,con_idfromcdb_ROLE_PRIVSwhereGRANTED_ROLE='CONNECT'ANDGRANTEE='C##XFF'; GRANTEE CON_ID ------------------------------ ---------- C##XFF 1 SQL>grantresourcetoc##xff container=all; Grantsucceeded. SQL> selectGRANTEE,con_idfromcdb_ROLE_PRIVSwhereGRANTED_ROLE='RESOURCE'AND GRANTEE='C##XFF'; GRANTEE CON_ID ------------------------------ ---------- C##XFF 1 C##XFF 3
用戶受權默認狀況下是隻會給當前container,在cdb中也能夠指定container=all,對全部open的pdb且存在該用戶都進行受權
修改參數
SQL>altersystemsetopen_cursors=500 container=all; System altered. SQL> conn sys/xifenfei@pdb1assysdba Connected. SQL> show parameter open_cursors; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ open_cursors integer 500 SQL> altersystemsetopen_cursors=100; altersystemsetopen_cursors=100 * ERRORatline 1: ORA-01219:databaseorpluggabledatabasenotopen: queries allowedonfixed tablesorviewsonly SQL>alterdatabaseopen; Databasealtered. SQL>altersystemsetopen_cursors=100; System altered. SQL> show parameter open_cursors; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ open_cursors integer 100 SQL> conn /assysdba Connected. SQL> show parameter open_cursors; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ open_cursors integer 500
這裏能夠看到在cdb中修改,pdb會繼承進去;若是在pdb中修改會覆蓋pdb從cdb中繼承的參數含義