Sharding是一種水平數據分片的架構。每一個數據庫都有單獨的本地資源(CPU、內存、硬盤)。這樣的配置中,每一個數據庫被稱做分片shard。全部的分片合併在一塊兒湊成一個邏輯數據庫,這個邏輯的數據庫被稱做分片數據庫(SDB)。水平分片將一張數據庫中的表拆分紅多個分片,每一個分片有相同的列,可是具備不一樣的行。所以這樣的表也被稱做(sharded table)。html
另外它也是一種shared-nothing的架構,消除了單點故障(由於分片它不共享物理資源,如cpu、內存或存儲設備),在軟件方面也是鬆耦合的,因此它不須要運行集羣軟件。node
從DBA的角度來看,SDB由多個分片組成。這些分片能夠集體管理,也能夠單獨進行管理,然而從應用程序使用的角度上來看,SDB就是一個數據庫,分片的數量和數據在那個分片上對數據庫應用程序來講都是徹底透明的。數據庫
分片適用於OLTP應用程序,使用分片的應用程序必須具備良好的數據模型和數據分片的結構。例如(一致的hash、範圍、列表或者是這些組合),主要使用分片切分的鍵值來訪問數據。例如咱們可使用的分片鍵能夠是customer_id、Account_no或Country_id等等。安全
sharding主要的優勢:網絡
與其餘NoSQL數據庫不一樣,Oracle分片提供了分片的好處,而不犧牲企業級RDBMS的功能。它支持:session
Oracle Sharding的體系結構 以下圖所示:
Oracle Sharding 主要包括下面組件:架構
各個節點的角色以及數據庫版本以下表所示:
其中實例名是系統本身命名的。本文旨在介紹如何部署一個帶有adg功能的sharded database。oracle
這裏使用靜默方式在odb01上建立目錄數據庫。app
[oracle@odb01 ~]$ vi /tmp/dbca.rsp responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v12.2.0 gdbName=shcdb sid=shcdb databaseConfigType=SI RACOneNodeServiceName= policyManaged=false createServerPool=false force=false createAsContainerDatabase=false useLocalUndoForPDBs=true templateName=/u01/app/oracle/product/19.3.0/db_1/assistants/dbca/templates/General_Purpose.dbc sysPassword=abcABC12 systemPassword=abcABC12 serviceUserPassword=abcABC12 emConfiguration=DBEXPRESS emExpressPort=5500 runCVUChecks=FALSE dbsnmpPassword=abcABC12 dvConfiguration=false olsConfiguration=false datafileJarLocation={ORACLE_HOME}/assistants/dbca/templates/ datafileDestination={ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/ recoveryAreaDestination={ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME} storageType=FS characterSet=ZHS16GBK nationalCharacterSet=AL16UTF16 registerWithDirService=false variables=ORACLE_BASE_HOME=/u01/app/oracle/product/19.3.0/db_1,DB_UNIQUE_NAME=shcdb,ORACLE_BASE=/u01/app/oracle,PDB_NAME=,DB_NAME=shcdb,ORACLE_HOME=/u01/app/oracle/product/19.3.0/db_1,SID=shcdb initParams=sga_target=3GB,nls_language=AMERICAN,remote_login_passwordfile=EXCLUSIVE,db_create_file_dest={ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/,audit_file_dest={ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/adump,processes=1000,pga_aggregate_target=1GB,nls_territory=AMERICA,db_recovery_file_dest_size=30GB,open_cursors=300,db_name=shcdb,db_recovery_file_dest={ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME},audit_trail=NONE sampleSchema=false memoryPercentage=65 databaseType=MULTIPURPOSE automaticMemoryManagement=false totalMemory=0 [oracle@odb01 ~]$ dbca -silent -ignorePreReqs -createDatabase -responseFile /tmp/dbca.rsp -enableArchive true -redoLogFileSize 1024
待數據庫建立完成後,執行下面的SQL,完成後重啓數據庫實例。ide
alter system set open_links=16 scope=spfile; alter system set open_links_per_instance=16 scope=spfile; alter user gsmcatuser account unlock; alter user gsmcatuser identified by oracle; create user gdsadmin identified by oracle; GRANT connect, create session, gsmadmin_role to gdsadmin; grant inherit privileges on user SYS to GSMADMIN_INTERNAL; execute dbms_xdb.sethttpport(8080); commit; @?/rdbms/admin/prvtrsch.plb exec DBMS_SCHEDULER.SET_AGENT_REGISTRATION_PASS('oracle'); SQL> shutdown immediate SQL> startup
GSM的安裝很簡單,這裏使用靜默方式安裝,靜默文件內容以下:
[oracle@odb01 ~]$ vi /tmp/gsm.rsp oracle.install.responseFileVersion=/oracle/install/rspfmt_gsminstall_response_schema_v19.0.0 UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oraInventory ORACLE_HOME=/u01/app/oracle/product/19.3.0/gsm ORACLE_BASE=/u01/app/oracle [oracle@odb01 ~]$ /u02/tmp/gsm/runInstaller -silent -ignorePrereq -responseFile /tmp/gsm.rsp
[oracle@odb01 ~]$ gdsctl GDSCTL: Version 19.0.0.0.0 - Production on Mon Jul 15 11:09:20 CST 2019 Copyright (c) 2011, 2019, Oracle. All rights reserved. Welcome to GDSCTL, type "help" for information. Warning: GSM is not set automatically because gsm.ora does not contain GSM entries. Use "set gsm" command to set GSM for the session. Current GSM is set to GSMORA GDSCTL> create shardcatalog -database odb01:1521:shcdb -chunks 12 -user gdsadmin/oracle -sdb shcdb -region region1,region2 GDSCTL> add gsm -gsm sharddirector1 -listener 1531 -pwd oracle -catalog odb01:1521:shcdb -region region1 GDSCTL> add gsm -gsm sharddirector2 -listener 1531 -pwd oracle -catalog odb01:1521:shcdb -region region2 GDSCTL> start gsm -gsm sharddirector1
添加操做系統憑證
GDSCTL> add credential -credential cre_reg1 -osaccount oracle -ospassword oracle
[oracle@odb05 ~]$ schagent -start;echo oracle|schagent -registerdatabase odb01 8080 [oracle@odb06 ~]$ schagent -start;echo oracle|schagent -registerdatabase odb01 8080 [oracle@odb07 ~]$ schagent -start;echo oracle|schagent -registerdatabase odb01 8080 [oracle@odb08 ~]$ schagent -start;echo oracle|schagent -registerdatabase odb01 8080
[oracle@odb05 ~]$ mkdir /u01/app/oracle/{oradata,fast_recovery_area} [oracle@odb06 ~]$ mkdir /u01/app/oracle/{oradata,fast_recovery_area} [oracle@odb07 ~]$ mkdir /u01/app/oracle/{oradata,fast_recovery_area} [oracle@odb08 ~]$ mkdir /u01/app/oracle/{oradata,fast_recovery_area}
這裏分別建立primary group和standby group。
GDSCTL> add shardgroup -shardgroup primary_sgp -region region1 -deploy_as primary GDSCTL> add shardgroup -shardgroup standby_sgp -region region2 -deploy_as active_standby
GDSCTL> add invitednode odb05 GDSCTL> create shard -shardgroup primary_sgp -destination odb05 -credential cre_reg1 The operation completed successfully DB Unique Name: sh1 GDSCTL> add invitednode odb06 GDSCTL> create shard -shardgroup primary_sgp -destination odb06 -credential cre_reg1 The operation completed successfully DB Unique Name: sh3 GDSCTL> add invitednode odb07 GDSCTL> create shard -shardgroup standby_sgp -destination odb07 -credential cre_reg1 The operation completed successfully DB Unique Name: sh4 GDSCTL> add invitednode odb08 GDSCTL> create shard -shardgroup standby_sgp -destination odb08 -credential cre_reg1 The operation completed successfully DB Unique Name: sh5
使用config命令讀取配置信息進行驗證,以下圖:
GDSCTL> deploy deploy: examining configuration... deploy: deploying primary shard 'sh1' ... deploy: network listener configuration successful at destination 'odb05' deploy: starting DBCA at destination 'odb05' to create primary shard 'sh1' ... deploy: deploying primary shard 'sh3' ... deploy: network listener configuration successful at destination 'odb06' deploy: starting DBCA at destination 'odb06' to create primary shard 'sh3' ... deploy: waiting for 2 DBCA primary creation job(s) to complete... deploy: waiting for 2 DBCA primary creation job(s) to complete... deploy: waiting for 2 DBCA primary creation job(s) to complete... deploy: waiting for 2 DBCA primary creation job(s) to complete... deploy: waiting for 2 DBCA primary creation job(s) to complete... deploy: waiting for 2 DBCA primary creation job(s) to complete... deploy: waiting for 2 DBCA primary creation job(s) to complete... deploy: waiting for 2 DBCA primary creation job(s) to complete... deploy: waiting for 2 DBCA primary creation job(s) to complete... deploy: waiting for 2 DBCA primary creation job(s) to complete... deploy: waiting for 2 DBCA primary creation job(s) to complete... deploy: waiting for 2 DBCA primary creation job(s) to complete... deploy: DBCA primary creation job succeeded at destination 'odb05' for shard 'sh1' deploy: deploying standby shard 'sh4' ... deploy: network listener configuration successful at destination 'odb07' deploy: starting DBCA at destination 'odb07' to create standby shard 'sh4' ... deploy: DBCA primary creation job succeeded at destination 'odb06' for shard 'sh3' deploy: deploying standby shard 'sh5' ... deploy: network listener configuration successful at destination 'odb08' deploy: starting DBCA at destination 'odb08' to create standby shard 'sh5' ... deploy: waiting for 2 DBCA standby creation job(s) to complete... deploy: waiting for 2 DBCA standby creation job(s) to complete... deploy: waiting for 2 DBCA standby creation job(s) to complete... deploy: waiting for 2 DBCA standby creation job(s) to complete... deploy: waiting for 2 DBCA standby creation job(s) to complete... deploy: DBCA standby creation job succeeded at destination 'odb07' for shard 'sh4' deploy: waiting for 1 DBCA standby creation job(s) to complete... deploy: DBCA standby creation job succeeded at destination 'odb08' for shard 'sh5' deploy: requesting Data Guard configuration on shards via GSM deploy: shards configured successfully The operation completed successfully
部署完成後,進行驗證,以下圖所示:
GDSCTL> add service -service oltp_rw_srvc -role primary The operation completed successfully GDSCTL> start service -service oltp_rw_srvc The operation completed successfully GDSCTL> add service -service oltp_ro_srvc -role physical_standby The operation completed successfully GDSCTL> start service -service oltp_ro_srvc The operation completed successfully GDSCTL> services Service "oltp_ro_srvc.shcdb.oradbcloud" has 2 instance(s). Affinity: ANYWHERE Instance "shcdb%21", name: "sh4", db: "sh4", region: "region2", status: ready. Instance "shcdb%31", name: "sh5", db: "sh5", region: "region2", status: ready. Service "oltp_rw_srvc.shcdb.oradbcloud" has 2 instance(s). Affinity: ANYWHERE Instance "shcdb%1", name: "sh1", db: "sh1", region: "region1", status: ready. Instance "shcdb%11", name: "sh3", db: "sh3", region: "region1", status: ready.
驗證DataGuard狀態