Oracle-19-3-Sharding-安裝配置之03-(为系统管理的SDB创建架构)
Posted 轻飘飘D
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle-19-3-Sharding-安裝配置之03-(为系统管理的SDB创建架构)相关的知识,希望对你有一定的参考价值。
为SDB创建模式用户,表空间集,分片表和重复表。验证DDL已传播到所有分片,并在连接到分片时,通过快速启动故障转移验证Data Guard Broker的自动配置。
1.连接到分片目录数据库,创建应用程序模式用户,并向该用户授予特权和角色
#目錄db上
[oracle@sc01 ~]$ sqlplus / as sysdba
SQL> alter session enable shard ddl;
SQL> create user app_schema identified by app_schema_password;
SQL> grant all privileges to app_schema;
SQL> grant gsmadmin_role to app_schema;
SQL> grant select_catalog_role to app_schema;
SQL> grant connect, resource to app_schema;
SQL> grant dba to app_schema;
SQL> grant execute on dbms_crypto to app_schema;
2.为分片表创建一个表空间集
SQL>
create tablespace set tsp_set_1 using template
(
datafile size 100m autoextend on next 10M maxsize unlimited
extent management local segment space management auto
);
3.为重复的表创建一个表空间在此示例中,重复的表是示例Customers-Orders-Products模式中的Products表
SQL>
create tablespace products_tsp datafile size 100m autoextend on next
10M maxsize unlimited extent management local uniform size 1m;
4.为根表创建一个分片表 在此示例中,根表是示例Customers-Orders-Products模式中的Customers表
SQL> CONNECT app_schema/app_schema_password
SQL> ALTER SESSION ENABLE SHARD DDL;
SQL> 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;
5.为表族中的其他表创建一个分片表
SQL> 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);
#创建用于OrderId列的序列
SQL> CREATE SEQUENCE Orders_Seq;
#为LineItems创建分片表
SQL> 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);
6.创建任何必需的重复表
SQL> 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;
7.跨分片生成唯一的序列号
Oracle分片允许您为非主键列跨分片生成全局唯一的序列号,并由分片的数据库处理。
当customer_id是分片键时,客户通常需要为非主键列生成唯一的ID,例如order_id。对于这种情况,此功能可让您跨分片生成唯一的序列号,而无需管理应用程序中给定非主键列的全局唯一性。
新对象()支持此功能SHARDED SEQUENCE。分片序列是在分片目录上创建的,但每个分片上都有一个实例。每个实例生成一个单调递增的数字,该数字属于一个范围,该范围与其他分片上使用的范围不重叠。因此,每个生成的数字都是全局唯一的。
例如,可以使用分片序列为由客户ID分片的表生成唯一的订单号。使用客户ID作为键建立到分片的连接的应用程序可以使用分片序列的本地实例来生成全局唯一的订单号。
请注意,由分片序列生成的数字不能立即用作要插入该分片的新行的分片键,因为键值可能属于另一个分片,并且插入将导致错误。要插入新行,应用程序应首先生成分片密钥的值,然后使用它来连接到适当的分片。生成分片密钥新值的典型方法是在分片目录上使用常规(非分片)序列。
如果单个分片密钥生成器成为瓶颈,则可以将分片序列用于此目的。在这种情况下,应用程序应连接到随机分片(使用全局服务而不指定分片密钥),从分片序列中获取唯一的键值,然后使用该键值连接到适当的分片。
为了支持此功能,对象DDL语法中包括新的SEQUENCE对象子句SHARD和,如以下语句语法所示。
CREATE | ALTER SEQUENCE [ schema. ]sequence
[ { INCREMENT BY | START WITH } integer
| { MAXVALUE integer | NOMAXVALUE }
| { MINVALUE integer | NOMINVALUE }
| { CYCLE | NOCYCLE }
| { CACHE integer | NOCACHE }
| { ORDER | NOORDER }
| { SCALE {EXTEND | NOEXTEND} | NOSCALE}
| { SHARD {EXTEND | NOEXTEND} | NOSHARD}
]
8.在分片导向器主机上,验证在创建表空间期间是否没有故障(gsm01、gsm02)
GDSCTL> show ddl
9.验证每个分片上没有DDL错误
GDSCTL> config shard -shard sh1
GDSCTL> config chunks
10.验证在所有分片上都创建了为分片表系列创建的表空间集的表空间以及为重复表创建的表空间
#表空间集中的表空间数基于您在create shardcatalog命令中指定的块数。
#在分片目录创建示例中指定的表空间集包含12个表中的前6个块,并且在以下示例中显示了重复的Products表空间
#对配置中的所有分片重复此步骤。
[oracle@sd01 ~]$ sql / as sysdba
SQL> SET SQLFORMAT ansiconsole
SQL> select TABLESPACE_NAME, BYTES/1024/1024 MB from sys.dba_data_files order by tablespace_name;
11.验证已在所有分片上创建了块和块表空间
#对配置中的所有分片重复此步骤。
[oracle@sd01 ~]$ sql / as sysdba
SQL> SET SQLFORMAT ansiconsole
SQL> show parameter db_unique_name
NAME TYPE VALUE
---------------- ----------- ------------------------------
db_unique_name string sh1
SQL> select table_name, partition_name, tablespace_name from dba_tab_partitions where tablespace_name like 'C%TSP_SET_1' order by tablespace_name;
12.连接到分片目录数据库,并验证块均匀分布
[oracle@sc01 ~]$ sql / as sysdba
SQL> SET SQLFORMAT ansiconsole
SQL> 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;
13.验证是否已创建分片表和重复表。
#以应用程序模式用户身份登录碎片目录数据库和每个碎片。
#以下示例显示以app_schema用户身份查询数据库碎片上的表
[oracle@sc01 ~]$ sqlplus app_schema/app_schema_password
SQL> SET SQLFORMAT ansiconsole
SQL> select table_name from user_tables;
14.验证是否已完成Data Guard Broker自动快速启动故障转移配置
#sd01
[oracle@sd01 ~]$ dgmgrl
DGMGRL> connect sys/password
Connected to "sh1"
Connected as SYSDG.
DGMGRL> show configuration
DGMGRL> show database sh1
DGMGRL> show database sh2
DGMGRL> show fast_start failover
15.找到快速启动故障转移观察器
#连接到分片目录数据库并运行以下命令
#sc01
[oracle@sc01 ~]$ sqlplus / as sysdba
SQL> SELECT observer_state FROM gsmadmin_internal.broker_configs;
OBSERVER_STATE
--------------------------------------------------------------------------------
GSM server SHARDDIRECTOR2. Observer started.
Log files at '/u01/app/oracle/product/12.2.0/gsmhome_1/network/admin/gsm_observer_1.log'.
GSM server SHARDDIRECTOR2. Observer started.
Log files at '/u01/app/oracle/product/12.2.0/gsmhome_1/network.admin/gsm_observer_2.log'.
以上是关于Oracle-19-3-Sharding-安裝配置之03-(为系统管理的SDB创建架构)的主要内容,如果未能解决你的问题,请参考以下文章