1. Oracle 12c Sharding 简介
Oracle即将在今年下半年发布12cR2的版本了,届时oracle的sharded database也会正式和大家见面。sharding技术的逻辑其实很简单:使用现有的partition技术,在12c R2之前的版本中我们所有的分区都是在一套physical库中,而现在使用新的分片技术我们可以做到将不同的分区放到不同的shard库中,而这些库都是相互独立没有任何通信的同时也没有地理位置的限制。但是为了cross shard的查询的一致性,在每一次进行查询的时候sdb会默认同步scn。相对我们普通的数据库或者maa架构数据库,sharded database有它自己的优势包括:1.数据库无限制的横向线性扩展、无需人为干预的自动rebalance、应用透明、分片库间的完全故障隔离、每个分片库可以单独打补丁升级等等。oracle sharding的技术下的sdb架构:GSM和shard catalog部署在同一套物理服务器,各个shard库分别部署在不同的物理服务器。GSM就相当于我们的网络路由器分发连接请求,而catalog则保存了sdb的元数据信息协调对各个分片的操作并且所有未分片表的原始数据都存储在这里,各个分片存储的都是这份数据的duplicated也就是我们常用的物化视图。Sdb模式下的oracle的连接请求大致可以分为两类:1.ucp方式也就是带 shard key的连接请求,sdb数据库本身就是依据shard key来划分shard的,当我们使用shard key进行操作时连接池会将该连接请求分发到指定的shard库中建立连接并执行我们的sql语句。2. non-shardkey&cross-shard query,正常的业务系统这种查询请求是非常常见的,对于这种没有shard key的查询,sdb会将连接请求交给coordinator库,他将会目标的sql解析并路由请求到正确的shard库上。
2. Oracle 12c Sharding测试环境搭建部署步骤
环境准备:shard0(GSM和shardcate),shard1(sh1),shard2(sh2)
软件要求:12.2.0.0.3及以上版本
(1)GSM软件部署
第一步修改环境变量如下:
[oracle@shard0 ~]$ env |grep ORA
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/12.2.0/gsmhome_1
第二步解压缩GSM.zip包并且执行runInstaller脚本(这里未来方便起见用了图形化界面)
直接点下一步(检查操作系统是否符合安装条件):

点next下一步:


点击install,这样GSM包就安装完成了。
后续的数据库软件安装就不展开介绍了选择NO-CDB选项即可。其他均与之前版本没有任何区别。
(2)shardcate库上用户及相关权限操作
ssh shard0
su – oracle
sqlplus / as sysdba
alter user gsmcatuser account unlock; --解锁gsm用户
alter user gsmcatuser identified by passwd_gsmcatuser; --修改gsm用户密码
create user mygdsadmin identified by passwd_mygdsadmin; --创建管理用户mygdsadmin
grant connect, create session to mygdsadmin;--赋权限给mygdsadmin
grant gsmadmin_role to mygdsadmin;--把gsm管理员角色赋予mygdsadmin
grant inherit privileges on user SYS to GSMADMIN_INTERNAL;
(3)shardcate上配置remote scheduler
ssh shard0
su - oralce
sqlplus / as sysdba
set echo on
set termout on
set time on
spool /u01/stage/labs/config_remote_scheduler.lst --设置配置输出的日志
execute dbms_xdb.sethttpport(8080);--指定scheduler所使用的端口号
Commit;
@?/rdbms/admin/prvtrsch.plb
exec DBMS_SCHEDULER.SET_AGENT_REGISTRATION_PASS('welcome'); --设置远程shard节点注册到shardcate库所需的密码
spool off
(4)分片库信息注册
ssh shard1
su – oracle
schagent –stop --停止shard库上的守护进程
schagent –start --停止shard库上的守护进程
schagent –status –查看shard库上的守护进程的状态
echo welcome |schagent -registerdatabase shard0 8080 –注册到远程shardcate库分别是密码、主机名、端口号
cd /data/oracle
mkdir oradata –创建shard库的数据文件存放位置
mkdir fast_recovery_area --创建shard库的快速恢复区的位置
ssh shard2
su – oracle
schagent -stop
schagent -start
schagent -status
echo welcome |schagent -registerdatabase shard0 8080
cd /data/oracle
mkdir oradata
mkdir fast_recovery_area
(5)配置GSM
ssh shard0
su – oracle --oracle用户
gdsctl --进入gsm交互界面
create shardcatalog -database shard0:1521:orcl -chunks 12 -user mygdsadmin/passwd_mygdsadmin -sdb cust_sdb -region region1
--创建shardcatalog库 –database ip(主机名):监听端口号:实例名 –chunks chunk的数量
-user 用户/密码 –sdb sdb名 –region 主端,备端
add gsm -gsm sharddirector1 -listener 1571 -pwd passwd_gsmcatuser -catalog shard0:1521:orcl –region -trace_level 16
--添加gsm –gsm gsm名 –listener 监听端口号 –pwd gsmcatuser用户密码 –catalog catalog库基本信息 ip(主机名):监听端口号:实例名 –region 指定是哪个region –trace_level 指定trace的级别位置LOG_DESTINATION参数控制
start gsm -gsm sharddirector1 –启动gsm
set _event 17
modify catalog -agent_password welcome –修改 catalog库守护进程密码为welcome
add credential -credential oracle_cred -osaccount oracle -ospassword oracle -- specify the operating system user that the extproc agent impersonates when running a subprogram stored in the library
ssh shard0
su – oracle
gdsctl –进入gsm命令交互模式
set gsm -gsm sharddirector1 –设置当前分片目录为sharddirector1
connect mygdsadmin/passwd_mygdsadmin –建立连接
add shardgroup -shardgroup shgrp1 -deploy_as primary -region region1 –添加主分片组
add invitednode shard1
create shard -shardgroup shgrp1 -destination shard1 -credential oracle_cred –-不同的shard库添加到不同的分片组里
add invitednode shard2
create shard -shardgroup shgrp2 -destination shard2 -credential oracle_cred –-不同的shard库添加到不同的分片组里
deploy 一键部署。
届时一套测试的sdb也搭建成功了,由于环境有限这里没有做容灾,oracle提供了ogg和adg两种方式做容灾而且也是支持一键部署的。