2.4 走进12c新特性之多租户架构
2.4.1 大楼里的江湖争斗
奇怪,这个掌声有点长啊?不对,原来就在这时外面下起了暴雨,好了,这下要被困住了。
“老师,要不您继续讲课吧,反正也走不了。”
“老师,您再给我们说几个故事吧。”
“好,大家随我一起看看窗外,今天下了一天的雨,这一阵又如此来势汹汹,可外头却毫无水涝迹象,要是以前的话,我们这里就是水上威尼斯了。这显然是城市防涝能力做了有效的优化,比如投入了更多的人力、财力;做了更多、更深的排水道;有了更精确的暴雨预警……其实,数据库本身也类似,每一个版本都有很大的改进,到今天Oracle 12c的时代,可以说发生了很多颠覆性的变化,我们今天说的Oracle物理体系结构,主要是基于11g版本说的,要不要听听12c都带来了哪些变化?”
“好啊,期待,讲故事吧”
“从前,有一座大楼,里面有几家公司,每家公司都有自己的办公室,大家各自经营各自的业务,相安无事。
“有一天,A公司和B公司员工忽然暴打起来,原因是B公司觉得A公司用电太多导致B公司电力不足,大楼管理员安抚了半天也没起到什么作用。没几天,又有战事,员工人数不多的C公司,一家独占了好几个大房间(闲暇时大家就地举行羽毛球比赛),而员工人数众多的D公司,却只拥有一个小小的房间(伸个懒腰就能击倒两人),于是D公司提出要C公司让出点位置给D公司,可C公司以未来业务发展需要为由不同意。最后,身中两刀的大楼管理员被迫辞职了。
“大楼内继续上演着江湖恩仇录,刀光剑影、血雨腥风。直到有一天,有一家海外跨国大企业 E公司的老板出现在大楼里,一切都改变了。
“你们干什么干什么,那个谁谁谁,把这边的几个断手断脚的都拿去扔了,看着不吓人吗?把你们的领导都叫出来在大厅集合,我要收购你们。
“霸气的5分钟训话后,这个大楼升起了一面大旗,上面写着三个字,E公司。这里所有的公司都成为E公司的分公司了,被E公司接管了。
“从此,A公司用电再也不会过多,D公司的员工也再不拥挤,原来的死对头们现在不但没有打打杀杀,还统一穿着打上E公司LOGO的服装,手牵手唱着《因为我们是一家人》,不过胸牌上的文字还是能看出他们来自不同的部门。
“听说江湖巨变,大楼管理员屁颠屁颠地回来了,这里不但没有打打杀杀,工作量也大幅减轻了。原来繁杂的大楼人员情况收集、房租水电、财务细节再也不烦琐了,因为E公司会统一给出一个详细的报告,再也不用冒着生命危险一家一家公司去了解了。
“故事说完了,听明白了没,好听吗?”
“老师,有意思,您这是要说什么特性啊?”
2.4.2 强大的多租户架构
“大家看看图2-30,老师说的故事就是在讲述Oracle的多租户架构。”
图2-30 Oracle的多租户架构
“大家注意看图,我来说几个名词,这些名词在图中都可以看到。
“1.Root:又名CDB$ROOT,用来存储Oracle提供的metadata和common user。metadata的一个例子是Oracle提供的PL/SQL包的源代码。common user 指的是一个所有容器都知道的数据库用户(注意,当我们想在数据库中创建用户的时候,一般是不能往ROOT中创建的。需要先通过语句alter session set container=PDB's name 转换到相应名称的PDB下再创建用户,要想详细了解关于common user 和 local user的区别,请参考Oracle 官方文档Oracle Database Security Guide)。一个CDB只能有一个根。
“2.Seed:又名PDB$SEED,用来创建新的PDB模板。但是,不能在Seed里添加或者修改对象,一个CDB只能有一个Seed。
“3.PDB:全称为Pluggable Database,中文翻译为可插拔数据库。PDB展现给用户和应用的形象就像是一个没有CDB的普通数据库,比如hrpdb salespdb等。一个PDB包括支持一个特定应用程序所需的所有数据和代码。PDB 完全向后兼容Oracle 12c之前版本的所有数据库。
“4.CDB:以上的每个组成部分都被称为容器(container),Root、Seed、PDB都是容器。CDB就是接管这个容器的数据库。这些容器在CDB中都有它们自己唯一的容器ID和名称。我们可以很轻松地向 CDB 中插入一个PDB 或者从 CDB 中拔出一个PDB。当将一个PDB 插入CDB中时,相当于将这个PDB与CDB连接起来,反之则解除关系。
“现在结合之前说的故事,大家就能完全理解了。这里的CDB就是E公司,而PDB就是之前打打杀杀后被收购的各公司。这个Seed我们可以理解为E公司专门成立了一个部门,用来实施快速复制业务的需求,比如根据A公司的规模快速复制一个A公司,无论场地大小、设施等都完全一样,以便开发新的市场,而这个Root则可以理解为为各个分公司提供公共服务的部门,比如水、电、茶等。”
2.4.3 多租户架构的好处
“老师,明白了。”
“嗯,很好,Oracle多租户架构的好处是什么呢?”
“省资源(PGA和SGA共用一套,消耗内存少)。”
“增加资源使用率(可以随意增加各种数据库)。”
“管理方便(可以轻松管理各个PDB,通过CDB即可完成,可以统一启停数据库)。”
“迁移方便(从这个CDB到那个CDB可轻松完成)。”