• [高清组图]环广西赛:参赛车队赛前适应训练 2018-08-31
  • [高清组图]特谢拉复出吴曦失单刀 苏宁0-0平斯威 2018-08-31
  • [高清组图]潜水偶遇座头鲸 亲密互动玩起“水中击掌” 2018-08-31
  • [高清组图]法拉利拍定妆照 维特尔KIMI准备好了 2018-08-31
  • [高清组图]毛剑卿伤退莫雷诺捅射 申花1-0一方 2018-08-31
  • [高清组图]比埃拉双响巴坎布建功 国安5-1富力 2018-08-31
  • [高清组图]武磊世界波胡尔克点射 上港2-0胜申花 2018-08-31
  • [高清组图]武磊2球吕文君建功 上港3-1富力 2018-08-31
  • [高清组图]欧超杯-科斯塔2球 皇马加时赛2-4马竞 2018-08-31
  • [高清组图]格里芬赤膊骑行 休赛期享受二人世界 2018-08-31
  • [视频]【深化改革 重在实效】精准扶贫 四川彝区要拔掉“穷根” 2018-08-31
  • [视频]【深化改革 重在实效】破藩篱促合力 体制创新粘合“两张皮” 2018-08-31
  • [视频]【深化改革 重在实效】激发活力 实现市场准入全程便利化 2018-08-31
  • [视频]【深化改革 重在实效】打通简政放权的“最后一公里” 2018-08-31
  • [视频]【深化改革 重在实效】广东:户籍改革为外来工打开一扇门 2018-08-31
  • 手机版
    你好,游客 登录 注册 搜索
    背景:
    阅读新闻

    Oracle 12C & 18C Application Container Map 新特性测试

    [日期:2018-08-12] 来源:Linux社区  作者:oracle18c [字体: ]

    奥门新萄京官方正版 www.arianalance.com 随着12c PDB的使用日渐成熟,用户生产中心的PDB也越来越多,且这些PDB彼此之间都是相互孤立的,一方面扩展性受到限制,另一方面也给管理带来较多的不便。

    Oracle 12cR2 和 18c 中对PDB的扩展性和管理便利性等方面进行了诸多的增强。这里介绍通过应用容器的Container Map来实现分区表部署在不同的PDB中。

    首先介绍几个概念

    分区映射表:定义分区键和PDB之间的映射关系,表数据将根据映射关系存放到不同的应用PDB Container

    Map:数据库属性,在Application root中指定分区映射表

    Map Objects:映射的分区表
    接下来,创建分区映射表,并且设置数据库的CONTAINER_MAP属性
    –创建map对象

    CREATE TABLE appadm.conmap (country VARCHAR2(30) NOT NULL)
    PARTITION BY LIST (country) (
      PARTITION app01 VALUES ('US','MEXICO','CANADA','INDIA'),
      PARTITION app02 VALUES ('UK','FRANCE','GERMANY','CHINA','JAPAN')
    );

    –设置container_map属性

    ALTER PLUGGABLE DATABASE SET CONTAINER_MAP='appadm.conmap';1
    分别插入数据到相应的PDB

    –插入数据

    ALTER SESSION SET CONTAINER=app01;
    INSERT INTO APPADM.cmtb VALUES ('AMER VALUE','US');
    INSERT INTO APPADM.cmtb VALUES ('AMER VALUE','MEXICO');
    INSERT INTO APPADM.cmtb VALUES ('AMER VALUE','CANADA');
    COMMIT;

    ALTER SESSION SET CONTAINER=app02;
    INSERT INTO APPADM.cmtb VALUES ('EURO VALUE','UK');
    INSERT INTO APPADM.cmtb VALUES ('EURO VALUE','FRANCE');
    INSERT INTO APPADM.cmtb VALUES ('EURO VALUE','GERMANY');
    COMMIT;

    在应用root中查询对象

    select * from APPADM.cmtb where country = 'MEXICO';

    VALUE                  COUNTRY                CON_ID
    ------------------------------ ------------------------------ ----------
    AMER VALUE            MEXICO                      6

    能够正常获取到查询结果,并且如果是select *的话,还会多出CON_ID列,指出数据来源的PDB ID。

    仅仅实现查询还远远满足不了业务系统的要求,接下来我们再测试DML操作在CONTAINER_MAP时的使用情况。

    Oracle提供了几种DML操作方法:

    使用containers子句,并且在where条件中指定操作的con_id
    SQL> update containers(appadm.cmtb) set value='EURO VALUE1' where country='GERMANY' and con_id=7;

    1 row updated.

    这种方法需要进行大量的应用重构,而且非常不灵活,实际生产环境中没有多大的实用价值。

    设置默认目标容器,无需在where条件中指定操作的con_id
    ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET = (app01);
    SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='CONTAINERS_DEFAULT_TARGET';

    SQL> update containers(appadm.cmtb) set value='EURO VALUE1' where country='GERMANY';

    0 rows updated.

    SQL> select * from appadm.cmtb where country='GERMANY';

    VALUE                  COUNTRY                CON_ID
    ------------------------------ ------------------------------ ----------
    EURO VALUE            GERMANY                    7

    现实中同样不太可能将操作限制在某个应用PDB,这种方法的价值仍然不大。而且测试过程中,这种方法未更新成功。

    由此可见,虽然经过两个版本的更新,CONTAINER_MAP 仍然只是一个原型,距离实际的生产使用还有很多的路要走。

    更多Oracle相关信息见Oracle 专题页面 http://www.arianalance.com/topicnews.aspx?tid=12

    Linux公社的RSS地址:http://www.arianalance.com/rssFeed.aspx

    本文永久更新链接地址http://www.arianalance.com/Linux/2018-08/153476.htm

    linux
    本文评论   查看全部评论 (0)
    表情: 表情 姓名: 字数

           

    评论声明
    • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
    • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
    • 本站管理人员有权保留或删除其管辖留言中的任意内容
    • 本站有权在网站内转载或引用您的评论
    • 参与本评论即表明您已经阅读并接受上述条款