概述
GDS作用
GDS(全局数据库服务):跨数据库提供并发、负载均衡服务。这里的数据库指DG之间的主库备库以及通过OGG相关联的多个数据库。
GDS由三部分组成:GSM、GDS配置数据库、数据库。
GSM(常规服务管理)主要提供监听服务,应用的连接不再连接到具体的数据库服务,而是连接到GSM,由GSM转发到各个数据库服务。数据库添加到GSM后,在GSM中可以对这些数据库分配资源池,然后在资源池上配置对外提供的服务。可以对数据库进行更灵活的服务配置。这就是GDS能跨数据库提供服务的原因,GSM就是GDS的核心。
GDS配置数据库:存储GSM的配置信息。
数据库:单实例、RAC、DG等数据库
GSM安装
+->上传软件
mkdir -p /u01/soft/gsm
linuxx64_12201_gsm.zip
chown -R oracle.oinstall /u01/soft/gsm_1
+->用户与组
创建oracle用户与组
+->创建目录
mkdir -p /u01/app/oracle/product/12.2.0/gsm_1
chown -R oracle.oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle
mkdir -p /u01/app/oraInventory
chown -R oracle:oinstall /u01/app/oraInventory
chmod -R 770 /u01/app/oraInventory
+->环境变量
每个 GSM 都需要独自的ORACLE_HOME
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/gsmhome_1
export PATH=$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin
+->安装软件
xhost +
export DISPLAY=172.17.201.10:0.0
echo $ORACLE_HOME
$ ./runInstaller
sh /u01/app/oraInventory/orainstRoot.sh
sh /u01/app/oracle/product/12.2.0/gsmhome_1/root.sh
+->安装监听
如果gsm安装在单独的服务器上,则还需要安装监听
此步是否真的需要手工安装尚需再次验证,因为gsm的添加与启动不需要也不能通过lsnrctl命令来完成
$ netca
配置但不启动监听
lsnrctl stop
创建GDS配置数据库
安装数据库,并使用dbca建库,此库可以使用非容器数据库,此处为了多多练习PDB才使用的容器数据库
dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname gdsdb -sid gdsdb \
-createAsContainerDatabase true -numberOfPDBs 1 -pdbAdminPassword Admin_123 -pdbName pdbgds -useLocalUndoForPDBs true \
-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
服务与监听
SQL> show parameter name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cdb_cluster_name string gdsdb
cell_offloadgroup_name string
db_file_name_convert string
db_name string gdsdb
db_unique_name string gdsdb
global_names boolean FALSE
instance_name string gdsdb
lock_name_space string
log_file_name_convert string
pdb_file_name_convert string
processor_group_name string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string gdsdb
[oracle@a12csh4 ~]$ lsnrctl status
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 05-DEC-2017 16:24:12
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 05-DEC-2017 16:23:45
Uptime 0 days 0 hr. 0 min. 26 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/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/a12csh4/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=a12csh4)(PORT=1521)))
Services Summary...
Service "5f945f9d7b41237fe053bd15a80a79ca" has 1 instance(s).
Instance "gdsdb", status READY, has 1 handler(s) for this service...
Service "gdsdb" has 1 instance(s).
Instance "gdsdb", status READY, has 1 handler(s) for this service...
Service "gdsdbXDB" has 1 instance(s).
Instance "gdsdb", status READY, has 1 handler(s) for this service...
Service "pdbgds" has 1 instance(s).
Instance "gdsdb", status READY, has 1 handler(s) for this service...
The command completed successfully
创建catalog 管理gsm的用户
$ sqlplus / as sysdba
alter session set container=pdbgds;
create user gsm identified by Admin123 default tablespace users quota unlimited on users;
grant gsmadmin_role to gsm;
grant connect,create session to gsm;
解锁GSMUSER
这个gsmuser用户用于gsm管理各个数据库,跟该数据库是否是配置数据库没有关系,换句话说,想要把一个普通数据库添加到gsm中,那么就先解锁该数据库的gsmuser账户。此处就是把配置数据库当作一个普通数据库来演示GSM的功能。
$ sqlplus / as sysdba
alter user gsmuser identified by Admin123 account unlock;
配置GDS catalog
通过gdsctl工具创建catalog,gdsctl命令在gsm服务器上
#gsm
10.168.21.180 gsm1 gsm1.localdomain
10.168.21.181 gsm2 gsm2.localdomain
10.168.21.189 a12csh4 a12csh4.localdomain
+->修改配置库 GSMCATUSER账户
[oracle@a12csh4 ~]$ sqlplus / as sysdba
alter user gsmcatuser identified by Admin123 account unlock;
登录到gsm服务器,配置TNS,TNS中的服务必须是容器数据库根的服务,不能是某个PDB的服务,再强调一下,配置数据库不必使用容器数据库,此处纯粹是为了尽快熟悉12C,因为有些坑你不去踩一踩就永远不知道那有个坑
cd /u01/app/oracle/product/12.2.0/gsm_1/network/admin
cp samples/tnsnames.ora .
gdstns =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = a12csh4)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = gdsdb)
)
)
[oracle@gsm1 admin]$ sqlplus gsm/Admin123@gdstns
SQL*Plus: Release 12.2.0.1.0 Production on Tue Dec 5 16:36:47 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>
SQL> exit
[oracle@gsm1 admin]$ gdsctl
GDSCTL: 版本 12.2.0.1.0 - Production, 时间: Tue Dec 05 16:37:24 CST 2017
版权所有 (c) 2011, 2016, Oracle。保留所有权利。
欢迎使用GDSCTL, 请键入 "help" 以获得信息。
警告: 未自动设置当前 GSM 名称, 因为 gsm.ora 不包含或包含多个 GSM 条目。请使用 "set gsm" 命令为会话设置 GSM。
当前 GSM 设置为 GSMORA
GDSCTL>create catalog -database gdstns -user c##gsm/Admin123;
目录已创建
+-->连接到配置库
GDSCTL>connect c##gsm/Admin123@gdstns
已建立目录连接
注册GSM到GDS catalog
登录gsm服务器
+->gsm服务器hosts文件
#gsm
10.168.21.180 gsm1 gsm1.localdomain
10.168.21.181 gsm2 gsm2.localdomain
10.168.21.189 a12csh4 a12csh4.localdomain
新建监听gsmlst 1527 端口,如果listener.ora文件中有主机名解析,那么要求catalog库所在
服务器同样能够解析其中的主机名
gdsctl
add gsm -gsm gsm180 -listener 1527 -catalog oragds:1523:gdsdb
add gsm -gsm gsm180 -listener 1527 -catalog gdstns
[oracle@gsm1 admin]$ gdsctl
GDSCTL>add gsm -gsm gsm180 -listener 1527 -catalog gdstns
"gsmcatuser" 口令:
GSM 已成功添加
查看监听为停止 状态
[oracle@gsm1 admin]$ lsnrctl status
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 05-DEC-2017 16:56:40
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=gsm1)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 2: No such file or directory
启动GSM
[oracle@gsm1 admin]$ gdsctl
GDSCTL: 版本 12.2.0.1.0 - Production, 时间: Tue Dec 05 16:59:04 CST 2017
版权所有 (c) 2011, 2016, Oracle。保留所有权利。
欢迎使用GDSCTL, 请键入 "help" 以获得信息。
当前 GSM 设置为 GSM180
GDSCTL>connect c##gsm/Admin123@gdstns
已建立目录连接
GDSCTL>start gsm -gsm gsm180
GSM 已成功启动
添加gds pool
默认为dbpoolora
GDSCTL>connect c##gsm/Admin123@gdstns
已建立目录连接
GDSCTL>add gdspool -gdspool orderpool
操作已成功完成
添加gds region
GDSCTL>connect c##gsm/Admin123@gdstns
已建立目录连接
GDSCTL>add region -region beijing,shanghai,shenzhen
操作已成功完成
添加数据库到 GDS Pool
要提供global services,数据库必须被添加到GDS Pool中。在将一个12c的数据库添加到GDS Pool之前,需要先将被添加数据库上的gsmuser账户unlock,并设置一个新password
+->被添加数据库添加gsm主机名解析
#gsm
172.168.21.180 gsm1 gsm1.localdomain
172.168.21.181 gsm2 gsm2.localdomain
##SHARD
172.168.21.186 a12csh1 a12csh1.localdomain
172.168.21.187 a12csh2 a12csh2.localdomain
172.168.21.188 a12csh3 a12csh3.localdomain
172.168.21.189 a12csh4 a12csh4.localdomain
+->数据库中解锁gsmuser用户
[oracle@a12csh1 ~]$ sqlplus / as sysdba
SQL> alter user gsmuser identified by Admin123 account unlock;
+->gsm服务器上添加数据库
配置指向数据库的TNS,服务名为根服务名
[oracle@gsm1 admin]$ cd /u01/app/oracle/product/12.2.0/gsm_1/network/admin
db186 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = a12csh1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = csdb)
)
)
db187 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = a12csh2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = db186dg1)
)
)
连接测试正常
[oracle@gsm1 admin]$ sqlplus system/Admin_123@db186
[oracle@gsm1 admin]$ sqlplus system/Admin_123@db187
add database -connect rscan:1521/ora12c -region beijing -gdspool dbpoolora -pwd Admin123
add database -connect db186 -region beijing -gdspool orderpool -pwd Admin123
add database -connect db187 -region beijing -gdspool orderpool -pwd Admin123
GDSCTL>connect c##gsm/Admin123@gdstns
GDSCTL>add database -connect db186 -region beijing -gdspool orderpool -pwd Admin123
数据库的唯一名称: csdb
操作已成功完成
GDSCTL>add database -connect db187 -region beijing -gdspool orderpool -pwd Admin123
数据库的唯一名称: db186dg1
操作已成功完成
备注:
-pwd Admin123是被添加数据库上gsmuser 用户的密码
db186、 db187是一套DG, db187 为备库
添加global service
add service -gdspool orderpool -service csdbquery -preferred_all
GDSCTL>add service -gdspool orderpool -service csdbquery -preferred_all
操作已成功完成
+->启动service
GDSCTL>start service -gdspool orderpool -service csdbquery
操作已成功完成
GDSCTL>status service -service csdbquery
服务 "csdbquery.orderpool.oradbcloud" 具有 2 个实例。关系: ANYWHERE
实例 "orderpool%1", 名称: "db186", 数据库: "csdb", 区域: "beijing", 状态: ready。
实例 "orderpool%11", 名称: "db186", 数据库: "db186dg1", 区域: "beijing", 状态: ready。
GDSCTL>status gsm -gsm gsm180
别名 GSM180
版本 12.2.0.1.0
启动日期 05-DEC-2017 16:59:22
跟踪级别 off
监听程序日志文件 /u01/app/oracle/diag/gsm/gsm1/gsm180/alert/log.xml
监听程序跟踪文件 /u01/app/oracle/diag/gsm/gsm1/gsm180/trace/ora_7611_139896822366592.trc
端点概要 (ADDRESS=(HOST=gsm1)(PORT=1527)(PROTOCOL=tcp))
GSMOCI 版本 2.2.1
主身份 Y
已连接到 GDS 目录 Y
进程 ID 7613
重新连接数量 0
暂挂任务。 总计 0
任务正在进行。总计 0
区域主身份 TRUE
发布的消息总数 9
时区 +08:00
孤立的伙伴区域:
无
GDS 区域 regionora
客户端TNS配置
csdbquery =
(DESCRIPTION=
(FAILOVER=on)
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(PROTOCOL = TCP)(host=gsm1.localdomain)(port=1527)))
(CONNECT_DATA=
(SERVICE_NAME=csdbquery.orderpool.oradbcloud)
(REGION=beijing)
)
)
连接测试成功
[oracle@a12csh4 admin]$ sqlplus system/Admin_123@csdbquery
SQL*Plus: Release 12.2.0.1.0 Production on Tue Dec 5 20:41:09 2017
Copyright (c) 1982, 2016, Oracle. All rights reserved.
2017/12/05 20:41:09 [34539600] [8] config: 0 length name or value
Last Successful login time: Tue Dec 05 2017 19:58:00 +08:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL>
SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
监听与服务
查看186数据库上监听与服务
[oracle@a12csh1 ~]$ lsnrctl status
Service "csdbquery.orderpool.oradbcloud" has 1 instance(s).
Instance "db186", status READY, has 1 handler(s) for this service...
查看187数据库上监听与服务
[oracle@a12csh2 ~]$ lsnrctl status
Service "csdbquery.orderpool.oradbcloud" has 1 instance(s).
Instance "db186", status READY, has 1 handler(s) for this service...
说明一下,187数据库的instance_name的确为db186,187数据库是186数据库的备库
[oracle@a12csh2 ~]$ sqlplus / as sysdba
SQL> show parameter name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_cloud_name string oradbcloud
_dbpool_name string orderpool
_region_name string beijing
cdb_cluster_name string db186dg1
cell_offloadgroup_name string
db_file_name_convert string
db_name string csdb
db_unique_name string db186dg1
global_names boolean FALSE
instance_name string db186
lock_name_space string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_file_name_convert string null, null
pdb_file_name_convert string
processor_group_name string
service_names string db186dg1
这里GDS最主要的作用--跨数据库提供负载均衡服务的作用就体现出来了,在11G时,服务是不能跨主库和备库的,这里的186数据库和187数据库则是主备关系,一个服务,在主备库上同时运行。