Oracle12.2Sharding技术揭秘1.Oracle12.2的重磅特性及发布时间2016年2月,Oracle出了12.2的beta2版本,并且在4月更新了相关文档,如Concepts,Administrator’sGuide,GlobalDataServicesConceptsandAdministrationGuide等等。这个版本的文档,比之前2015年10月底文档要好很多,许多概念,演示demo,操作步骤都得到了很好的说明。据信Oracle12.2将于6.1正式发布。在12.2中Sharding特性受到了广泛的关注,本文着重讲述这一特性的使用和构建。2.三言两语说透Oracle的Sharding技术爱因斯坦说过,如果你不能用简单的语言解释某个东西,你就不是真正的理解这个东西。通过这几天的实验和学习,我尽量用简单的语言来给大家描述下什么是Oracle的sharding。Sharding,中文名叫数据分片,是对数据进行横向扩展的一种方式。数据量增加,我可以通过加一台机器,来扩展其容纳能力和处理能力。Sharding其实需要解决三个问题:一、数据的路由,二、数据的分片,三、分片的元数据信息保存。1.数据路由是数据库告诉应用程序,你让我查的数据目前在哪个分片上,这条路怎么走过去。2.数据分片就是实际数据的存放地点,往往每个分片就是一台单独的服务器(含存储)。3.由于分片的数据实际是被切割放在不同的机器上,那么需要有个集中的地点存放数据分片的信息,即分片元数据的信息。应用问路由怎么走,路由去查询元数据得知需要的数据在哪个分片上,最终应用访问到该分片上。最著名的shardingdatabase就是mongoDB了。mongoDB的sharding功能的架构也是为了解决上面的三个问题,MongoDB有路由服务器(Router)解决路由问题,分片服务器(Shard)存储实际数据(可能还有副本和仲裁),以及配置服务器(ConfigServer)存放分片元数据。那么,对应在Oracle12.2的ShardingDB上,就是GDS框架(GSM,sharddirectors),shardnode,和shardcat数据库。所以,到这里你就可以比较清楚的了解了oracle12.2的sharding功能其实就是3个模块。顺便说一下,MonogoDB支持多个副本和仲裁,oracle的adg也同样支持一主多备,由FSFO进行管理。》》关注Oracle公众号回复Shard可以获得:Oracle12.2ShardedDatabaseManagement.pdf3.Sharding体验Shardcat是非常重要的一个模块,上面不仅仅有分片的元数据信息,还有duplicatedtable的mastertable信息,另外,当进行crossshardquery的时候,他还起着coordinatordatabase的作用。所以建议对这个部分搭建RAC+adg架构,避免shardcat的单点故障。shardnode,单个shardnode的失效,将导致整个表的不可用。所以我们也要对shardnode建立高可用的副本,这里可以用ADG或者OGG的技术。既然做sharding,又要在做HA,那么就变成了堆机器,堆存储的方式了。我们假设在一个10个shardnode的环境,需要多少台机器:一个shardcate,做rac+adg,那么最少就是3台;10个shardnode,如果都有adg,那么最少就是20台。那么当前这个环境,就至少要23台机器了。Sharding架构极其考验对应用的熟悉程度,需要配合应用进行合理的分区和分片。另外,如shardingkey必须建索引,sharding的方式可以有一致性hash,让数据均匀分布,也还是可以是range或者list分区,或者hash-range,hash-list的子分区。分片和分区方式需要结合业务,有些场景需要相关数据都在一个分区,避免crossshardjoin,有些场景需要均匀分片,禁止集中分片,导致热块数据都在一个分片上(如序列增长,做range分区,热点数据将会都在一个分片上)。事实表和维度表,似乎可以很好的利用sharding功能。维度表做duplicatedtable,而事实表做shardedtable。4从安装部署到体验(一)安装介质:1.你需要12.2的database的安装介质(两个zip压缩包)来安装db软件,用于shardcat数据库,和shardnode主机上的数据库。2.你还需要12.2的gsm安装介质(一个压缩包)来安装GDS框架和gsm服务。这是安装在shardcat主机上的。3.你还需要12.2.的client安装介质(一个压缩包)来装scheagent,这是安装在shardnode主机上的。安装schagent是为了在shardcat主机上发起命令,在远程的shardnode上,通过agent调起来netca和dbca来安装监听和数据库。另外,如果shardnode有activedataguard,agent也会自动帮你配好dataguard,配好broker和FSFO。(二)HIGHLEVEL安装步骤:1.OracleShardingPrerequisites2.SettingUptheOracleShardingHostEnvironmentScripts3.InstallingOracleDatabase4.InstallingtheShardDirectorSoftware5.CreatingtheShardCatalogDatabase6.SettingUptheOracleShardingManagementandRoutingTier7.DeployingandManagingaSystem-ManagedSDB(三)详细安装步骤:1.OracleShardingPrerequisites12.2企业版non-cdb使用文件系统而非ASM(12.2Beta要求,正式发行后,可能会改)主机hosts文件写上本机和各个shardnode的IP解析机器必须全新,不能残留之前有安装过oracle的信息。2.SettingUptheOracleShardingHostEnvironmentScripts目的是因为shardcat和gds都安装在一个主机上,同一个oracle用户,不同ORACLE_HOME,所以建立环境变量的脚本,会比较容易在database环境和gsm环境之间切换。adminguide上是用shardcat.sh,shard-director1.sh脚本,但是我的可能更简单实用,直接定义成alias。(这种方法其实是跟ORACLEBASE学的。老DBA应该都听说过这个网站。)##修改环境变量,在环境变量中设置2个alias别名3.InstallingOracleDatabase安装db软件,解开2个压缩包,加载一下上面建好的db_env环境变量,开始跑runInstaller,选择softwareonly,没啥好说的。注意ORACLE_HOME的路径和环境变量中定义的DB的ORACLE_HOME一致。在shardcat主机和shardnode主机,都需要安装好db软件。4.InstallingtheShardDirectorSoftware安装gds框架和gsm服务,解开gsm的压缩包,加载一下上面建好的gsm_env环境变量开始跑runInstaller,注意选择不同与DB的ORACLE_HOME,注意ORACLE_HOME的路径和环境变量中定义的gsm的ORACLE_HOME一致。本文中gds安装在和shardcat同一个主机上。即shardcat和shardDirector在同一主机。(其实,如果有需要,也可以不同主机的)4.b.Installerschagentinallshardnode(adminguide文档没写这步骤,本人免费赠送)选择client安装包,解压缩后,运行runInstaller,在每个shardnode上建立agent5.CreatingtheShardCatalogDatabase运行dbca开始建立数据库实例,这个实例是放分片数据的元数据的。我们把这个实例名叫shardcat。安装好后,再建立listener。以便可以连接这个数据库。6.SettingUptheOracleShardingManagementandRoutingTier7.DeployingandManagingaSystem-ManagedSDB我们开始部署,以最简单的System-ManagedSDB为例。另外,adminguide中介绍的是4台主机做shardnode,其中每2台互为dataguard主备。我们这边为了节约空间和资源,不搞dataguard了,只建立primary库。因此只要2台主机做shardnode。此时,就开始部署shard了。在shardnode上的agent会自动的调用netca和dbca,创建listener和database,2个shardnode的操作是并行进行的。(如果是有datauard,那么是先建立一对主备,再建立另一对主备。)你可以在分别是两个shardnode上ps-ef|grepora_看到已经有sh1和sh2的实例了。等deploy完,我们可以检查一下shard的情况了:建立service:(四)建立应用用户,利用应用用户建立shardedtable和duplicatedtable:利用应用用户登录,创建shardedtable和duplicatedtable至此,一个OracleShardingDatabase环境就搭建完毕了。欢迎大家体验这一新技术带来的数据库扩展性。