返回顶部
首页 > 资讯 > 数据库 >Oracle 12C Sharding部署和测试
  • 727
分享到

Oracle 12C Sharding部署和测试

2024-04-02 19:04:59 727人浏览 安东尼
摘要

Oracle 12C Sharding 部署和测试   日期: 2019-02-26   作者:陈举超 目录 一:环境说明 ... 4 二:安装

Oracle 12C Sharding 部署和测试  

日期: 2019-02-26  

作者:陈举超

目录

一:环境说明 ... 4

二:安装GSM/Shard catalog/ORACLE 12.2  RDBMS . 5

2.1 Gsm 安装 ... 5

2.2 oracle 12.2 RDBMS 安装 ... 8

2.3 创建并启动监听 ... 8

2.4 创建Shard Catalog database . 8

三:配置GSM/Shard director . 8

3.1  解用户 ... 8

3.2 创建管理用户mygds . 8

3.3  启动listener . 8

3.4 创建shard catalog 配置remote  scheduler agent . 8

3.5  创建和启动shard  director. 9

3.6  添加操作系统认证. 9

3.7 在所有的shard 节点分别执行Agent . 10

3.8 创建shard 数据库的数据文件存储路径 ... 11

四:创建System-Managed SDB . 11

4.1 连接gsm .. 11

4.2 添加shardgroup . 11

4. 3 创建shard . 11

4.4  检查配置 ... 12

4.5  部署/deploy . 13

4.6  检查配置信息 ... 14

4.7  创建service . 16

五:创建用户和对象 ... 16

5.1  在catalog 数据库中创建业务用户 ... 16

5.2  创建表空间集合 ... 16

5.3 为duplicated tables 创建表空间 ... 17

5.4 创建 root 表 Customers . 17

5.5 创建其他 sharded table Orders. 18

5.6 为 OrderId 列创建序列 ... 18

5.7 创建 SHARDED TABLE LineItems . 18

5.8 创建 duplicated tables. 18

5.9 检查是否有错误 ... 19

六:验证环境- 表空间/chunks . 20

6.1   在db01 检查chunks 信息 ... 20

6.2  在 sd1,sd2 节点检查表空间和 chunks 信息 ... 20

6.3 在catalog 数据库检查chunks 信息 ... 23

6.4   验证环境 ... 23

七:访问Shard . 24

7.1 访问单独一个shard . 24

7.2 访问多个shard . 26

八:shard 数据库启动和停止 ... 27

8.1 关闭 ... 27

8.2 启动

九:常见问题 ... 29

9.1  create shard –shardgroup 错误 ... 29

9.2  catalog 创建用户和表,不能同步到 shard db 库 ... 29

9.3 GSM 启动失败,显示异常

十:参考文献


一:环境说明

Oracle 12C Sharding部署和测试

OS :Centos linux release 7.5

DB :Oracle 12.2.0.1.0

GSMOCI :2.2.1

本次使用三台虚拟机进行安装:

其中:

(1) db01 主机上安装Shard Director 和Shard catalog ,也就是分别安装GSM 、ORACLE 12.2 RDBMS 、non-cdb Database(GSM 和ORACLE 12.2 环境变量需要手动切换) ;

(2)db02 主机上安装Shard1 ,也就是ORACLE 12.2 RDBMS ,不需要创建数据库;

(3) db03 主机上安装Shard2 ,也就是ORACLE 12.2 RDBMS ,不需要创建数据库;

主机

组件

SID

Oracle_Home

db01

Shard Director


/u01/app/oracle/product/12.2.0/gsm_1

db01

Shard catalog

db01

/u01/app/oracle/product/12.2.0/db_1

db02

Shard1

sh2

/u01/app/oracle/product/12.2.0/db_1

db03

Shard2

sh3

/u01/app/oracle/product/12.2.0/db_1

安装文件下载链接如下:

https://www.oracle.com/technetwork/cn/database/options/partitioning/downloads/index.html

Oracle 软件下载

Oracle 12C Sharding部署和测试

GSM 下载

Oracle 12C Sharding部署和测试

二:安装GSM/Shard catalog/ORACLE 12.2 RDBMS

2.1 Gsm 安装

Oracle 12C Sharding部署和测试

Oracle 12C Sharding部署和测试

Oracle 12C Sharding部署和测试

Oracle 12C Sharding部署和测试

Oracle 12C Sharding部署和测试

2.2 ORACLE 12.2 RDBMS 安装

2.3 创建并启动监听

Netca

2.4 创建Shard Catalog database

在Shard catalog   服务器gsm1   创建 non-cdb 数据库。创建过程与普通数据库相同。

三:配置GSM/Shard director

Https://blogs.oracle.com/database4cn/12c-oracle-sharding

3.1  解锁用户

在db01 服务器(catalog 数据库/shard director) ,连接到Sharding catalog 数据库, 解锁 GSMCATUSER 用户,shard director 通过GSMCATUSER 用户连接到shard catalog database

sql> alter user gsmcatuser identified by oracle account unlock;

3.2 创建管理用户mygds

在 catalog 数据库,创建管理用户mygds ,用户mygds 用于存储Sharding 管理信息,GDSCTL 接口通过用户mygds 连接到catalog 数据库。

SQL> create user mygds identified by oracle;

SQL> grant connect, create session, gsmadmin_role to mygds;

SQL> grant inherit privileges on user SYS to GSMADMIN_INTERNAL;

3.3  启动listener

在db01 服务器(catalog 数据库/shard director) ,启动listener

3.4 创建shard catalog 配置remote scheduler agent

在db01 服务器(catalog 数据库/shard director) ,创建shard catalog ,在shard catalog 中配置remote scheduler agent.

参数含义:

-user : 指定管理用户,在前面步骤中创建的catalog database 管理用户mygds

-database : 指定catalog database 信息,catalog 数据库的主机名: 监听器port: catalog 数据库db_name

-sdb : 指定sharded database name

-agent_port: 设置端口,用于shard 节点agent 连接到GSM

-agent_passWord: 设置密码,用于shard 节点agent 连接到GSM

如果没有指定- sharding 参数,默认是创建system-managed (default) 类型

[oracle@db01 ~]$ export ORACLE_BASE=/u01/app/oracle

[oracle@db01 ~]$ export ORACLE_HOME=/u01/app/oracle/products/12.2.0/gsm_1

[oracle@db01 ~]$

export PATH=/u01/app/oracle/products/12.2.0/gsmh_11/bin:$PATH:$HOME/bin

[oracle@db01 ~]$ gdsctl

GDSCTL: Version 12.2.0.1.0 - Production on Mon Feb 25 10:38:54 CST 2019

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

Welcome to GDSCTL, type "help" for infORMation.

Warning: current GSM name is not set automatically because gsm.ora contains zero or several GSM entries. Use "set  gsm" command to set GSM for the session.

Current GSM is set to GSMORA

GDSCTL> create shardcatalog -database db01:1521:db01 -chunks 12 -user mygds/oracle -sdb shdb -region region1, region2 -agent_port 8080 -agent_password oracle

Catalog is created

3.5  创建和启动shard director

参数含义:

-gsm: 指定shard director 名称

-listener: 指定shard director 的监听端口,注意不能与数据库的listener 端口冲突

-catalog: 指定catalog database 信息,catalog 数据库的主机名: 监听器port: catalog 数据库db_name

GDSCTL> add gsm -gsm sharddirector1 -listener 1522 -pwd oracle -catalog db01:1521:db01 -region region1

GSM successfully added

GDSCTL> start gsm -gsm sharddirector1

GSM 已成功启动

3.6  添加操作系统认证

GDSCTL> add credential -credential cre_reg1 -osaccount oracle -ospassword oracle

操作已成功完成

3.7 在所有的shard 节点分别执行Agent

--- 在db02 节点执行

[oracle@db02 ~]$ schagent -start

Scheduler agent started using port 24409

[oracle@db02 ~]$ schagent -status

Agent running with PID 8537

Agent_version:12.2.0.1.2

Running_time:00:00:11

Total_jobs_run:0

Running_jobs:0

Platform:Linux

ORACLE_HOME:/u01/app/oracle/product/12.2.0/db_1

ORACLE_BASE:/u01/app/oracle

Port:24409

Host:db02

--- 在db03 节点执行

[oracle@db03 ~]$ schagent -start

Scheduler agent started using port 19249

[oracle@db03 ~]$ schagent -status

Agent running with PID 8344

Agent_version:12.2.0.1.2

Running_time:00:00:05

Total_jobs_run:0

Running_jobs:0

Platform:Linux

ORACLE_HOME:/u01/app/oracle/product/12.2.0/db_1

ORACLE_BASE:/u01/app/oracle

Port:19249

Host:db03

----- 密码oracle 和端口8080

[oracle@db02 ~]$ echo oracle | schagent -reGISterdatabase 192.168.2.226 8080

Agent Registration Password ? 

Oracle Scheduler Agent Registration for 12.2.0.1.2 Agent

Agent Registration Successful!

[oracle@db03 ~]$ echo oracle | schagent -registerdatabase 192.168.2.226 8080

Agent Registration Password ? 

Oracle Scheduler Agent Registration for 12.2.0.1.2 Agent

Agent Registration Successful!

3.8 创建shard 数据库的数据文件存储路径

[oracle@db02 ~]$ mkdir /u01/app/oracle/oradata

[oracle@db02 ~]$ mkdir /u01/app/oracle/fast_recovery_area

[oracle@db03 ~]$ mkdir /u01/app/oracle/oradata

[oracle@db03 ~]$ mkdir /u01/app/oracle/fast_recovery_area

四:创建System-Managed SDB

4.1 连接gsm

在Shard 服务器 sd1 连接到shard director/GSM 服务器(db01)

[oracle@db02 ~]$ ssh oracle@db01

……

oracle@db01's password:

Last login: Mon Feb 25 10:45:20 2019 from 192.168.70.249

[oracle@db01 ~]$ source .bash_profile

[oracle@db01 ~]$ gdsctl

GDSCTL: 版本 12.2.0.1.0 - Production, 时间: Mon Feb 25 11:16:04 CST 2019

版权所有 (c) 2011, 2016, Oracle 。保留所有权利。

欢迎使用GDSCTL, 请键入 "help" 以获得信息。

当前 GSM 设置为 SHARDDIRECTOR1

GDSCTL> set gsm -gsm sharddirector1

GDSCTL>connect mygds/oracle

已建立目录连接

4.2 添加shardgroup

shardgroup 是一组shard 的集合,shardgroup 名称为primary_shardgroup ,-deploy_as primary 表示这个group 中的shard 都是主库。

GDSCTL> add shardgroup -shardgroup primary_shardgroup -deploy_as primary -region region1

操作已成功完成

4. 3 创建shard

将每个shard 地址添加到catalog 的valid node checking for registration (VNCR) 列表,并且创建shard

GDSCTL> add invitednode db02 

GDSCTL> create shard -shardgroup primary_shardgroup -destination db02 -credential cre_reg1 -sys_password oracle

操作已成功完成

数据库的唯一名称: sh2

GDSCTL> add invitednode db03

GDSCTL> create shard -shardgroup primary_shardgroup -destination db03 -credential cre_reg1 -sys_password oracle

操作已成功完成

数据库的唯一名称: sh3

4.4  检查配置

GDSCTL>config

区域

------------------------

region1                      

region2                      

GSM

------------------------

sharddirector1               

sharddirector3               

分片数据库

------------------------

shdb                         

数据库

------------------------

sh2                          

sh3                          

分片组

------------------------

primary_shardgroup           

分片空间

------------------------

shardspaceora                

服务

------------------------

GDSCTL 暂挂请求

------------------------

命令                            对象                            状态                           

--                            --                            --                           

全局属性

------------------------

名称: oradbcloud

主 GSM: sharddirector1

DDL 序列号: 0

GDSCTL> config shardspace

分片空间                          块                            

----                          -                            

shardspaceora                 12  

GDSCTL> config shardgroup

分片组                 块      区域                  分片空间               

---                 -      --                  ----                

primary_shardgroup  12     region1             shardspaceora 

GDSCTL> config vncr

名称                            组 ID                         

--                            ----                         

192.168.2.226                                               

db02                                                       

db03                              

GDSCTL> config shard

名称                   分片组                  状态         状态           区域         可用性       

--                  ---                 --        --          --        ---      

sh2                 primary_shardgroup  U         无            region1   -        

sh3                 primary_shardgroup  U         无            region1   -        

4.5  部署/deploy

执行deploy 后,自动在db02 和db03 服务器上采用静默安装方式部署shard 数据库,速度较慢;

GDSCTL> deploy

deploy: examining configuration...

deploy: deploying primary shard 'sh2' ...

deploy: network listener configuration successful at destination 'db02'

deploy: starting DBCA at destination 'db02' to create primary shard 'sh2' ...

deploy: deploying primary shard 'sh3' ...

deploy: network listener configuration successful at destination 'db03'

deploy: starting DBCA at destination 'db03' 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: 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 'db02' for shard 'sh2'

deploy: waiting for 1 DBCA primary creation job(s) to complete...

deploy: waiting for 1 DBCA primary creation job(s) to complete...

deploy: DBCA primary creation job succeeded at destination 'db03' for shard 'sh3'

deploy: requesting Data Guard configuration on shards via GSM

deploy: shards configured successfully

操作已成功完成

4.6  检查配置信息

GDSCTL> config shard

名称                   分片组                  状态         状态           区域         可用性       

--                  ---                 --        --          --        ---      

sh2                 primary_shardgroup  确定         已部署          region1   ONLINE   

sh3                 primary_shardgroup  确定         已部署          region1   ONLINE    

GDSCTL> databases

数据库: "sh2" 注册时间: Y 状态: 确定 ONS: N 。角色: PRIMARY 实例: 1 区域: region1

   已注册的实例:

     shdb%1

数据库: "sh3" 注册时间: Y 状态: 确定 ONS: N 。角色: PRIMARY 实例: 1 区域: region1

   已注册的实例:

     shdb%11

GDSCTL> config shard -shard sh2

名称: sh2

分片组: primary_shardgroup

状态: 确定

状态: 已部署

区域: region1

连接字符串: db02:1521/sh2:dedicated

SCAN 地址:

ONS 远程端口: 0

磁盘阈值, 毫秒: 20

CPU 阈值, %: 75

版本: 12.2.0.0

上次失败的 DDL:

DDL 错误: ---

失败的 DDL ID:

可用性: ONLINE

Rack:

支持的服务

------------------------

名称                                                              首选        状态       

--                                                              --        --       

GDSCTL> config shard -shard sh3  

名称: sh3

分片组: primary_shardgroup

状态: 确定

状态: 已部署

区域: region1

连接字符串: db03:1521/sh3:dedicated

SCAN 地址:

ONS 远程端口: 0

磁盘阈值, 毫秒: 20

CPU 阈值, %: 75

版本: 12.2.0.0

上次失败的 DDL:

DDL 错误: ---

失败的 DDL ID:

可用性: ONLINE

Rack:

支持的服务

------------------------

名称                                                              首选        状态       

--                                                              --        --    

4.7  创建service

GDSCTL> add service -service oltp_rw_srvc -role primary

操作已成功完成

GDSCTL> start service -service oltp_rw_srvc

操作已成功完成

GDSCTL> status service

服务 "oltp_rw_srvc.shdb.oradbcloud" 具有 2 个实例。关系: ANYWHERE

   实例 "shdb%1", 名称: "sh2", 数据库: "sh2", 区域: "region1", 状态: ready 。

   实例 "shdb%11", 名称: "sh3", 数据库: "sh3", 区域: "region1", 状态: ready 。

五:创建用户和对象

5.1  在catalog 数据库中创建业务用户

---db01

SQL> alter session enable shard ddl;

SQL> create user app_schema identified by oracle;

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;

5.2  创建表空间集合

---db01

SQL> conn app_schema

Enter password:

Connected.

SQL> alter session enable shard ddl;

Session altered.

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);

Tablespace created.

GDSCTL> set gsm -gsm sharddirector1

GDSCTL> config shard

已建立目录连接

名称                   分片组                  状态         状态           区域         可用性       

--                  ---                 --        --          --        ---      

sh2                 primary_shardgroup  确定         DDL 错误       region1   ONLINE   

sh3                 primary_shardgroup  确定         DDL 错误       region1   ONLINE   

5.3 为duplicated tables 创建表空间

--- 这个测试中duplicated table 是Products table.

SQL> CREATE TABLESPACE products_tsp datafile '/u01/app/oracle/oradata/db01/products_tsp01.dbf' size 100m autoextend on next 10M maxsize unlimited extent management local uniform size 1m;

Tablespace created.

5.4 创建 root 表 Customers

SQL > CONNECT app_schema / oracle

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 .5 创建其他 sharded table Orders.

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 );  

5.6 为 OrderId 列创建序列

SQL > CREATE SEQUENCE Orders_Seq ;  

Sequence created.

5.7 创建 SHARDED TABLE 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 );

5.8 创建 duplicated tables.

---In this example , the Products table is a duplicated object.

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 ;  

5.9 检查是否有错误

GDSCTL> set gsm -gsm sharddirector1

GDSCTL> show ddl

ID      DDL 文本                                   失败的分片    

--      ------                                   -----    

108     grant dba to app_schema                           

109     grant execute on dbms_crypto to app_s...          

110     CREATE TABLESPACE SET TSP_SET_1 using...          

111      CREATE TABLESPACE products_tsp dataf...          

112      CREATE SHARDED TABLE Customers   (  ...          

113     CREATE SHARDED TABLE Orders   (     O...          

114     CREATE SHARDED TABLE LineItems   (   ...          

115     CREATE MATERIALIZED VIEW "APP_SCHEMA"...          

116     CREATE OR REPLACE FUNCTION PasswCreat...          

117     CREATE OR REPLACE FUNCTION PasswCheck...         

GDSCTL> config shard -shard sh2

名称: sh2

分片组: primary_shardgroup

状态: 确定

状态: 已部署

区域: region1

连接字符串: db02:1521/sh2:dedicated

SCAN 地址:

ONS 远程端口: 0

磁盘阈值, 毫秒: 20

CPU 阈值, %: 75

版本: 12.2.0.0

上次失败的 DDL: CREATE MATERIALIZED VIEW "APP_...

DDL 错误: ORA-00942: table or view does not exist

ORA-06512: at "SYS.EXECASUSER", line 44

ORA-06512: at "SYS.DBMS_SYS_SQL", line 1529

ORA-06512: at "SYS.EXECASUSER", line 31

ORA-06512: at "GSMADMIN_INTERNAL.EXECUTEDDL", line 70

ORA-06512: at line 1 \(ngsmoci_execute\)

失败的 DDL ID: 57

可用性: ONLINE

Rack:

支持的服务

------------------------

名称                                                              首选        状态       

--                                                              --        --       

oltp_rw_srvc                                                    是         启用       

六:验证环境-表空间/chunks

6.1   在db01 检查chunks 信息

前面创建shardcatalog时指定chunks为12,因此后续创建shard table分配12个chunks

GDSCTL>config chunks

------------------------

数据库                           自         至        

---                           -         -        

sh2                           1         6        

sh3                           7         12   

6.2  在 sd1,sd2 节点检查表空间和 chunks 信息

---db02

--表空间

SQL> select TABLESPACE_NAME, BYTES/1024/1024 MB from sys.dba_data_files order by tablespace_name;

TABLESPACE_NAME               MB

------------------------------ ----------

C001TSP_SET_1                100

C002TSP_SET_1                100

C003TSP_SET_1                100

C004TSP_SET_1                100

C005TSP_SET_1                100

C006TSP_SET_1                100

PRODUCTS_TSP                 100

SYSAUX                       480

SYSTEM                       810

TSP_SET_1                100

UNDOTBS1                  70

TABLESPACE_NAME               MB

------------------------------ ----------

USERS                       5

12 rows selected.

创建了6个表空间,分别是C001TSP_SET_1 ~ 表空间C006TSP_SET_1,因为设置chunks=12,每个shard有6个chunks。

每个表空间有一个datafile,大小是100M,这个是在创建tablespace set时设置的datafile 100M。

--检查chunks

SQL> set linesize 140

SQL> column table_name format a20

SQL> column tablespace_name format a20

SQL> column partition_name format a20

SQL> show parameter db_unique_name

NAME                    TYPE  VALUE

------------------------------------ ----------- ------------------------------

db_unique_name                   string    sh2

SQL> select table_name, partition_name, tablespace_name from dba_tab_partitions

where tablespace_name like 'C%TSP_SET_1' order by tablespace_name;  2 

TABLE_NAME         PARTITION_NAME      TABLESPACE_NAME

-------------------- -------------------- --------------------

LINEITEMS      CUSTOMERS_P1    C001TSP_SET_1

CUSTOMERS      CUSTOMERS_P1    C001TSP_SET_1

ORDERS             CUSTOMERS_P1    C001TSP_SET_1

CUSTOMERS      CUSTOMERS_P2    C002TSP_SET_1

ORDERS             CUSTOMERS_P2    C002TSP_SET_1

LINEITEMS      CUSTOMERS_P2    C002TSP_SET_1

CUSTOMERS      CUSTOMERS_P3    C003TSP_SET_1

LINEITEMS      CUSTOMERS_P3    C003TSP_SET_1

ORDERS             CUSTOMERS_P3    C003TSP_SET_1

LINEITEMS      CUSTOMERS_P4    C004TSP_SET_1

CUSTOMERS      CUSTOMERS_P4    C004TSP_SET_1

ORDERS             CUSTOMERS_P4    C004TSP_SET_1

CUSTOMERS      CUSTOMERS_P5    C005TSP_SET_1

ORDERS             CUSTOMERS_P5    C005TSP_SET_1

LINEITEMS      CUSTOMERS_P5    C005TSP_SET_1

CUSTOMERS      CUSTOMERS_P6    C006TSP_SET_1

ORDERS             CUSTOMERS_P6    C006TSP_SET_1

LINEITEMS      CUSTOMERS_P6    C006TSP_SET_1

18 rows selected.

在sd2节点检查表空间和chunks信息

--表空间

SQL> select TABLESPACE_NAME, BYTES/1024/1024 MB from sys.dba_data_files order by tablespace_name;

TABLESPACE_NAME               MB

------------------------------ ----------

C007TSP_SET_1                100

C008TSP_SET_1                100

C009TSP_SET_1                100

C00ATSP_SET_1                100

C00BTSP_SET_1                100

C00CTSP_SET_1                100

PRODUCTS_TSP                 100

SYSAUX                       480

SYSTEM                       810

TSP_SET_1                100

UNDOTBS1                  65

USERS                       5

12 rows selected.

创建了6个表空间,分别是C007TSP_SET_1 ~ 表空间C00CTSP_SET_1,因为设置chunks=12,每个shard有6个chunks。

每个表空间有一个datafile,大小是100M,这个是在创建tablespace set时设置的datafile 100M。

--检查chunks

SQL> set linesize 140

SQL> column table_name format a20

SQL> column tablespace_name format a20

SQL> column partition_name format a20

SQL> select table_name, partition_name, tablespace_name from dba_tab_partitions

where tablespace_name like 'C%TSP_SET_1' order by tablespace_name;

TABLE_NAME         PARTITION_NAME      TABLESPACE_NAME

-------------------- -------------------- --------------------

ORDERS             CUSTOMERS_P7    C007TSP_SET_1

LINEITEMS      CUSTOMERS_P7    C007TSP_SET_1

CUSTOMERS      CUSTOMERS_P7    C007TSP_SET_1

ORDERS             CUSTOMERS_P8    C008TSP_SET_1

CUSTOMERS      CUSTOMERS_P8    C008TSP_SET_1

LINEITEMS      CUSTOMERS_P8    C008TSP_SET_1

LINEITEMS      CUSTOMERS_P9    C009TSP_SET_1

ORDERS             CUSTOMERS_P9    C009TSP_SET_1

CUSTOMERS      CUSTOMERS_P9    C009TSP_SET_1

LINEITEMS      CUSTOMERS_P10   C00ATSP_SET_1

ORDERS             CUSTOMERS_P10   C00ATSP_SET_1

CUSTOMERS      CUSTOMERS_P10   C00ATSP_SET_1

ORDERS             CUSTOMERS_P11   C00BTSP_SET_1

LINEITEMS      CUSTOMERS_P11   C00BTSP_SET_1

CUSTOMERS      CUSTOMERS_P11   C00BTSP_SET_1

LINEITEMS      CUSTOMERS_P12   C00CTSP_SET_1

CUSTOMERS      CUSTOMERS_P12   C00CTSP_SET_1

ORDERS             CUSTOMERS_P12   C00CTSP_SET_1

18 rows selected.

6.3 在catalog 数据库检查chunks 信息

SQL>  set echo off

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; 

SHARD                     NUMBER_OF_CHUNKS

------------------------------ ----------------

sh2                          6

sh3                          6

6.4   验证环境

--catalog数据库

SQL> conn app_schema/oracle

Connected.

SQL> select table_name from user_tables;

TABLE_NAME

--------------------------------------------------------------------------------

PRODUCTS

MLOG$_PRODUCTS

CUSTOMERS

ORDERS

LINEITEMS

RUPD$_PRODUCTS

6 rows selected.

--shard节点sd1和sd2

SQL> conn app_schema/oracle

Connected.

SQL> select table_name from user_tables;

TABLE_NAME

--------------------

CUSTOMERS

ORDERS

LINEITEMS

PRODUCTS

七:访问Shard

7.1 访问单独一个shard

在连接串中指定sharding key,那么GSM/shard director将请求连接到对应的一个shard

参数含义:

app_schema – 是业务用户,

(host=gsm1)(port=1522) – 是GSM/shard director 监听地址

service_name=oltp_rw_srvc.shdb.oradbcloud – 是前面创建的全局service

[oracle@db01 ~]$ sqlplus app_schema/oracle@'(description=(address=(protocol=tcp)(host=192.168.2.226)(port=1522)) (connect_data=(service_name=oltp_rw_srvc.shdb.oradbcloud)(region=region1)(SHARDING_KEY=chenjch)))'

SQL> select db_unique_name from v$database;

DB_UNIQUE_NAME

------------------------------

sh2

--- 插入数据

SQL> INSERT INTO Customers (CustId, FirstName, LastName, CustProfile,

    Class, Geo, Passwd) VALUES ('chenjch', 'chen', 'jch',

    NULL, 'Gold', 'east', hextoraw('8d1c00e'));  2    3 

1 row created.

SQL> commit;

Commit complete.

SQL> select custid, FirstName, LastName, class, geo from customers where custid = 'chenjch';

CUSTID             FIRSTNAME          LASTNAME      CLASS    GEO

-------------------- --------------- --------------- ---------- --------

chenjch       chen      jch      Gold east

--查询SHARDING_KEY=tom.david,连接到sd2:

[oracle@db01 ~]$ sqlplus app_schema/oracle@'(description=(address=(protocol=tcp)(host=db01)(port=1522))

(connect_data=(service_name=oltp_rw_srvc.shdb.oradbcloud)(region=region1)(SHARDING_KEY=ch.jc)))'

SQL> select db_unique_name from v$database;

DB_UNIQUE_NAME

------------------------------

sh3

SQL> INSERT INTO Customers (CustId, FirstName, LastName, CustProfile,

    Class, Geo, Passwd) VALUES ('chjc', 'ch', 'jc',

    NULL, 'Gold', 'east', hextoraw('8d1c00a'));

1 row created.

SQL> commit;

Commit complete.

--- 查询数据

---catalog本地查询

SQL> conn app_schema/oracle

SQL> column custid format a20

SQL> column firstname format a15

SQL> column lastname format a15

SQL> select custid, FirstName, LastName, class, geo from customers;

CUSTID             FIRSTNAME          LASTNAME      CLASS    GEO

-------------------- --------------- --------------- ---------- --------

chenjch       chen      jch      Gold east

chjc          ch       jc       Gold east

---sh2本地查询

SQL> conn app_schema/oracle

Connected.

SQL> column custid format a20

SQL> column firstname format a15

SQL> column lastname format a15

SQL> select custid, FirstName, LastName, class, geo from customers;

CUSTID             FIRSTNAME          LASTNAME      CLASS    GEO

-------------------- --------------- --------------- ---------- --------

chenjch       chen      jch      Gold east

---sh3本地查询

SQL> conn app_schema/oracle

Connected.

SQL> column custid format a20

SQL> column firstname format a15

SQL> column lastname format a15

SQL> select custid, FirstName, LastName, class, geo from customers;

CUSTID             FIRSTNAME          LASTNAME      CLASS    GEO

-------------------- --------------- --------------- ---------- --------

chjc          ch       jc       Gold east

总结:
1 、每个shard节点只能查询到本地节点shard table的数据
2 、在catalog数据库可以查询shard节点汇聚后的数据、
3 、客户端可指定sharding key的方式,定向获取数据

7.2 访问多个shard

如果在连接串中指定sharding key,那么GSM/shard director将请求连接到对应的一个shard。

如果没有指定sharding key,那么session和coordinator database (shard catalog)建立连接,然后再分别到需要(prund)的shard中查询,最后再整合。

优化器判断访问一个shard还是访问多个shard。

--链接到catalog数据库查询

[oracle@db01 ~]$ sqlplus app_schema/oracle@db01:1521/GDS\$CATALOG.oradbcloud

SQL> conn app_schema/oracle

Connected.

SQL> set termout on

SQL> set linesize 120

SQL> set echo on

SQL> column firstname format a20

SQL> column lastname format a20

SQL> explain plan for SELECT FirstName,LastName, geo, class FROM Customers

WHERE CustId in ('Scott.Tiger@x.bogus', 'Mary.Parker@x.bogus') AND class != 'free' ORDER

BY geo, class;

Oracle 12C Sharding部署和测试

Oracle 12C Sharding部署和测试

八:shard数据库启动和停止

--- 参考

https://blog.csdn.net/kiral07/article/details/86923508#Shard_Catalog_Database_63

8.1 关闭

(1)catalog数据库端,关闭director

GDSCTL>stop gsm -gsm SHARDDIRECTOR1

GSM 已成功停止

(2)关闭catalog监听

[oracle@db01 ~]$ lsnrctl stop

(3)关闭catalog数据库

SQL> shutdown immediate

(4) shard节点1和节点2关闭agent

[oracle@db02 trace]$ schagent -stop

[oracle@db03 trace]$ schagent -stop

(5) shard节点1和节点2关闭监控

[oracle@db02 trace]$ lsnrctl stop

[oracle@db03 trace]$ lsnrctl stop

(6) shard节点1和节点2关闭数据库

SQL> shutdown immediate

8.2 启动

(1)catalog端启动数据库和监听

SQL> startup

[oracle@db01 ~]$ lsnrctl start

(2) 所有shard节点启动数据库,监听,代理

SQL> startup

[oracle@db02 ~]$ lsnrctl start

[oracle@db03 ~]$ lsnrctl start

(3) catalog端启动director

GDSCTL>start gsm -gsm SHARDDIRECTOR1

GSM 已成功启动

(4)检查

GDSCTL>connect mygds/oracle

已建立目录连接

GDSCTL>config shard

名称                  分片组                 状态        状态          区域        可用性      

--                  ---                 --        --          --        ---      

sh2                 primary_shardgroup  确定        DDL 错误      region1   ONLINE   

sh3                 primary_shardgroup  确定        DDL 错误      region1   ONLINE

GDSCTL>config service

名称             网络名称                          池              已启动     全部首选        

--             ----                          -              ---     ----        

oltp_rw_srvc   oltp_rw_srvc.shdb.oradbcloud  shdb           是       是      

GDSCTL>databases

数据库: "sh2" 注册时间: Y 状态: 确定 ONS: N。角色: PRIMARY 实例: 1 区域: region1

   服务: "oltp_rw_srvc" 全局启动: Y 启动时间: Y

            扫描: Y 启用: Y 首选: Y

   已注册的实例:

     shdb%1

数据库: "sh3" 注册时间: Y 状态: 确定 ONS: N。角色: PRIMARY 实例: 1 区域: region1

   服务: "oltp_rw_srvc" 全局启动: Y 启动时间: Y

            扫描: Y 启用: Y 首选: Y

   已注册的实例:

     shdb%11

九:常见问题

9.1 create shard –shardgroup 错误

GDSCTL>create shard -shardgroup primary_shardgroup -destination db02 -credential cre_reg1 -sys_password oracle

GSM-45029: SQL 错误

ORA-03710: 目标中不存在目录或者无法写入目录: $ORACLE_BASE/fast_recovery_area

ORA-06512: 在 "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 7469

ORA-06512: 在 "SYS.DBMS_SYS_ERROR", line 86

ORA-06512: 在 "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 4978

ORA-27436: 调度程序代理操作失败, 显示消息: Agent Error: /u01/app/oracle/fast_recovery_area/shard_check.txt (No such file or directory)

ORA-06512: 在 "SYS.DBMS_ISCHED", line 3638

ORA-06512: 在 "SYS.DBMS_ISCHED", line 10444

ORA-06512: 在 "SYS.DBMS_ISCHED", line 5344

ORA-06512: 在 "SYS.DBMS_ISCHED", line 10439

ORA-06512: 在 "SYS.DBMS_ISCHED", line 3631

ORA-06512: 在 "SYS.DBMS_SCHEDULER", line 2414

ORA-06512: 在 "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 164

ORA-27436: 调度程序代理操作失败, 显示消息: Agent Error: /u01/app/oracle/fast_recovery_area/shard_check.txt (No such file or directory)

ORA-06512: 在 "SYS.DBMS_ISCHED", line 3638

ORA-06512: 在 "SYS.DBMS_ISCHED", line 10444

ORA-06512: 在 "SYS.DBMS_ISCHED", line 5344

ORA-06512: 在 "SYS.DBMS_ISCHED", line 10439

ORA-06512: 在 "SYS.DBMS_ISCHED", line 3631

ORA-06512: 在 "SYS.DBMS_SCHEDULER", line 2414

ORA-06512: 在 "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 157

ORA-06512: 在 "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 4965

ORA-06512: 在 line 1

--- 错误提示很明显,没有fast_recovery_area 目录,需要提前在db02 和db03 服务器上创建fast_recovery_area 目录

[oracle@db02 ~]$ mkdir $ORACLE_BASE/fast_recovery_area

9.2 catalog 创建用户和表,不能同步到 shard db 库

错误原因很多,需要具体问题具体分析,一般需要用到如下命令和日志进行分析问题:

(1)recover shard -shard sh2

(2)config shard -shard sh2

(3)alert_sh2.log

[oracle@db02 trace]$ pwd

/u01/app/oracle/diag/rdbms/sh2/sh2/trace

[oracle@db02 trace]$ tail -f alert_sh2.log

例如:

GDSCTL>recover shard -shard sh2

GSM 错误:

primary_shardgroup sh2:ORA-01119: error in creating database file \'/u01/app/oracle/oradata/db01/products_tsp01.dbf\'

ORA-06512: at "SYS.EXECASUSER", line 44

ORA-27040: file create error, unable to create file

Linux-x86_64 Error: 2: No such file or directory

Additional information: 1

ORA-06512: at "SYS.DBMS_SYS_SQL", line 1529

ORA-06512: at "SYS.EXECASUSER", line 31

ORA-06512: at "GSMADMIN_INTERNAL.EXECUTEDDL", line 70

ORA-06512: at line 1 (ngsmoci_execute)

GDSCTL>recover shard -shard sh2

GSM 错误:

primary_shardgroup sh2:ORA-03715: invalid user APP_SCHEMA

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86

ORA-06512: at "SYS.EXECASUSER", line 22

ORA-06512: at "GSMADMIN_INTERNAL.EXECUTEDDL", line 70

ORA-06512: at line 1 (ngsmoci_execute)

GDSCTL>config shard -shard sh3

名称: sh3

分片组: primary_shardgroup

状态: 确定

状态: 已部署

区域: region1

连接字符串: db03:1521/sh3:dedicated

SCAN 地址:

ONS 远程端口: 0

磁盘阈值, 毫秒: 20

CPU 阈值, %: 75

版本: 12.2.0.0

上次失败的 DDL: drop tablespace TSP_SET_1 incl...

DDL 错误: ORA-03715: invalid user APP_SCHEMA

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86

ORA-06512: at "SYS.EXECASUSER", line 22

ORA-06512: at "GSMADMIN_INTERNAL.EXECUTEDDL", line 70

ORA-06512: at line 1 \(ngsmoci_execute\)

9.3 GSM 启动失败,显示异常或未运行

问题现象:

启动GSM显示实例已运行,停止GSM显示异常或未运行;

排查原因:

查看告警日志

[oracle@db01 trace]$ pwd

/u01/app/oracle/diag/gsm/db01/sharddirector1/trace

[oracle@db01 trace]$ vi alert_sharddirector.log

问题原因:

创建sharddirector时指定的端口已经被其他应用占用,但是可以创建成功,后续启动GSM就会失败,删除新建即可

GDSCTL> add gsm -gsm sharddirector1 -listener   1522   -pwd oracle -catalog db01:1521:db01 -region region1

十:参考文献

《12c新特性-Oracle Sharding简介》

https://blogs.oracle.com/database4cn/12c-oracle-sharding

《Sharded Database Deployment》

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/admin/sharding-deployment.html#GUID-61B495D3-4482-47E2-937E-B7E03286F565

《Oracle 12C Sharding分片数据库》

https://blog.csdn.net/kiral07/article/details/86923508#OracleSharding_Manage_80

《Oracle Sharding - Troubleshooting Tips and Techniques (文档 ID 2180259.1)》

https://support.oracle.com/epmos/faces/SearchDocDisplay?_adf.ctrl-state=151coor2ou_9&_afrLoop=249031377428729

欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!

Oracle 12C Sharding部署和测试

Oracle 12C Sharding部署和测试


您可能感兴趣的文档:

--结束END--

本文标题: Oracle 12C Sharding部署和测试

本文链接: https://lsjlt.com/news/45964.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle 12C Sharding部署和测试
    Oracle 12C Sharding 部署和测试   日期: 2019-02-26   作者:陈举超 目录 一:环境说明 ... 4 二:安装...
    99+
    2024-04-02
  • Flask测试和部署
    一 蓝图Blueprint 为什么学习蓝图? 我们学习Flask框架,是从写单个文件,执行hello world开始的。我们在这单个文件中可以定义路由、视图函数、定义模型等等。但这显然存在一个问题:随着业务代码的增加,将所有代码都放在单个...
    99+
    2023-01-31
    测试 Flask
  • Inception部署测试
    欢迎转载,请注明作者、出处。 ...
    99+
    2024-04-02
  • Oracle 12C DataGuard部署以及维护
    Oracle 12C DataGuard部署以及维护 iverycd 2019-02-10 17:24:04 2984 收藏 4 分类专栏: DataGuard 版权 Oracle 12C DataGuard部署     一、环境部署 ...
    99+
    2016-08-07
    Oracle 12C DataGuard部署以及维护
  • 基于CentOS7安装部署 Oracle 12c
    基于CentOS7安装部署 Oracle 12c 简介 Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。是目前最流行的客户/服务...
    99+
    2024-04-02
  • Oracle 12C RAC CDB数据库部署
    Oracle中的12C新特性-容器数据库---12.1.0.2_GI_RAC_Create_CDB_Blog一、         安装前的准备安装两个节点的 1...
    99+
    2023-05-31
  • dm7-oracle部署dblink测试不通问题
    我们在进行dm7-oracle 之间部署dblink 时,往往会碰到这个错误: 【描述】 部署好dblink 后 在 dm7 客户端创建外部链接并测试,会遇到的问题是在 dm 端怎么测试都不通。 碰到...
    99+
    2024-04-02
  • 部署Oracle 12c企业版数据库
    在计算机信息安全领域中,数据库系统无疑有着举足轻重的地位。比如:SQL Server、MySQL、DB2、Oracle等,都是比较知名的数据库管理软件,由于Oracle数据库的安全性,所以在一些比较重要的场...
    99+
    2024-04-02
  • centos 7部署oracle 12c rac 上菜了
    oracle 12c 发布用很长一段时间了,虽然在近期部署了几套单实例oracle 12c,但一直都没有机会在生产环境实施12c rac,当然,既不能把现有的11g rac干掉,替换成12c rac,又没有...
    99+
    2024-04-02
  • Centos7中如何部署安装Oracle 12c
    这篇文章主要介绍了Centos7中如何部署安装Oracle 12c,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。oracle数据库是在数据库...
    99+
    2024-04-02
  • Oracle 12c Data Guard 纯小白部署手册
    子公司需要搭建数据仓库,并且新建ADG作为主从,硬件设备Dell R730机器;192.168.1.11 dwjrdb --主库 192.168.1.12 dwjrstdy...
    99+
    2024-04-02
  • onlyoffice 安装、测试、打包、部署
    这里安装采用docker安装,所以需要提前安装docker环境 一、首先安装docker环境 二、安装onlyoffice 1.查询docker镜像 docker search onlyoffice 2.拉取docker镜像 sudo ...
    99+
    2023-09-04
    docker 容器 运维 java
  • 如何部署Oracle 12c企业版数据库
    这篇文章主要介绍了如何部署Oracle 12c企业版数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在计算机信息安全领域中,数据库系统无...
    99+
    2024-04-02
  • Oracle RAC+DG环境搭建(CentOS 7+Oracle 12C)( 十) 部署 DataGuard
    一、配置主机   1. 设置主机名 hostnamectl set-hostname  DG   2. 配置网络 vim /e...
    99+
    2024-04-02
  • 基于Cent os7安装部署oracle 12c数据库
    oracle数据库是一个相对庞大的应用软件,对服务器的系统类型,内存和交换分区、硬盘空间、内核参数、软件环境、用户环境等都有相应的要求。只有满足了必备的条件,才能确保oracle 12c安装成功,运行稳定。...
    99+
    2024-04-02
  • redhat 7部署oracle 12c、18c安装乱码解决
    redhat7.5在部署oracle 12.2、18.3时候,安装界面可能会出现乱码,这个是由于安装redhat7.x的时候少装了字体包,缺少字体所致,另外在安装goldengate时候也会出现乱码,安装部...
    99+
    2024-04-02
  • 如何利用GitLab进行多环境部署和测试
    如何利用GitLab进行多环境部署和测试引言:随着软件开发的迅猛发展,项目中常常会涉及到多个环境的部署和测试。为了简化部署流程和提高交付效率,利用GitLab进行多环境部署和测试成为了一种常见的做法。本文将介绍如何在GitLab中配置和管理...
    99+
    2023-10-25
    GitLab:版本控制 多环境部署:环境管理 测试:自动化测试
  • PHP 接口和 JavaScript:如何在 Git 中进行测试和部署?
    在开发过程中,测试和部署是至关重要的步骤。Git 是一个流行的版本控制系统,它可以帮助我们管理代码的版本和协作开发。本文将介绍如何在 Git 中测试和部署 PHP 接口和 JavaScript 代码。 一、测试 PHP 接口 首先,我们需...
    99+
    2023-06-30
    接口 javascript git
  • 自动化测试——selenium(环境部署和元素定位篇)
    自动化测试——selenium(环境部署和元素定位篇) 文章目录 自动化测试——selenium(环境部署和元素定位篇)一、web自动化环境部署1.1 selenium安装1.2 浏览器驱动获...
    99+
    2023-09-22
    单元测试 python 自动化 selenium
  • Deepgreen(Greenplum) 多机部署测试 , TPC-H VS citus
    背景 多机部署deepgreen,与greenplum部署方法类似。 本文仅用于测试。 1 环境 与之前测试citus的环境一致,9台ECS虚拟机。 xxx.xxx.xxx.228...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作