Oracle 12c PDB浅析(二)

简介: 之前写了第一篇Oracle 12c PDB浅析 http://blog.itpub.net/23718752/viewspace-1823792/?          在上次的基础上继续来学习学习。
之前写了第一篇Oracle 12c PDB浅析 http://blog.itpub.net/23718752/viewspace-1823792/?         
在上次的基础上继续来学习学习。
    首先关于多租户的架构设计来说,就好比在一座已经几十年的老房子上动地基一般,这个变化着实够大,如此重大的变化Oracle不遗余力的想引入进来,肯定有更深层次的原因,当然关于这种设计在SQLServer中确实已经早有实现,在Oracle中却被大家相传为一种略带神奇的架构设计。不过话说回来,这个和Oracle坚定不移的云战略是息息相关的。
   在这种设计中,PDB作为可插拔的数据库,多个PDB会拥有自己独立的system表空间,temp表空间,但是redo,conrolfile,undo都是共享的。
还是先花点时间是说明一下环境。
SQL> select name, decode(cdb, 'YES', 'Multitenant Option enabled', 'Regular 12c Database: ') "Multitenant Option" , open_mode, con_id from v$database
NAME                           Multitenant Option             OPEN_MODE  CON_ID
------------------------------ ------------------------------ ---------- ------
newtest                         Multitenant Option enabled     READ WRITE      0
查看PDB
SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;
    CON_ID       DBID GUID                             NAME                           OPEN_MODE
---------- ---------- -------------------------------- ------------------------------ ----------
         2 2188059502 23CD335E7F55687CE0532F857F0A714A PDB$SEED                       READ ONLY
         3 4013429668 23CDBE4149E16F08E0532F857F0A58E3 PDB1                           READ WRITE
或者使用快捷方式
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
然后我们生成控制文件的trace,来看看和早期版本有什么差别。
alter database backup controlefile to trace 之后,在trace目录下得到的文件内容如下:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "NEWTEST" RESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/U01/app/oracle/oradata/newtest/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/U01/app/oracle/oradata/newtest/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/U01/app/oracle/oradata/newtest/redo03.log'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/U01/app/oracle/oradata/newtest/system01.dbf',
  '/U01/app/oracle/oradata/newtest/sysaux01.dbf',
  '/U01/app/oracle/oradata/newtest/undotbs01.dbf',
  '/U01/app/oracle/oradata/newtest/pdbseed/system01.dbf',
  '/U01/app/oracle/oradata/newtest/users01.dbf',
  '/U01/app/oracle/oradata/newtest/pdbseed/sysaux01.dbf',
  '/U01/app/oracle/oradata/newtest/NEWTEST/23CDBE4149E16F08E0532F857F0A58E3/datafile/o1_mf_system_c3px88q0_.dbf',
  '/U01/app/oracle/oradata/newtest/NEWTEST/23CDBE4149E16F08E0532F857F0A58E3/datafile/o1_mf_sysaux_c3px88q1_.dbf',
  '/U01/app/oracle/oradata/newtest/NEWTEST/23CDBE4149E16F08E0532F857F0A58E3/users01.dbf'
CHARACTER SET UTF8
;
从这部分日志可以看出,这个PDB是采用了omf的方式创建的,产生的一个GUID会默认作为对应的PDB目录名称。每个PDB中都有独立的系统表空间system,sysaux
下面是控制文件中的附加日志
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/U01/app/oracle/fast_recovery_area/NEWTEST/archivelog/2016_03_05/o1_mf_1_1_%u_.arc';
-- ALTER DATABASE REGISTER LOGFILE '/U01/app/oracle/fast_recovery_area/NEWTEST/archivelog/2016_03_05/o1_mf_1_1_%u_.arc';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE USING BACKUP CONTROLFILE
-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;
-- Open all the PDBs.
ALTER PLUGGABLE DATABASE ALL OPEN;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/U01/app/oracle/oradata/newtest/temp01.dbf'
     SIZE 206569472  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PDB$SEED;
ALTER TABLESPACE TEMP ADD TEMPFILE '/U01/app/oracle/oradata/newtest/pdbseed/pdbseed_temp012015-11-05_10-47-05-PM.dbf'
     SIZE 104857600  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PDB1;
ALTER TABLESPACE TEMP ADD TEMPFILE '/U01/app/oracle/oradata/newtest/NEWTEST/23CDBE4149E16F08E0532F857F0A58E3/datafile/o1_mf_temp_c3px88q2_.dbf'
     SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = CDB$ROOT;
-- End of tempfile additions.
可以看到在重建控制文件的时候,会自动创建临时表空间,都是彼此独立的。
如果我们使用sqlplus / as sysdba登录之后,默认接入的就是cdb的环境。
所以我们如果尝试创建一个普通用户,就会抛出下面的问题。
SQL> create user test identified by test
  2  ;
create user test identified by test
            *
ERROR at line 1:
ORA-65096: invalid common user or role name
这个时候需要用c##的格式来创建用户,这个时候,CDB的用户和PDB的用户的一个最大不同,就是CDB的是一个共有的用户,在PDB中依旧可见,但是在PDB中具体的权限会有所不同。
SQL> create user c##jeanron identified by oracle;
User created.
如果查看角色的信息,会发现存在PDB_DBA,CDB_DBA,但是细看对应的权限,权限也着实少的可怜,和角色DBA完全不在一个级别啊。
SQL> SElect *from dba_sys_privs where grantee='CDB_DBA';
GRANTEE PRIVILEGE                                ADM COM
------- ---------------------------------------- --- ---
CDB_DBA SET CONTAINER                            NO  YES
可以把这个权限付给c##jeanron
SQL> grant cdb_dba to c##jeanron;
Grant succeeded.
当然使用cdb的用户可以正常连接到实例
conn c##jeanron/oracle
Connected.
SQL> show con_id con_name
CON_ID
------------------------------
1
CON_NAME
------------------------------
CDB$ROOT
我们在cdb的用户下创建一个表作为标记。
SQL> create table cdb_test as select * from cat;
Table created.
SQL> select *from cat;
TABLE_NAME                     TABLE_TYPE
------------------------------ -----------
CDB_TEST                       TABLE
然后使用同样的用户登录PDB1,就胡抛出下面的错误。
SQL> conn c##jeanron/oracle@pdb1
ERROR:
ORA-01045: user C##JEANRON lacks CREATE SESSION privilege; logon denied
这个例子就充分说明了,这些权限信息对于PDB而言都是需要重新来初始化的。但是如果有大量的PDB容器,可以指定container的方式。
SQL> conn / as sysdba
Connected.
SQL> alter session set container=pdb1;
Session altered.
SQL> grant connect,resource to c##jeanron container=all ;
然后再次登录pdb,看看刚建的表是否还存在。
SQL> conn c##jeanron/oracle@pdb1;
Connected.
SQL> select *from cat;
no rows selected
通过这个小例子就会明白大体的区别了吧。
最后来删除一下pdb,整个操作类似表空间级的操作。
SQL> alter pluggable database all close;
Pluggable database altered.

SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           MOUNTED
SQL> drop pluggable database pdb1 including  datafiles;
Pluggable database dropped.

SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
查看alert日志会发现,文件是确确实实删掉了。
drop pluggable database pdb1 including  datafiles
Sat Mar 05 20:57:56 2016
Deleted file /U01/app/oracle/oradata/newtest/NEWTEST/23CDBE4149E16F08E0532F857F0A58E3/users01.dbf
Deleted Oracle managed file /U01/app/oracle/oradata/newtest/NEWTEST/23CDBE4149E16F08E0532F857F0A58E3/datafile/o1_mf_temp_c3px88q2_.dbf
Deleted Oracle managed file /U01/app/oracle/oradata/newtest/NEWTEST/23CDBE4149E16F08E0532F857F0A58E3/datafile/o1_mf_sysaux_c3px88q1_.dbf
Deleted Oracle managed file /U01/app/oracle/oradata/newtest/NEWTEST/23CDBE4149E16F08E0532F857F0A58E3/datafile/o1_mf_system_c3px88q0_.dbf
Completed: drop pluggable database pdb1 including  datafiles



目录
相关文章
|
Oracle 关系型数据库 数据库
百度搜索:蓝易云【docker部署并配置oracle12c的cdb和pdb教程!】
以上是使用Docker部署和配置Oracle 12c CDB和PDB的简要教程。请注意,这只是一个概述,并且可能需要根据你的实际情况进行适当的调整和配置。建议参考Oracle官方文档和相关资源,以获得更详细和全面的指导。
578 2
|
存储 Oracle 关系型数据库
Oracle 12c支持哪些数据类型?
【7月更文挑战第20天】Oracle 12c支持哪些数据类型?
468 2
|
SQL Oracle 关系型数据库
Oracle 12c有哪些新特性?
【7月更文挑战第20天】Oracle 12c有哪些新特性?
459 2
|
监控 Oracle 关系型数据库
Oracle 12c的Adaptive执行计划:数据的“聪明导航员”
【4月更文挑战第19天】Oracle 12c的Adaptive执行计划是数据库查询的智能优化工具,能根据实际运行情况动态调整执行策略。它像一个聪明的导航系统,不仅生成初始执行计划,还能实时监控并适应统计信息和资源变化,例如自动切换索引或调整并行度。此外,它支持自适应连接和统计信息收集,提升处理复杂查询和变化数据环境的能力。数据管理员应充分利用这一特性来优化查询性能和用户体验。
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。
|
存储 Oracle 安全
Oracle 12c的不可见字段:数据的“隐形斗篷”
【4月更文挑战第19天】Oracle 12c引入了不可见字段,这是一种隐藏数据列的特性,用于增强数据安全性和实现业务逻辑。不可见字段在常规查询中不显示,但参与数据操作,适合存储敏感信息或内部元数据。创建时只需在列定义中指定“INVISIBLE”属性。虽然有其限制,如特定查询可能暴露,但正确使用能有效提升数据安全性。了解和利用这一功能对数据管理员至关重要。
|
Oracle 关系型数据库 数据库
|
SQL Oracle 关系型数据库
Oracle 12c的TOP N语句:数据排名的“快速通道”
【4月更文挑战第19天】Oracle 12c的TOP N语句是用于快速获取数据集排名前N的记录的SQL查询方法,特别适合寻找最具代表性的数据。通过指定排序条件和数量,TOP N能高效筛选出所需信息,例如最高销售额产品或最大访问量网页。在Oracle 12c中,查询优化器对TOP N查询进行了优化,保证快速返回结果,并提供丰富的排序和过滤选项。基本用法如`SELECT ... ORDER BY ... FETCH FIRST N ROWS ONLY`,还可结合`OFFSET`进行分页查询或用`WITH TIES`保持结果完整性。掌握TOP N语句能提升数据分析效率,助力企业决策。
|
存储 Oracle 关系型数据库
Oracle 12c的临时UNDO:数据的“临时保镖”
【4月更文挑战第19天】Oracle 12c引入的临时UNDO为数据安全提供新保障。它为临时操作和特定事务提供独立UNDO空间,避免共享UNDO带来的性能瓶颈和管理复杂性。临时UNDO随事务开始分配,记录修改历史,事务结束后自动释放。优点包括提高性能、简化管理及保证数据一致性。但需注意手动配置、监控和优化,以防长时间占用资源。了解其工作原理和最佳实践是提升数据库性能的关键。

推荐镜像

更多