12C Sharding 学习安装

软件安装

主机分配

主机名       IP                        配置    用途
shardgsm 172.17.201.101   2U3G 分片目录
shardcatdb 172.17.201.102 4U5G 配置库
shard1 172.17.201.103       4U5G 分片数据库1
shard2 172.17.201.104       4U5G 分片数据库2

/etc/hosts
172.17.201.101 shardgsm shardgsm.localdomain
172.17.201.102 shardcat shardcat.localdomain
172.17.201.103 shard1 shard1.localdomain
172.17.201.104 shard2 shard2.localdomain

systemctl stop firewalld
systemctl disable firewalld

GSM安装

# xhost +
# su - oracle
Last login: Sat Dec 9 16:08:35 CST 2017 on pts/0
$ export DISPLAY=172.17.201.10:0.0
$ ./runInstaller


/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/12.2.0/db_1/root.sh

RDBMS安装
在另外三个节点进行安装

xhost +
su - oracle
export DISPLAY=172.17.201.10:0.0

cd /u01/soft/
unzip linuxx64_12201_database.zip

$ ./runInstaller


/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/12.2.0/db_1/root.sh

配置库

dbca创建配置库

在shardcat节点安装数据库
mkdir -p /u01/data/arch
mkdir -p /u01/data/fra
chown -R oracle.oinstall /u01/data
非容器,不安装OEM,开启归档、闪回
dbca -silent -deleteDatabase -sourceDB catdb
dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname catdb -sid catdb
-sysPassword Admin_123 -systemPassword Admin_123 -responseFile NO_VALUE
-storageType FS -datafileDestination /u01/data -redoLogFileSize 500
-enableArchive true -archiveLogDest /u01/data/arch
-recoveryAreaDestination /u01/data/fra -recoveryAreaSize 20480
-characterSet AL32UTF8 -nationalCharacterSet AL16UTF16 -sampleSchema true -memoryPercentage 30 -databaseType OLTP -emConfiguration NONE

配置监听


[oracle@shardcat admin]$ cd /u01/app/oracle/product/12.2.0/db_1/network/admin
[oracle@shardcat admin]$ cp samples/listener.ora .
[oracle@shardcat admin]$ vim listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = shardcat)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
[oracle@shardcat admin]$ lsnrctl start
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=shardcat)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=shardcat)(PORT=8080))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "catdb" has 1 instance(s).
Instance "catdb", status READY, has 1 handler(s) for this service...
Service "catdbXDB" has 1 instance(s).
Instance "catdb", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@shardcat ~]$


账户配置

alter user gsmcatuser identified by Admin_123 account unlock;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

gsm帐户是数据库管理员模式,用于对sharded数据库环境进行管理更改。当运行GDSCTL命令时,GDSCTL通过该用户连接到数据库,gsm用户在数据库中进行必要的更改。

create user gsm identified by Admin123 default tablespace users quota unlimited on users;
grant gsmadmin_role to gsm;
grant connect,create session to gsm;
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('Admin_123');


参数配置


alter system set db_create_file_dest='/u01/data/catdb' scope=both;
alter system set open_links=16 scope=spfile;
alter system set open_links_per_instance=16 scope=spfile;
create pfile from spfile;

重启数据库

为了使配置的参数生效,重启数据库实例
shutdown immediate


GSM管理

登录GSM服务器

create配置库

[oracle@shardgsm admin]$ cat tnsnames.ora
catdbtns =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = shardcat.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = catdb)
)
)

[oracle@shardgsm gsm]$ gdsctl
GDSCTL: Version 12.2.0.1.0 - Production on Sat Dec 09 20:01:22 CST 2017
Current GSM is set to GSMORA
GDSCTL>
create shardcatalog -database catdbtns -chunks 36 -user gsm/Admin123 -sdb sdbname -region region1, region2 -agent_port 8080 -agent_password Admin_123

-sdb sharding库的名字,可自定义
-region 创建两个区域
-agent_port配置库服务器上开放的供shard库注册的端口,默认8080


shard director
connect gsm/Admin123@catdbtns
add gsm -gsm gsmdrt1 -listener 1526 -pwd Admin_123 -catalog catdbtns -region region1
start gsm -gsm gsmdrt1

GDSCTL>status gsm
Alias GSMDRT1
Version 12.2.0.1.0
Start Date 09-DEC-2017 20:53:34
Trace Level off
Listener Log File /u01/app/oracle/diag/gsm/shardgsm/gsmdrt1/alert/log.xml
Listener Trace File /u01/app/oracle/diag/gsm/shardgsm/gsmdrt1/trace/ora_9573_140348623991168.trc
Endpoint summary (ADDRESS=(HOST=shardgsm)(PORT=1526)(PROTOCOL=tcp))
GSMOCI Version 2.2.1
Mastership Y
Connected to GDS catalog Y
Process Id 9575
Number of reconnections 0
Pending tasks. Total 0
Tasks in process. Total 0
Regional Mastership TRUE
Total messages published 0
Time Zone +08:00
Orphaned Buddy Regions:
None
GDS region region1

添加操作系统认证
用于执行dbca等操作的用户。
GDSCTL>add credential -credential credos -osaccount oracle -ospassword oracle

注册shard到配置库
登录各个shard分片服务器
创建必要目录
mkdir /u01/app/oracle/oradata
mkdir /u01/app/oracle/fast_recovery_area
chown -R oracle.oinstall /u01/app/oracle/oradata
chown -R oracle.oinstall /u01/app/oracle/fast_recovery_area

启动agent,并注册数据库
schagent -start
echo Admin_123 | schagent -registerdatabase shardcat 8080

shardcat:配置库主机名
8080:配置库开放的端口

注意:如果注册失败,并导致用户锁住,要重新执行
SQL> @?/rdbms/admin/prvtrsch.plb
SQL> exec DBMS_SCHEDULER.SET_AGENT_REGISTRATION_PASS('Admin_123');

部署System-Managed SDB

先决条件

They must not be container databases (CDBs)
They must have an associated TNS Listener on port 1521 on each host
The GSMUSER account must be unlocked with a known password
The primary and standby databases must be configured as such
Redo apply should be set up between the corresponding primary and standby databases
Flashback and force logging should be enabled
The compatible parameter must be set to at least 12.2.0
A server parameter file (SPFILE) must be in use
A DATA_PUMP_DIR directory object must be created in each database and must point to a valid directory

shard库检查

SQL> set serveroutput on
SQL> execute DBMS_GSM_FIX.validateShard
INFO: Data Guard shard validation requested.
INFO: Database role is PRIMARY.
INFO: Database name is CATDB.
INFO: Database unique name is catdb.
INFO: Database ID is 2507992168.
INFO: Database open mode is READ WRITE.
INFO: Database in archivelog mode.
WARNING: Flashback is off.
ERROR: Force logging is off.
INFO: Database platform is Linux x86 64-bit.
INFO: Database character set is AL32UTF8. This value must match the character
set of the catalog database.
INFO: 'compatible' initialization parameter validated successfully.
INFO: Database is not a multitenant container database.
INFO: Database is using a server parameter file (spfile).
INFO: db_create_file_dest set to: '/u01/data/catdb'
INFO: db_recovery_file_dest set to: '/u01/data/fra'
INFO: db_files=200. Must be greater than the number of chunks and/or tablespaces
to be created in the shard.
ERROR: dg_broker_start set to FALSE.
INFO: remote_login_passwordfile set to EXCLUSIVE.
WARNING: db_file_name_convert is not set.
ERROR: GSMUSER account status is invalid: EXPIRED & LOCKED
ERROR: GSMADMIN_INTERNAL does not have READ privilege on DATA_PUMP_DIR.
ERROR: GSMADMIN_INTERNAL does not have WRITE privilege on DATA_PUMP_DIR.
INFO: DATA_PUMP_DIR is '/u01/app/oracle/admin/catdb/dpdump/'.

PL/SQL procedure successfully completed.

开启闪回、强制日志、DG_BROKER
SQL> shutdown immediate
SQL> startup mount;
SQL> alter database flashback on;
SQL> alter database force logging;
SQL> alter system set dg_broker_start=true;
SQL> show parameter dg_broker

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1 string /u01/app/oracle/product/12.2.0
/db_1/dbs/dr1catdb.dat
dg_broker_config_file2 string /u01/app/oracle/product/12.2.0
/db_1/dbs/dr2catdb.dat
dg_broker_start boolean TRUE

SQL> alter database open;

解锁账户
SQL> alter USER GSMUSER IDENTIFIED BY Admin_123 account unlock;

dump目录授权
[root@shardcat ~]# mkdir /u01/dumps
[root@shardcat ~]# chown -R oracle.dba /u01/dumps/
CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR as '/u01/dumps';
grant read,write on directory DATA_PUMP_DIR to GSMADMIN_INTERNAL;

连接配置库

[oracle@shardgsm ~]$ gdsctl
Current GSM is set to GSMDRT1
GDSCTL>connect gsm/Admin123@catdbtns
Catalog connection is established

添加shardgroup

GDSCTL>add shardgroup -shardgroup primary_shardgroup -deploy_as primary -region region1
Catalog connection is established
The operation completed successfully

添加shard database节点并创建shards

GDSCTL>add invitednode shard1
GDSCTL>create shard -shardgroup primary_shardgroup -destination shard1 -credential credos -sys_password Admin_123
The operation completed successfully
DB Unique Name: sh1
GDSCTL>add invitednode shard2
GDSCTL>create shard -shardgroup primary_shardgroup -destination shard2 -credential credos -sys_password Admin_123
The operation completed successfully
DB Unique Name: sh2

检查shard 配置

GDSCTL>config shard
Name Shard Group Status State Region Availability
---- ----------- ------ ----- ------ ------------
sh1 primary_shardgroup U none region1 -
sh2 primary_shardgroup U none region1 -


使用DEPLOY创建shards和复制数据
大约需要30分钟,需要在shards执行dbca。
GDSCTL>deploy
deploy: examining configuration...
deploy: deploying primary shard 'sh1' ...
deploy: network listener configuration successful at destination 'shard1'
deploy: starting DBCA at destination 'shard1' to create primary shard 'sh1' ...
deploy: deploying primary shard 'sh2' ...
deploy: network listener configuration successful at destination 'shard2'
deploy: starting DBCA at destination 'shard2' to create primary shard 'sh2' ...
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: 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 'shard1' for shard 'sh1'
deploy: DBCA primary creation job succeeded at destination 'shard2' for shard 'sh2'
deploy: requesting Data Guard configuration on shards via GSM
deploy: shards configured successfully
The operation completed successfully

验证shards
GDSCTL>config shard
Name Shard Group Status State Region Availability
---- ----------- ------ ----- ------ ------------
sh1 primary_shardgroup Ok Deployed region1 ONLINE
sh2 primary_shardgroup Ok Deployed region1 ONLINE


[oracle@shard1 sh1]$ ll
total 2013452
-rw-r-----. 1 oracle oinstall 10600448 Dec 10 13:18 control01.ctl
-rw-r-----. 1 oracle oinstall 10600448 Dec 10 13:18 control02.ctl
-rw-r-----. 1 oracle oinstall 209715712 Dec 10 13:18 redo01.log
-rw-r-----. 1 oracle oinstall 209715712 Dec 10 12:52 redo02.log
-rw-r-----. 1 oracle oinstall 209715712 Dec 10 12:52 redo03.log
-rw-r-----. 1 oracle oinstall 492838912 Dec 10 13:17 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 838868992 Dec 10 13:12 system01.dbf
-rw-r-----. 1 oracle oinstall 33562624 Dec 10 12:44 temp01.dbf
-rw-r-----. 1 oracle oinstall 73408512 Dec 10 13:12 undotbs01.dbf
-rw-r-----. 1 oracle oinstall 5251072 Dec 10 12:52 users01.dbf


[oracle@shard1 sh1]$ export ORACLE_SID=sh1
[oracle@shard1 sh1]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Sun Dec 10 13:18:48 2017

Copyright (c) 1982, 2016, Oracle. All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show parameter arch

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
log_archive_config string
log_archive_dest string
log_archive_dest_1 string location=use_db_recovery_file_
dest mandatory valid_for=(all_logfiles,all_roles)

SQL> select name,force_logging,flashback_on from v$database;

NAME FORCE_LOGGING FLASHBACK_ON
--------- --------------------------------------- ------------------
SH1 YES YES

创建用户、表空间、表

为System-Managed SDB创建用户
alter session enable shard ddl;
create user sharduser identified by sharduser;
grant all privileges to sharduser ;
grant gsmadmin_role to sharduser ;
grant select_catalog_role to sharduser ;
grant connect, resource to sharduser ;
grant dba to sharduser ;
grant execute on dbms_crypto to sharduser ;


创建表空间
创建表空间集用存储shared表
CREATE TABLESPACE SET TSP_SET_1 using template (datafile size 100m autoextend on next 10M maxsize unlimited extent management local segment space management auto);


为Duplicated表创建表空间
CREATE TABLESPACE products_tsp datafile size 100m autoextend on next 10M maxsize unlimited extent management local uniform size 1m;

shard用户创建Sharded表和Duplicated表

[oracle@shardcat admin]$ sqlplus sharduser/sharduser
ALTER SESSION ENABLE SHARD DDL;

CREATE SHARDED TABLE Customers
(
CustId VARCHAR2(60) NOT NULL,
FirstName VARCHAR2(60),
LastName VARCHAR2(60),
Class VARCHAR2(10),
Geo VARCHAR2(8),
CustProfile VARCHAR2(4000),
Passwd RAW(60),
CONSTRAINT pk_customers PRIMARY KEY (CustId),
CONSTRAINT json_customers CHECK (CustProfile IS JSON)
) TABLESPACE SET TSP_SET_1
PARTITION BY CONSISTENT HASH (CustId) PARTITIONS AUTO;

CREATE SHARDED TABLE Orders
(
OrderId INTEGER NOT NULL,
CustId VARCHAR2(60) NOT NULL,
OrderDate TIMESTAMP NOT NULL,
SumTotal NUMBER(19,4),
Status CHAR(4),
CONSTRAINT pk_orders PRIMARY KEY (CustId, OrderId),
CONSTRAINT fk_orders_parent FOREIGN KEY (CustId)
REFERENCES Customers ON DELETE CASCADE
) PARTITION BY REFERENCE (fk_orders_parent);

CREATE SEQUENCE Orders_Seq;

CREATE SHARDED TABLE LineItems
(
OrderId INTEGER NOT NULL,
CustId VARCHAR2(60) NOT NULL,
ProductId INTEGER NOT NULL,
Price NUMBER(19,4),
Qty NUMBER,
CONSTRAINT pk_items PRIMARY KEY (CustId, OrderId, ProductId),
CONSTRAINT fk_items_parent FOREIGN KEY (CustId, OrderId)
REFERENCES Orders ON DELETE CASCADE
) PARTITION BY REFERENCE (fk_items_parent);

CREATE DUPLICATED TABLE Products
(
ProductId INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
Name VARCHAR2(128),
DescrUri VARCHAR2(128),
LastPrice NUMBER(19,4)
) TABLESPACE products_tsp;

验证上面的DDL操作是否有失败的
可以看到Failed shards是空的,表示所有操作均执行成功。
GDSCTL>show ddl
id DDL Text Failed shards
-- -------- -------------
5 grant connect, resource to sharduser
6 grant dba to sharduser
7 grant execute on dbms_crypto to shard...
8 CREATE TABLESPACE SET TSP_SET_1 using...
9 CREATE TABLESPACE products_tsp datafi...
10 CREATE SHARDED TABLE Customers ( ...
11 CREATE SHARDED TABLE Orders ( O...
12 CREATE SEQUENCE Orders_Seq
13 CREATE SHARDED TABLE LineItems ( ...
14 CREATE MATERIALIZED VIEW "SHARDUSER"....

配置库验证表空间集,表
配置库
select TABLESPACE_NAME, BYTES/1024/1024 MB from sys.dba_data_files order by tablespace_name;

sharduser登录
select table_name,
tablespace_name,
pct_free,
pct_used,
ini_trans,
max_trans,
logging,
partitioned,
has_identity
from user_tables;

select t.table_name,
t.partitioning_type,
t.partition_count,
t.partitioning_key_count,
t.def_tablespace_name,
t.ref_ptn_constraint_name,
t.def_pct_free,
t.def_pct_used
from USER_PART_TABLES t;

select table_name, partition_name, tablespace_name
from dba_tab_partitions
where tablespace_name like '%TSP_SET_1'
order by tablespace_name;

分片库1
[oracle@shard1 ~]$ sqlplus sharduser/sharduser
SQL> select table_name from user_tables;

TABLE_NAME
--------------------------------------------------------------------------------
CUSTOMERS
ORDERS
LINEITEMS
PRODUCTS

分片库2
[oracle@shard2 ~]$ sqlplus sharduser/sharduser
SQL> select table_name from user_tables;

TABLE_NAME
--------------------------------------------------------------------------------
CUSTOMERS
ORDERS
LINEITEMS
PRODUCTS

分片库验证表分片
[oracle@shard1 ~]$ sqlplus / as sysdba
SQL> show parameter db_unique_name

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string sh1

set linesize 140
column table_name format a20
column tablespace_name format a20
column partition_name format a20
select table_name, partition_name, tablespace_name
from dba_tab_partitions
where tablespace_name like '%TSP_SET_1'
order by tablespace_name;


ROWNUM TABLE_NAME PARTITION_NAME TABLESPACE_NAME
---------- -------------------- -------------------- --------------------
1 CUSTOMERS CUSTOMERS_P4 C004TSP_SET_1
106 CUSTOMERS CUSTOMERS_P2 C002TSP_SET_1
7 CUSTOMERS CUSTOMERS_P19 TSP_SET_1
8 CUSTOMERS CUSTOMERS_P20 TSP_SET_1
9 CUSTOMERS CUSTOMERS_P21 TSP_SET_1
10 CUSTOMERS CUSTOMERS_P22 TSP_SET_1
11 CUSTOMERS CUSTOMERS_P23 TSP_SET_1
12 CUSTOMERS CUSTOMERS_P24 TSP_SET_1
13 CUSTOMERS CUSTOMERS_P25 TSP_SET_1
14 CUSTOMERS CUSTOMERS_P26 TSP_SET_1
15 CUSTOMERS CUSTOMERS_P27 TSP_SET_1

ROWNUM TABLE_NAME PARTITION_NAME TABLESPACE_NAME
---------- -------------------- -------------------- --------------------
16 CUSTOMERS CUSTOMERS_P28 TSP_SET_1
17 CUSTOMERS CUSTOMERS_P29 TSP_SET_1
18 CUSTOMERS CUSTOMERS_P30 TSP_SET_1
19 CUSTOMERS CUSTOMERS_P31 TSP_SET_1
20 CUSTOMERS CUSTOMERS_P32 TSP_SET_1
21 CUSTOMERS CUSTOMERS_P33 TSP_SET_1
22 CUSTOMERS CUSTOMERS_P34 TSP_SET_1
23 CUSTOMERS CUSTOMERS_P35 TSP_SET_1
24 CUSTOMERS CUSTOMERS_P36 TSP_SET_1
61 CUSTOMERS CUSTOMERS_P7 C007TSP_SET_1
64 CUSTOMERS CUSTOMERS_P9 C009TSP_SET_1

ROWNUM TABLE_NAME PARTITION_NAME TABLESPACE_NAME
---------- -------------------- -------------------- --------------------
67 CUSTOMERS CUSTOMERS_P17 C00HTSP_SET_1
70 CUSTOMERS CUSTOMERS_P12 C00CTSP_SET_1
73 CUSTOMERS CUSTOMERS_P14 C00ETSP_SET_1
76 CUSTOMERS CUSTOMERS_P13 C00DTSP_SET_1
79 CUSTOMERS CUSTOMERS_P8 C008TSP_SET_1
82 CUSTOMERS CUSTOMERS_P10 C00ATSP_SET_1
85 CUSTOMERS CUSTOMERS_P11 C00BTSP_SET_1
88 CUSTOMERS CUSTOMERS_P16 C00GTSP_SET_1
91 CUSTOMERS CUSTOMERS_P6 C006TSP_SET_1
94 CUSTOMERS CUSTOMERS_P1 C001TSP_SET_1
97 CUSTOMERS CUSTOMERS_P15 C00FTSP_SET_1

ROWNUM TABLE_NAME PARTITION_NAME TABLESPACE_NAME
---------- -------------------- -------------------- --------------------
100 CUSTOMERS CUSTOMERS_P3 C003TSP_SET_1
103 CUSTOMERS CUSTOMERS_P5 C005TSP_SET_1
4 CUSTOMERS CUSTOMERS_P18 C00ITSP_SET_1
2 LINEITEMS CUSTOMERS_P4 C004TSP_SET_1
107 LINEITEMS CUSTOMERS_P2 C002TSP_SET_1
25 LINEITEMS CUSTOMERS_P19 TSP_SET_1
26 LINEITEMS CUSTOMERS_P20 TSP_SET_1
27 LINEITEMS CUSTOMERS_P21 TSP_SET_1
28 LINEITEMS CUSTOMERS_P22 TSP_SET_1
29 LINEITEMS CUSTOMERS_P23 TSP_SET_1
30 LINEITEMS CUSTOMERS_P24 TSP_SET_1

ROWNUM TABLE_NAME PARTITION_NAME TABLESPACE_NAME
---------- -------------------- -------------------- --------------------
31 LINEITEMS CUSTOMERS_P25 TSP_SET_1
32 LINEITEMS CUSTOMERS_P26 TSP_SET_1
33 LINEITEMS CUSTOMERS_P27 TSP_SET_1
34 LINEITEMS CUSTOMERS_P28 TSP_SET_1
35 LINEITEMS CUSTOMERS_P29 TSP_SET_1
36 LINEITEMS CUSTOMERS_P30 TSP_SET_1
37 LINEITEMS CUSTOMERS_P31 TSP_SET_1
38 LINEITEMS CUSTOMERS_P32 TSP_SET_1
39 LINEITEMS CUSTOMERS_P33 TSP_SET_1
40 LINEITEMS CUSTOMERS_P34 TSP_SET_1
41 LINEITEMS CUSTOMERS_P35 TSP_SET_1

ROWNUM TABLE_NAME PARTITION_NAME TABLESPACE_NAME
---------- -------------------- -------------------- --------------------
42 LINEITEMS CUSTOMERS_P36 TSP_SET_1
62 LINEITEMS CUSTOMERS_P7 C007TSP_SET_1
65 LINEITEMS CUSTOMERS_P9 C009TSP_SET_1
68 LINEITEMS CUSTOMERS_P17 C00HTSP_SET_1
71 LINEITEMS CUSTOMERS_P12 C00CTSP_SET_1
74 LINEITEMS CUSTOMERS_P14 C00ETSP_SET_1
77 LINEITEMS CUSTOMERS_P13 C00DTSP_SET_1
80 LINEITEMS CUSTOMERS_P8 C008TSP_SET_1
83 LINEITEMS CUSTOMERS_P10 C00ATSP_SET_1
86 LINEITEMS CUSTOMERS_P11 C00BTSP_SET_1
89 LINEITEMS CUSTOMERS_P16 C00GTSP_SET_1

ROWNUM TABLE_NAME PARTITION_NAME TABLESPACE_NAME
---------- -------------------- -------------------- --------------------
92 LINEITEMS CUSTOMERS_P6 C006TSP_SET_1
95 LINEITEMS CUSTOMERS_P1 C001TSP_SET_1
98 LINEITEMS CUSTOMERS_P15 C00FTSP_SET_1
101 LINEITEMS CUSTOMERS_P3 C003TSP_SET_1
104 LINEITEMS CUSTOMERS_P5 C005TSP_SET_1
5 LINEITEMS CUSTOMERS_P18 C00ITSP_SET_1
3 ORDERS CUSTOMERS_P4 C004TSP_SET_1
6 ORDERS CUSTOMERS_P18 C00ITSP_SET_1
43 ORDERS CUSTOMERS_P19 TSP_SET_1
44 ORDERS CUSTOMERS_P20 TSP_SET_1
45 ORDERS CUSTOMERS_P21 TSP_SET_1

ROWNUM TABLE_NAME PARTITION_NAME TABLESPACE_NAME
---------- -------------------- -------------------- --------------------
46 ORDERS CUSTOMERS_P22 TSP_SET_1
47 ORDERS CUSTOMERS_P23 TSP_SET_1
48 ORDERS CUSTOMERS_P24 TSP_SET_1
49 ORDERS CUSTOMERS_P25 TSP_SET_1
50 ORDERS CUSTOMERS_P26 TSP_SET_1
51 ORDERS CUSTOMERS_P27 TSP_SET_1
52 ORDERS CUSTOMERS_P28 TSP_SET_1
53 ORDERS CUSTOMERS_P29 TSP_SET_1
54 ORDERS CUSTOMERS_P30 TSP_SET_1
55 ORDERS CUSTOMERS_P31 TSP_SET_1
56 ORDERS CUSTOMERS_P32 TSP_SET_1

ROWNUM TABLE_NAME PARTITION_NAME TABLESPACE_NAME
---------- -------------------- -------------------- --------------------
57 ORDERS CUSTOMERS_P33 TSP_SET_1
58 ORDERS CUSTOMERS_P34 TSP_SET_1
59 ORDERS CUSTOMERS_P35 TSP_SET_1
60 ORDERS CUSTOMERS_P36 TSP_SET_1
63 ORDERS CUSTOMERS_P7 C007TSP_SET_1
66 ORDERS CUSTOMERS_P9 C009TSP_SET_1
69 ORDERS CUSTOMERS_P17 C00HTSP_SET_1
72 ORDERS CUSTOMERS_P12 C00CTSP_SET_1
75 ORDERS CUSTOMERS_P14 C00ETSP_SET_1
78 ORDERS CUSTOMERS_P13 C00DTSP_SET_1
81 ORDERS CUSTOMERS_P8 C008TSP_SET_1

ROWNUM TABLE_NAME PARTITION_NAME TABLESPACE_NAME
---------- -------------------- -------------------- --------------------
84 ORDERS CUSTOMERS_P10 C00ATSP_SET_1
87 ORDERS CUSTOMERS_P11 C00BTSP_SET_1
90 ORDERS CUSTOMERS_P16 C00GTSP_SET_1
93 ORDERS CUSTOMERS_P6 C006TSP_SET_1
96 ORDERS CUSTOMERS_P1 C001TSP_SET_1
99 ORDERS CUSTOMERS_P15 C00FTSP_SET_1
102 ORDERS CUSTOMERS_P3 C003TSP_SET_1
105 ORDERS CUSTOMERS_P5 C005TSP_SET_1
108 ORDERS CUSTOMERS_P2 C002TSP_SET_1

108 rows selected.

总共三个表,每个表36个chunks,chunk的个数是在create shardcatalog时指定的

验证chunk是否均匀分布
连接shard catalog数据库
[oracle@shardcat admin]$ sqlplus / as sysdba
SELECT a.name Shard, COUNT(b.chunk_number) Number_of_Chunks
FROM gsmadmin_internal.database a, gsmadmin_internal.chunk_loc b
WHERE a.database_num=b.database_num
GROUP BY a.name
ORDER BY a.name;

SHARD NUMBER_OF_CHUNKS
------------------------------ ----------------
sh1 18
sh2 18

每个表36个chunk,均匀分布在两个shard库上;这也表示一个shard库挂了,那么整个库也就挂了。

用户访问

查看GSM
GDSCTL>config gsm
Name Region ENDPOINT
---- ------ --------
gsmdrt1 region1 (ADDRESS=(HOST=shardgsm)(PORT=1526)(PROTOCOL=tcp))

[oracle@shardgsm ~]$ lsnrctl status gsmdrt1

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 10-DEC-2017 17:46:10

Copyright (c) 1991, 2016, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(HOST=shardgsm)(PORT=1526)(PROTOCOL=tcp))(CONNECT_DATA=(SERVICE_NAME=GDS$CATALOG.oradbcloud)))
STATUS of the LISTENER
------------------------
Alias GSMDRT1
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 10-DEC-2017 09:56:50
Uptime 0 days 7 hr. 49 min. 21 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.2.0/db_1/network/admin/gsm.ora
Listener Log File /u01/app/oracle/diag/gsm/shardgsm/gsmdrt1/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=shardgsm)(PORT=1526)))
Services Summary...
Service "GDS$CATALOG.oradbcloud" has 1 instance(s).
Instance "catdb", status READY, has 1 handler(s) for this service...
Service "_MONITOR" has 1 instance(s).
Instance "GSMDRT1", status READY, has 1 handler(s) for this service...
Service "_PINGER" has 1 instance(s).
Instance "GSMDRT1", status READY, has 1 handler(s) for this service...
The command completed successfully

添加服务
The oltp_rw_srvc globalservice is a global data service that a client can use to connect to the sharded database. The oltp_rw_srvc service runs the OLTP transactions on theprimary shards. Likewise, the oltp_ro_srvc global service is created to runread-only workload on the standby shards.
本例中只有主,没有备
[oracle@shardgsm ~]$ gdsctl
GDSCTL>add service -service readwrite -role primary
GDSCTL>config service


Name Network name Pool Started Preferred all
---- ------------ ---- ------- -------------
readwrite readwrite.sdbname.oradbcloud sdbname No Yes
GDSCTL>start service -service readwrite

[oracle@shardgsm ~]$ lsnrctl status gsmdrt1

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 10-DEC-2017 18:06:01

Copyright (c) 1991, 2016, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(HOST=shardgsm)(PORT=1526)(PROTOCOL=tcp))(CONNECT_DATA=(SERVICE_NAME=GDS$CATALOG.oradbcloud)))
STATUS of the LISTENER
------------------------
Alias GSMDRT1
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 10-DEC-2017 09:56:50
Uptime 0 days 8 hr. 9 min. 11 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.2.0/db_1/network/admin/gsm.ora
Listener Log File /u01/app/oracle/diag/gsm/shardgsm/gsmdrt1/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=shardgsm)(PORT=1526)))
Services Summary...
Service "GDS$CATALOG.oradbcloud" has 1 instance(s).
Instance "catdb", status READY, has 1 handler(s) for this service...
Service "_MONITOR" has 1 instance(s).
Instance "GSMDRT1", status READY, has 1 handler(s) for this service...
Service "_PINGER" has 1 instance(s).
Instance "GSMDRT1", status READY, has 1 handler(s) for this service...
Service "readwrite.sdbname.oradbcloud" has 2 instance(s).
Instance "sdbname%1", status READY, has 1 handler(s) for this service...
Instance "sdbname%11", status READY, has 1 handler(s) for this service...
The command completed successfully


客户端TNS
schtns =
(DESCRIPTION=
(FAILOVER=on)
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(PROTOCOL = TCP)(host=shardgsm)(port=1526)))
(CONNECT_DATA=
(SERVICE_NAME=readwrite.sdbname.oradbcloud)
(REGION=region1)
)
)

连接测试
[oracle@shardgsm admin]$ sqlplus sharduser/sharduser@schtns

SQL*Plus: Release 12.2.0.1.0 Production on Sun Dec 10 18:09:28 2017

Copyright (c) 1982, 2016, Oracle. All rights reserved.

Last Successful login time: Sun Dec 10 2017 14:45:39 +08:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>
SQL> show parameter name

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_cloud_name string oradbcloud
_dbpool_name string sdbname
_region_name string region1
_shardgroup_name string primary_shardgroup
_shardspace_name string shardspaceora
cdb_cluster_name string sh1
cell_offloadgroup_name string
db_file_name_convert string *, /u01/app/oracle/oradata/SH1
/datafile/
db_name string sh1
db_unique_name string sh1

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean FALSE
instance_name string sh1
lock_name_space string
log_file_name_convert string
pdb_file_name_convert string
processor_group_name string
service_names string sh1

插入数据

insert into customers(custid,firstname,lastname) values(101,'Pengfei','Tan');
insert into customers(custid,firstname,lastname) values(102,'aaaa','bbbb');
insert into customers(custid,firstname,lastname) values(103,'cccc','bbbb');
insert into customers(custid,firstname,lastname) values(104,'dddd','bbbb');
commit;


连接配置库查询
使用PLSQL连接配置库查询

登录服务器查询
[oracle@shardgsm admin]$ sqlplus sharduser/sharduser@catdbtns
col custid for a12
col firstname for a12
col lastname for a12
select custid,firstname,lastname from customers;

CUSTID FIRSTNAME LASTNAME
------------ ------------ ------------
101 Pengfei Tan
102 aaaa bbbb
104 dddd bbbb
103 cccc bbbb

Elapsed: 00:00:02.74
就算是第二次查询,速度依然很慢。
通过GSM查询
[oracle@shardgsm admin]$ sqlplus sharduser/sharduser@schtns
col custid for a12
col firstname for a12
col lastname for a12
select custid,firstname,lastname from customers;

CUSTID FIRSTNAME LASTNAME
------------ ------------ ------------
103 cccc bbbb

查看连接所在分片
SQL> show parameter name

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_cloud_name string oradbcloud
_dbpool_name string sdbname
_region_name string region1
_shardgroup_name string primary_shardgroup
_shardspace_name string shardspaceora
cdb_cluster_name string sh2
cell_offloadgroup_name string
db_file_name_convert string *, /u01/app/oracle/oradata/SH2
/datafile/
db_name string sh2
db_unique_name string sh2

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean FALSE
instance_name string sh2
lock_name_space string
log_file_name_convert string
pdb_file_name_convert string
processor_group_name string
service_names string sh2
上一次连接GSM连接的分片是SH1,而这次连接的是SH2

在某个分片库上查询
上一步是在SH2上查询,本次在SH1上查询,预计应该有三条数据
[oracle@shard1 ~]$ sqlplus sharduser/sharduser
col custid for a12
col firstname for a12
col lastname for a12
select custid,firstname,lastname from customers;

CUSTID FIRSTNAME LASTNAME
------------ ------------ ------------
101 Pengfei Tan
102 aaaa bbbb
104 dddd bbbb

总共插入四条记录,三个在sh1上,一条在sh2上;通过gsm不指定条件连接则仅是查询某个分库片的数据。


重启

关闭

[oracle@shardgsm admin]$ gdsctl
GDSCTL>stop gsm -gsm gsmdrt1
GSM is stopped successfully

[oracle@shard1 ~]$ schagent -stop
[oracle@shard1 ~]$ lsnrctl stop
SQL> shutdown immediate
[oracle@shard2 ~]$ schagent -stop
[oracle@shard2 ~]$ lsnrctl stop
SQL> shutdown immediate

[oracle@shardcat ~]$ lsnrctl stop
[oracle@shardcat ~]$ sqlplus / as sysdba
SQL> shutdown immediate

启动

[root@shardcat ~]# su - oracle
Last login: Sat Dec 9 21:31:01 CST 2017 on pts/0
[oracle@shardcat ~]$ sqlplus / as sysdba
SQL> startup
[oracle@shardcat ~]$ lsnrctl start

[oracle@shard1 ~]$ sqlplus / as sysdba
SQL> startup
[oracle@shard1 ~]$ lsnrctl start
[oracle@shard1 ~]$ schagent -start

[oracle@shard2 ~]$ sqlplus / as sysdba
SQL> startup
[oracle@shard2 ~]$ lsnrctl start
[oracle@shard2 ~]$ schagent -start

[oracle@shardgsm ~]$ gdsctl
Current GSM is set to GSMDRT1
GDSCTL>start gsm -gsm gsmdrt1
GSM is started successfully
GDSCTL>connect gsm/Admin123@catdbtns
GDSCTL>config shard
Catalog connection is established
Name Shard Group Status State Region Availability
---- ----------- ------ ----- ------ ------------
sh1 primary_shardgroup Ok Deployed region1 ONLINE
sh2 primary_shardgroup Ok Deployed region1 ONLINE

GDSCTL>config service


Name Network name Pool Started Preferred all
---- ------------ ---- ------- -------------
readwrite readwrite.sdbname.oradbcloud sdbname Yes Yes

GDSCTL>databases;
Database: "sh1" Registered: Y State: Ok ONS: N. Role: PRIMARY Instances: 1 Region: region1
Service: "readwrite" Globally started: Y Started: N
Scan: Y Enabled: Y Preferred: Y
Registered instances:
sdbname%1
Database: "sh2" Registered: Y State: Ok ONS: N. Role: PRIMARY Instances: 1 Region: region1
Service: "readwrite" Globally started: Y Started: N
Scan: Y Enabled: Y Preferred: Y
Registered instances:
sdbname%11

连接测试
[oracle@shardgsm ~]$ sqlplus sharduser/sharduser@catdbtns

SQL*Plus: Release 12.2.0.1.0 Production on Sun Dec 10 19:18:02 2017

Copyright (c) 1982, 2016, Oracle. All rights reserved.

Last Successful login time: Sun Dec 10 2017 19:17:56 +08:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
[oracle@shardgsm ~]$
[oracle@shardgsm ~]$
[oracle@shardgsm ~]$ sqlplus sharduser/sharduser@schtns

SQL*Plus: Release 12.2.0.1.0 Production on Sun Dec 10 19:18:07 2017

Copyright (c) 1982, 2016, Oracle. All rights reserved.

Last Successful login time: Sun Dec 10 2017 18:48:54 +08:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show parameter name

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_cloud_name string oradbcloud
_dbpool_name string sdbname
_region_name string region1
_shardgroup_name string primary_shardgroup
_shardspace_name string shardspaceora
cdb_cluster_name string sh1
cell_offloadgroup_name string
db_file_name_convert string *, /u01/app/oracle/oradata/SH1
/datafile/
db_name string sh1
db_unique_name string sh1

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean FALSE
instance_name string sh1
lock_name_space string
log_file_name_convert string
pdb_file_name_convert string
processor_group_name string
service_names string sh1
SQL>

原文地址:https://www.cnblogs.com/automng/p/8017801.html