Oracle 12c之前的数据库都是非CDB,从Oracle 12.1.0.2开始,不推荐使用非CDB体系结构,而是使用多租户架构。在多租户架构中,使用单个可插拔数据库(PDB)(也称为单租户或lone-PDB),可以不必支付多租户选项相关费用。 在标准版中,你不能无意中创建其他PDB;但在企业版中,你可能需要购买一些额外的许可证。 本文给出了一个例子,说明如何避免在Lone-PDB实例中创建多个用户定义的PDB。

1.意外创建PDB  
 2.MAX_PDBS 参数(12.2 以上)  
 3.防止意外创建PDB  
 4.事故后清理 
  
意外创建PDB 
 
 在检查当前实例时,我们可以看到已经存在用户定义的PDB。

SELECT con_id, name FROM v$pdbs;CON_ID NAME
---------- --------------------------2 PDB$SEED3 PDB1SQL>

企业版中没有任何内容阻止您创建额外用户定义的可插拔数据库,即使您没有多租户选项。

CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdbadmin IDENTIFIED BY Password1 FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdbseed/','/u01/app/oracle/oradata/cdb1/pdb2/');ALTER PLUGGABLE DATABASE pdb2 OPEN;SELECT con_id, name FROM v$pdbs;CON_ID NAME
---------- -------------------------2 PDB$SEED3 PDB14 PDB2SQL>

完成此操作后,数据库将在DBA_FEATURE_USAGE_STATISTICS视图中报告“detected usage”。 这需要一段时间才能看到,我们将强制一个示例来检查它。

-- Force usage sample.
EXEC DBMS_FEATURE_USAGE_INTERNAL.exec_db_usage_sampling(SYSDATE);COLUMN name  FORMAT A40
COLUMN detected_usages FORMAT 999999999999SELECT name,detected_usages,aux_count,last_usage_date
FROM   dba_feature_usage_statistics
WHERE  name = 'Oracle Pluggable Databases'
ORDER BY name;NAME                        DETECTED_USAGES  AUX_COUNT LAST_USAG
------------------------------------- --------------- ---------- ---------
Oracle Pluggable Databases            16           2 04-OCT-16SQL>

我在一个测试实例上这样做,所以它已经检测到功能的使用几次。 这里要注意的重要一点是AUX_COUNT列,它指示当前运行的用户定义的PDB的数量。 使用多租户架构会导致检测到的使用情况,而不考虑PDB的数量,因此单独这一点并不表示是否需要购买多租户选项。 如果此功能的AUX_COUNT列大于1,您需要购买选项!

让我们删除刚刚创建的PDB。

ALTER PLUGGABLE DATABASE pdb2 CLOSE;
DROP PLUGGABLE DATABASE pdb2 INCLUDING DATAFILES;

现在功能使用会发生什么?

-- Force usage sample.
EXEC DBMS_FEATURE_USAGE_INTERNAL.exec_db_usage_sampling(SYSDATE);COLUMN name  FORMAT A40
COLUMN detected_usages FORMAT 999999999999SELECT name,detected_usages,aux_count,last_usage_date
FROM   dba_feature_usage_statistics
WHERE  name = 'Oracle Pluggable Databases'
ORDER BY name;NAME                    DETECTED_USAGES  AUX_COUNT LAST_USAG
------------------------------------- --------------- ---------- ---------
Oracle Pluggable Databases             17          1 04-OCT-16SQL>

请注意,AUX_COUNT列现在的值为“1”。

MAX_PDBS 参数 (12.2 以上)

Oracle 12c R2包括一个新初始化参数MAX_PDBS,它允许您设置用户定义的PDB数量的上限。如果您使用的是12c R2以后,请使用此参数,而不是后面描述的触发器方法。

SQL> ALTER SYSTEM SET max_pdbs=1;System altered.SQL> CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdb_adm IDENTIFIED BY Password1;
CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdb_adm IDENTIFIED BY Password1
*
ERROR at line 1:
ORA-65010: maximum number of pluggable databases createdSQL> 

防止意外创建PDB

在12c R2之前,我们可以使用系统触发器防止意外创建PDB。 对数据库上的任何“CREATE”DDL触发以下触发器,其中ORA_DICT_OBJ_TYPE系统定义的事件属性设置为“PLUGGABLE DATABASE”。 它检查并查看已有多少用户定义的PDB。 如果用户定义的PDB的数量超过允许的最大值(1),那么我们引发一个错误。

CONN / AS SYSDBACREATE OR REPLACE TRIGGER max_1_pdb_trgBEFORE CREATE ON DATABASEWHEN (ora_dict_obj_type = 'PLUGGABLE DATABASE')
DECLAREl_max_pdbs PLS_INTEGER := 1;l_count    PLS_INTEGER;
BEGINSELECT COUNT(*) INTO   l_countFROM   v$pdbs WHERE  con_id > 2;IF l_count >= l_max_pdbs THENRAISE_APPLICATION_ERROR(-20001, 'More than 1 PDB requires the Multitenant option.' );END IF;
END;
/

在触发器就位后,我们尝试创建另一个可插拔数据库。

CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdbadmin IDENTIFIED BY Password1FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdbseed/','/u01/app/oracle/oradata/cdb1/pdb2/');CREATE PLUGGABLE DATABASE pdb2 ADMIN USER pdbadmin IDENTIFIED BY Password1
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: More than 1 PDB requires the Multitenant option.
ORA-06512: at line 12SQL>

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px '.PingFang SC'; color: #454545} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545; min-height: 14.0px} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545} span.s1 {font: 12.0px 'Helvetica Neue'} span.s2 {font: 12.0px '.PingFang SC'}

如预期的,阻止创建第二用户定义的PDB。

 事帮后的清理

你需要做的是删除额外的PDB。 在这一点上,我不知道是否有其他机制来跟踪在实例中创建的PDB的最大数量,所以我不知道在实例中是否有遗留的错误记录。

有知道更多的内容可以留言给我。:)

如果你在容器数据库中意外创建了多个用户定义的PDB,并且你对潜在的许可违规情有独钟,您可能需要执行以下操作。

1.创建一个没有PDB的新CDB实例。

2.使用前面提到的触发器保护新的CDB实例。

3.从原始CDB拔出感兴趣的PDB。

4.将PDB插入新的干净CDB。

5.丢弃原始CDB实例。

由于新的CDB从未有多于一个PDB,因此该实例不应该秘密跟踪任何违反许可证的行为。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29337971/viewspace-2130191/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29337971/viewspace-2130191/

多租户:防止意外创建可插拔数据库(PDB)- Lone-PDB相关推荐

  1. oracle 12c创建可插拔数据库(PDB)与用户详解

    前言 由于oracle 12c使用了CDB-PDB架构,类似于docker,在container-db内可以加载多个pluggable-db,因此安装后需要额外配置才能使用. 一.修改listener ...

  2. mysql 140824,Oracle 12c创建可插拔数据库(PDB)及用户

    由于Oracle 12c使用了CDB-PDB架构,类似于docker,在container-db内可以加载多个pluggable-db,因此安装后需要额外配置才能使用. 一.修改listener.or ...

  3. 12c创建为容器数据库_oracle 12c创建可插拔数据库(PDB)与用户详解

    前言 由于oracle 12c使用了CDB-PDB架构,类似于docker,在container-db内可以加载多个pluggable-db,因此安装后需要额外配置才能使用. 一.修改listener ...

  4. oracle12c非可插拔数据库,oracle 12c创建可插拔数据库(PDB)与用户详解

    前言 由于oracle 12c使用了CDB-PDB架构,类似于docker,在container-db内可以加载多个pluggable-db,因此安装后需要额外配置才能使用. 一.修改listener ...

  5. Oracle数据库(三)可插拔数据库使用

    一.介绍 二.常用命令: 创建容器数据库:  create pluggable database pdb2 admin user admin identified by admin; 克隆一个新的PD ...

  6. 如何连接oracle 12c可插拔数据库

    启动根容器:[oracle@eric ~]$ export ORACLE_SID=cup[oracle@eric ~]$ sqlplus / as sysdbaSQL*Plus: Release 12 ...

  7. oracle关闭数据库容器,Oracle12cr1新特性之容器数据库(CDB)和可插拔数据库(PDB) 的启动和关闭...

    Oracle12c中引入的多宿主选项(multitenant option)允许一个容器数据库容纳多个独立的可插拔数据库(PDB).本文将说明如何启动和关闭容器数据库(CDB)和可插拔数据库(PDB) ...

  8. idea连接oracle可插拔数据库报ORA-12505

    在使用idea连接oracle数据库时,提示ORA-12505报错 [66000][12505] Listener refused the connection with the following ...

  9. oracle java连接串写法,Oracle可插拔数据库的jdbc连接串写法

    我在服务器上部署某个第三方系统的数据库的时候,服务器数据库版本为oracle 12c.我采用的方式是新建了一个实例.访问正常. 后来项目的负责人告诉我,oracle12C支持所谓的可插拔数据库.可插拔 ...

  10. Oracle二三事之 12c 可插拔数据库PDB

    2019独角兽企业重金招聘Python工程师标准>>> 针对Oracle 12c数据库测试用户的一份调查显示,新版本中他们认为最强大的功能就是PDB.就如同服务器虚拟化技术从底层硬件 ...

最新文章

  1. linux下jdk简单配置记录
  2. 关于优先队列的一些基本操作
  3. 如何让hierarchyviewer调试查看商业版真机上的应用
  4. 计算机常用端口一览表
  5. eclipse乱码解决方法
  6. css之去除html标签默认的外边距margin和内边距padding,通用工具类 base.css
  7. discuz php源码,Discuz7 php源码,该如何解决
  8. Color the ball(HDU-1556)
  9. Oracle On Linux
  10. 为php-fpm安装pdo pgsql驱动支持
  11. Netty实战一之异步和事件驱动
  12. Spring+Mybatis+MySql+Maven 简单的事务管理案例
  13. 机房部署环境和划分多vlan的好处
  14. 如何为项目配置opencv
  15. 写一个函数将传入的字符串转换成驼峰表示法
  16. 微分方程和差分方程的区别与联系
  17. 算法导论第三版课后答案-2-25章(部分中文).pdf 免积分下载
  18. html中将字体设置成透明的,解决css设置背景透明,文字不透明_html/css_WEB-ITnose
  19. Vscode latex插件生成pdf目录空白问题
  20. 恋空 By whaosoft

热门文章

  1. 安全牛《2020中国网络安全企业100强报告》发布
  2. 网易博客搬家至CSDN博客指南
  3. 手机管理应用研究【5】——应用杂篇
  4. 设计冲刺案例|谷歌设计冲刺用4天确定热卖智能相机Clips的功能特性
  5. 华为手机真机测试问题 The application could not be installed: INSTALL_FALLED_INTERNAL_ERROR
  6. 商城源码+分销版+破j版+企业版+虚拟商品+第三方对接
  7. 鸿蒙OS到底是不是Android套皮?(少bb,看源码!)
  8. 日系插画学习笔记(十):色彩基础
  9. 内存卡删除的文件如何恢复?如何恢复比较快?
  10. c语言生日快乐音乐程序,89S51演奏生日快乐的歌曲c程序