公有云服务我所欲也,Oracle分布式数据库Sharding亦我所欲也,而且基于云服务能力的快速部署能力,我们还可更容易的发挥分布式数据库的无限扩展能力。这两项的关键技术,第一是,在oracle 12cR2 中最引人注目的是sharding技术,第二是公有云上的IaaS服务能力。如果小伙伴们急切地想体验一下 sharding的魅力,下面我就给大家做个展示吧。
一、Oracle Sharding架构
一图胜过千言万语,但是这里需要强调的是,在生产环境中所有shard结点数据库均应部署dataguard,从而保证数据库整体容灾和高可用性,在本例中,为了达到通过最少的资源演示最多的功能目的,所有shard节点均使用单节点数据库,同时gsm server和catalog也未考虑高可用,因为考虑到大家在生产环境中一定都很熟悉Oracle的dataguard选项了。
二、部署前准备
1、 订阅oracle Iaas公有云服务或申请免费的测试用户,申请连接:https://shop.oracle.com/apex/f?p=cloud:free&intcmp=cloud-tryit
2、根据上述配置,申请5个Iaas服务,建立5个虚拟服务器,操作系统版本选择Oracle Linux 6.7 UEK4,shape选择 oc3(1 ocpu,7.5G memory)或oc1m(1 ocpu 15G memory)
3、 为每个服务器额外申请额外3个storage volume,分别用于存储安装介质、oracle软件和数据文件,存储数据文件的volume建议选择storage/latency类型或storage/ssd/gpl。大小分别为20G,20G,和100G(具体根要根据存储数据大小确定)
4、 虚拟机建好后,分别安装相应补丁与必要软件包,命令如下:
Yum install oracle-database-server-12cR2-preinstall -y
安装oracle 12c preinstall package,自动建立相应用户和权限,并安装相应oracle需要的补丁
yum install tigervnc-server -y
yum install -y
yum install xorg-x11-twm -y
安装vncserver,以后可以通过它启动firefox浏览器下载安装介质,并运行runInstaller和dbca
yum install firefox -y
安装Firefox,通过OTN下载安装介质
5、 下载介质
GSM server介质:
http://download.oracle.com/otn/linux/oracle12c/122010/linuxx64_12201_database.zip
Oracle 12cR2介质:
http://download.oracle.com/otn/linux/oracle12c/122010/linuxx64_12201_gsm.zip
6、 初始化相应文件卷
初始化安装介质文件卷:
parted /dev/xvdc mklabel gpt
parted /dev/xvdc mkpart primary ext4 1 100%
mkfs -t ext4 /dev/xvdc1
mount /dev/xvdc1 /media
初始化oracle软件文件卷:
parted /dev/xvdd mklabel gpt
parted /dev/xvdd mkpart primary ext4 1 100%
mkfs -t ext4 /dev/xvdd1
mount /dev/xvdd1 /u01
初始化数据文件卷:
parted /dev/xvde mklabel gpt
parted /dev/xvde mkpart primary ext4 1 100%
mkfs -t ext4 /dev/xvde1
mount /dev/xvde1 /oradata
三、部署 catalog数据库
在catalog服务器上部署shard catalog。
1、 设置环境变量
在catalog节点需要准备两套环境变量,其中之一为catalog数据库,内容如下:
export ORACLE_SID=catdb
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin
2、 安装Oracle 12cR2软件
使用 runIinstaller安装Oracle 12cR2企业版软件。缺省安装在/u01目录下。
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202104/15/9596e29d1316fcf41e5d73d7c8c17cd6.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
3、 建立catalog数据库
建立catalog数据库,数据库实例名称可以自己定。数据文件和recovery区选择刚刚建立的data volumn文件卷,oracle 12.2 sharding不支持多租户模式,所以需要建立Non-CDB数据库,在未来的oracle 18以后取消该限制。
## 四、部署GSM server
1、 设置环境
在catalog节点需要准备两套环境变量,其中之一为GSM server,内容如下:
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/gsmhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin
2、 安装gsm 软件
使用 runIinstaller安装GSM server软件。缺省安装在/u01目录下。
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202104/15/70d7a3d08bc841798787930aaca01003.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
3、 初始化catalog数据库
mkdir /u01/app/oracle/oradata
mkdir /u01/app/oracle/fast_recovery_area
sqlplus / as sysdba
SQL>alter system set db_create_file_dest= \
'/u01/app/oracle/oradata' scope=both;
SQL> alter system set open_links=16 scope=spfile;
SQL> alter system set open_links_per_instance=16 scope=spfile;
SQL> shutdown immediate
SQL> startup
SQL> spool setup_grants_privs.lst
SQL> alter user gsmcatuser account unlock;
SQL> alter user gsmcatuser identified by welcome1;
SQL> create user mygdsadmin identified by welcome1;
SQL> grant connect, create session, gsmadmin_role to mygdsadmin;
SQL> alter system set events 'immediate trace name GWM_TRACE level 7';
SQL> alter system set event='10798 trace name context forever, level 7' SCOPE=spfile;
SQL> spool off
4、 创建shardcatalog
GDSCTL > create shardcatalog -database catlog:1521:catdb -chunks 12 -user mygdsadmin/welcome1 -sdb cust_sdb -region region1 -agent_port 8080 -agent_password welcome1
5、 创建并启动 shard director(GSM)
GDSCTL > add gsm -gsm sharddirector1 -listener 1571 -pwd welcome1 -catalog catlog:1521:catdb -region region1 -trace_level 16
GDSCTL > start gsm -gsm sharddirector1
GDSCTL > set _event 17 -config_only
6、 通过gdsctl检查相应服务
GDSCTL > config shard
## 五、部署shard
部署shard的方式有两种:createshard和addshard,其中createshard方式只需要在shard节点安装Oracle 12cR2软件,不要建立数据量实例,Oracle会自动建立shard节点所需要的实例并配置好相应的设置。
1、 设置环境变量
export ORACLE_SID=sh1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin
2、 建立credential
在GSM节点执行:
GDSCTL > add credential -credential oracle_cred -osaccount oracle -ospassword oracle
GDSCTL > add shardgroup -shardgroup shgrp1 -deploy_as primary -region region1
3、 Shard端在gsm server上注册
mkdir /u01/app/oracle/oradata
mkdir /u01/app/oracle/fast_recovery_area
schagent -start
schagent -status
echo welcome1 | schagent -registerdatabase catlog 8080
4、 安装Oracle软件
使用 runIinstaller安装Oracle 12cR2企业版软件。缺省安装在/u01目录下。
5、 在GSM端增加shard节点
GDSCTL > add invitednode mydb1
GDSCTL > create shard -shardgroup shgrp1 -destination mydb3 -credential oracle_cred
GDSCTL> config shard
Name Shard Group Status State Region Availability
sh1 shgrp1 U none region1 -
sh2 shgrp1 U none region1 -
6、 自动部署shard
GDSCTL > deploy
GDSCTL> config shard
Name Shard Group Status State Region Availability
sh1 shgrp1 Ok Deployed region1 ONLINE
sh2 shgrp1 Ok Deployed region1 ONLINE
## 六、增加Shard(可选)
部署shard的方式有两种:createshard和addshard,其中addshard方式是针对在shard节点已有数据库实例,通过手工方式将该节点加入shard集群, oracle 12.2 sharding不支持多租户模式,所以只支持Non-CDB数据库,oracle 18以后取消该限制。
1、 设置环境变量
export ORACLE_SID=sh3
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin
2、 配置shard节点数据库
在shard节点的数据库上执行包:
sql >execute DBMS_GSM_FIX.validateShard
该程序会检查当前环境是否符合部署shard,根据提示,修改数据库配置,使其满足所有检查项目。
3、 Shard端在gsm server上注册
mkdir /u01/app/oracle/oradata
mkdir /u01/app/oracle/fast_recovery_area
schagent -start
schagent -status
echo welcome1 | schagent -registerdatabase catlog 8080
4、 在GSM端增加shard节点
GDSCTL > add invitednode mydb1
GDSCTL > add shard -shardgroup shgrp1 -connect mydb3:1521/sh3 -pwd oracle
GDSCTL> config shard
Name Shard Group Status State Region Availability
sh1 shgrp1 Ok Deployed region1 ONLINE
sh2 shgrp1 Ok Deployed region1 ONLINE
sh3 shgrp1 U none region1 -
sh4 shgrp1 U none region1 -
5、 自动部署shard
GDSCTL > deploy
GDSCTL> config shard
Name Shard Group Status State Region Availability
sh1 shgrp1 Ok Deployed region1 ONLINE
sh2 shgrp1 Ok Deployed region1 ONLINE
sh3 shgrp1 Ok Deployed region1 ONLINE
sh4 shgrp1 Ok Deployed region1 ONLINE
## 一些思考
“
如果环境许可,你有本地的5台主机,也可以按照如上步骤部署12c的sharding数据库。但和公有云的计算环境申请比较起来,这样方式本地基础环境的部署时间也长,对资源消耗也大。在公有云上采用按需申请的方式,所有系统的预镜像,软件包的安装,都可以快速完成,极大简化系统的运维工作,并且未来Sharing数据库的动态扩展,都可以在云上实现即时增加,弹性伸缩能力凸显。作为在公有云,本地私有云和混合云的综合领先厂商,ORACLE和其他厂商的最大区别在于所有的软件架构一致,云上和本地部署使用方式一致,在未来,我们可以模糊Sharing的具体部署地点,如一般业务阶段在本地部署,遇到如双十一等促销高峰,可以实现Sharding在云上的弹性扩展,满足混合部署的特定业务需求能力。这是不是非常的炫酷呢?
### 点击左下角“阅读原文”按钮下载Word原文
编辑 | Alex