阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

131次阅读
没有评论

共计 2100 个字符,预计需要花费 6 分钟才能阅读完成。

随着 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 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计2100字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中