Oracle 19C 分片叢集安裝測試
阿新 • • 發佈:2021-01-14
技術標籤:oracle
Oracle 19C 分片叢集安裝測試
資料庫版本需要12c R2以上
一 叢集安裝
安裝依賴包
yum -y install nano vim wget curl net-tools lsof zip unzip perl autoconf autoconf binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33.i686 glibc glibc.i686 glibc-devel glibc-devel.i686 ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libX11 libXau libXi libXau.i686 libXi.i686 libXtst libXtst.i686 libgcc libgcc.i686 libstdc++ libstdc++.i686 libstdc++-devel libstdc++-devel.i686 libxcb libxcb.i686 make nfs-utils net-tools smartmontools sysstat unixODBC unixODBC-devel gcc gcc-c++ xterm libXp e2fsprogs e2fsprogs-libs elfutils-libelf-devel libXrender bc
建立使用者相關資訊
建立組: /usr/sbin/groupadd -g 1001 oinstall /usr/sbin/groupadd -g 1002 dba /usr/sbin/groupadd -g 1003 oper /usr/sbin/groupadd -g 1004 asmdba /usr/sbin/groupadd -g 1005 backupdba /usr/sbin/groupadd -g 1006 dgdba /usr/sbin/groupadd -g 1007 kmdba /usr/sbin/groupadd -g 1008 racdba 建立使用者: /usr/sbin/useradd -u 1001 -m -g oinstall -G dba,oper,asmdba,backupdba,dgdba,kmdba,racdba oracle chage -M -1 oracle chage -l oracle
修改作業系統相關配置檔案
-
修改/etc/sysctl.conf
[[email protected] ~]# grep MemTotal /proc/meminfo MemTotal: 131348800 kB #計算方法如下 shmall = 3861320 * 1024 / 4096 =32837200 shmmax = 3861320 * 1024 *0.9 =121051054080 vi /etc/sysctl.conf fs.file-max = 6815744 kernel.sem = 250 32000 100 128 kernel.shmmni = 4096 kernel.shmall = 121051054080 kernel.shmmax = 121051054080 kernel.panic_on_oops = 1 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.default.rp_filter = 2 fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65500 #生效 sysctl -p
-
修改/etc/hosts
10.10.100.24 sit1 10.10.100.25 sit2 10.10.100.26 sit3 10.10.100.27 sit4
-
修改/etc/security/limits.conf
oracle soft nproc 100000 oracle hard nproc 100000 oracle soft nofile 100000 oracle hard nofile 100000 oracle soft stack 100000 oracle hard stack 100000
-
vi /etc/pam.d/login
session required /lib64/security/pam_limits.so
#session required /lib/security/pam_limits.so
建立目錄
mkdir -p /app/oracle
chown -R oracle:oinstall /app/oracle
su - oracle
vi .bash_profile
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_HOSTNAME=sit1; export ORACLE_HOSTNAME
ORACLE_BASE=/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/19.3.0/db_1; export ORACLE_HOME
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
在所有非gsm節點安裝資料庫軟體(只安裝軟體)
解壓安裝檔案
mv /app/LINUX.X64_193000_db_home.zip /app/oracle/product/19.3.0/db_1/
cd /app/oracle/product/19.3.0/db_1
unzip LINUX.X64_193000_db_home.zip
修改響應檔案
cd /app/oracle/product/19.3.0/db_1/install/response
vi db_install.rsp
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/app/oracle/oraInventory
ORACLE_HOME=/app/oracle/product/19.3.0/db_1
ORACLE_BASE=/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
執行響應指令碼
./runInstaller -silent -force -responseFile /app/oracle/product/19.3.0/db_1/install/response/db_install.rsp
安裝gsm節點
mkdir -p /app/gsm/product/19.3.0/gsm
chown -R oracle:oinstall /app/gsm/product/19.3.0/gsm
mv LINUX.X64_193000_gsm.zip /app/gsm/product/19.3.0/
unzip LINUX.X64_193000_gsm.zip
./runInstaller -silent -force -responseFile /app/gsm/product/19.3.0/gsm/response/gsm_install.rsp
安裝Shard catalog
Shard catalog是shard伺服器的元資料資訊,也是個Oracle資料庫,所以在非gsm伺服器中正常安裝資料庫就行,但是記住,真正的shard伺服器不要建立監聽
-
建立監聽
netca /silent /responsefile /app/oracle/product/19.3.0/db_1/assistants/netca/netca.rsp
-
修改dbca.rsp響應檔案
vi /app/oracle/product/19.3.0/db_1/assistants/dbca/dbca.rsp gdbName=catadb sid=catadb createAsContainerDatabase=false # 這個引數很重要必須是false sysPassword=sys systemPassword=sys totalMemory=4096 characterSet=AL32UTF8 nationalCharacterSet=AL16UTF16 templateName=General_Purpose.dbc dbca -silent -createDatabase -responseFile /app/oracle/product/19.3.0/db_1/assistants/dbca/dbca.rsp
-
設定Oracle分片管理和路由層
連線新建的catalog資料庫 sqlplus / as sysdba SQL> show parameter db_create_file_dest; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_create_file_dest string # 此引數必須設定,否則無法建立後面的分片表空間 SQL> alter system set db_create_file_dest='/app/oracle/oradata' scope=both; SQL> show parameter open_links; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ open_links integer 4 open_links_per_instance integer 4 SQL> alter system set open_links=200 scope=spfile; SQL> alter system set open_links_per_instance=200 scope=spfile; SQL> alter user gsmcatuser identified by oracle account unlock; SQL> create user damsadmin identified by damsadmin; SQL> grant connect, create session, gsmadmin_role to damsadmin; SQL> grant inherit privileges on user SYS to GSMADMIN_INTERNAL;
配置GSM
-
連線GSM
[[email protected] ~]$ gdsctl # catadb主備模式配置 可以用主備模式建立catadb,因為catadb假如出現故障所有叢集無法使用 # 建立系統管理的分片目錄 create shardcatalog -database sit1:1521:catadb -repl DG -protectmode maxavailability -user damsadmin/damsadmin -sharding system -sdb damsshdb -chunks 12 -region region1, region2 -agent_port 9762 -agent_password oracle # 複合分片資料庫 create shardcatalog -database sit1:1521:catadb -repl DG -protectmode maxavailability -user damsadmin/damsadmin -sharding composite -sdb damsshdb -chunks 12 -shardspace shardspace1, shardspace2 -agent_port 9762 -agent_password oracle #使用者定義的分片資料庫 create shardcatalog -database sit1:1521:catadb -repl DG -protectmode maxavailability -user damsadmin/damsadmin -sharding user -sdb damsshdb -region region1, region2 -agent_port 9762 -agent_password oracle # 單機配置 create shardcatalog -database sit1:1521:catadb -user damsadmin/damsadmin -sdb damsshdb -sharding system -region region1, region2 -agent_port 9762 -agent_password oracle
-
建立並啟動分片導向器
GDSCTL> add gsm -gsm sharddirector1 -listener 1571 -pwd oracle -catalog sit1:1521:catadb -region region1 GDSCTL> start gsm -gsm sharddirector1 # 設定作業系統憑據(在gsm01上,假如單節點只使用這個即可),這個是作業系統的使用者和密碼 GDSCTL> add credential -credential cre_reg1 -osaccount oracle -ospassword oracle
假如有叢集,在另一個gsm節點上建立,假如沒有在當前gsm節點建立
GDSCTL> add gsm -gsm sharddirector2 -listener 1572 -pwd oracle -catalog sit1:1521:catadb -region region2 GDSCTL> start gsm -gsm sharddirector2
配置分片伺服器
在每個分片伺服器執行
[[email protected] ~] schagent -start
[[email protected] ~] schagent -status
# 密碼oracle和埠8080是在第7步建立shardcatalog時設定的(oracle 是指 agent_password):
# 密碼和埠是上面配置的-agent_port 9762 -agent_password oracle
[[email protected] ~] echo oracle | schagent -registerdatabase sit1 9762
[[email protected] ~] mkdir -p /app/oracle/oradata
[[email protected] ~] mkdir -p /app/oracle/fast_recovery_area
建立sdb
-
在gsm上配置
[[email protected] ~] gdsctl GDSCTL> set gsm -gsm sharddirector1 GDSCTL> connect damsadmin/damsadmin #為主分片新增一個分片組 GDSCTL> add shardgroup -shardgroup primary_shgrp -deploy_as primary -region region1 #為活動Data Guard備用分片新增一個分片組 GDSCTL> add shardgroup -shardgroup standby_shgrp -deploy_as active_standby -region region2 # 將每個分片的主機地址新增到有效節點,以檢查目錄中的註冊(VNCR)列表,然後在主或備用分片組中建立分片 GDSCTL> add invitednode sit2 GDSCTL> create shard -shardgroup primary_shgrp -destination sit2 -credential cre_reg1 -sys_password oracle GDSCTL> add invitednode sit3 GDSCTL> create shard -shardgroup primary_shgrp -destination sit3 -credential cre_reg1 -sys_password oracle GDSCTL> add invitednode sit4 GDSCTL> create shard -shardgroup primary_shgrp -destination sit4 -credential cre_reg1 -sys_password oracle # 由於我機器不富裕所以我沒有裝備庫,所以以下我沒有執行,並且刪除了副本shard GDSCTL> add invitednode ddd GDSCTL> create shard -shardgroup standby_shgrp -destination ddd -credential cre_reg1 -sys_password 123456 GDSCTL> remove shardgroup -shardgroup standby_shgrp # 假如配置錯誤用以下命令刪除 GDSCTL> remove credential -credential cre_reg1
-
檢查配置
GDSCTL> config Regions ------------------------ region1 region2 GSMs ------------------------ sharddirector1 sharddirector2 Sharded Database ------------------------ damsshdb Databases ------------------------ sh1 sh2 sh3 Shard Groups ------------------------ primary_shgrp standby_shgrp Shard spaces ------------------------ shardspaceora Services ------------------------ GDSCTL pending requests ------------------------ Command Object Status ------- ------ ------ Global properties ------------------------ Name: oradbcloud Master GSM: sharddirector1 DDL sequence #: 0 GDSCTL> config shardspace Shard space Chunks ----------- ------ shardspaceora GDSCTL> config shardgroup Shard Group Chunks Region Shard space ----------- ------ ------ ----------- primary_shgrp region1 shardspaceora standby_shgrp region2 shardspaceora GDSCTL> config vncr Name Group ID ---- -------- 10.10.100.24 sit2 sit3 sit4 GDSCTL> config shard Name Shard Group Status State Region Availability ---- ----------- ------ ----- ------ ------------ sh1 primary_shgrp U none region1 - sh2 primary_shgrp U none region1 - sh3 primary_shgrp U none region1 -
-
執行安裝
#執行DEPLOY命令以建立分片和副本。 #該DEPLOY命令需要一些時間才能執行,大約需要15到30分鐘 GDSCTL> deploy
-
建立服務
GDSCTL> add service -service damsserver -role primary GDSCTL> start service -service damsserver GDSCTL> status service
二 叢集使用
建立使用者
連線到分片目錄資料庫(catadb),建立應用程式模式使用者,並向該使用者授予特權和角色
[[email protected] ~]$ sqlplus / as sysdba
SQL> alter session enable shard ddl;
SQL> create user dams identified by dams;
SQL> grant all privileges to dams;
SQL> grant gsmadmin_role to dams;
SQL> grant select_catalog_role to dams;
SQL> grant connect, resource to dams;
SQL> grant dba to dams;
SQL> grant execute on dbms_crypto to dams;
建立分片表空間集
SQL> CREATE TABLESPACE SET TSP_SET_1 in shardspace shardspaceora using template (datafile size 512m autoextend on next 512M maxsize unlimited extent management local segment space management auto );
建立重複表表空間
SQL> CREATE TABLESPACE dup_tsp datafile size 100m autoextend on next 512M maxsize unlimited extent management local segment space management auto;
為根表建立一個分割槽表
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),
Passwd RAW(60),
CONSTRAINT pk_customers PRIMARY KEY (CustId)
) TABLESPACE SET TSP_SET_1
PARTITION BY CONSISTENT HASH (CustId) PARTITIONS AUTO;
為表族中的其他表建立一個分片表
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);
建立任何必需的重複表
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;
塊分片生成唯一ID
SQL> CREATE SEQUENCE SHARD_Seq SHARD EXTEND;
在分片主機中驗證
GDSCTL> show ddl
GDSCTL> config shard -shard sh1
SQL> select TABLESPACE_NAME, BYTES/1024/1024 MB from sys.dba_data_files order by tablespace_name;
三 新增分片
和建立類似,在每個分片伺服器執行,機器名自行修改
[[email protected] ~] schagent -start
[[email protected] ~] schagent -status
# 密碼oracle和埠8080是在第7步建立shardcatalog時設定的(oracle 是指 agent_password):
# 密碼和埠是上面配置的-agent_port 9762 -agent_password oracle
[[email protected] ~] echo oracle | schagent -registerdatabase sit1 9762
[[email protected] ~] mkdir -p /app/oracle/oradata
[[email protected] ~] mkdir -p /app/oracle/fast_recovery_area
[[email protected] ~] gdsctl
GDSCTL> set gsm -gsm sharddirector1
GDSCTL> connect damsadmin/damsadmin
#為主分片新增一個分片組
GDSCTL> add shardgroup -shardgroup primary_shgrp -deploy_as primary -region region1
#為活動Data Guard備用分片新增一個分片組
GDSCTL> add shardgroup -shardgroup standby_shgrp -deploy_as active_standby -region region2
# 將每個分片的主機地址新增到有效節點,以檢查目錄中的註冊(VNCR)列表,然後在主或備用分片組中建立分片
GDSCTL> add invitednode sit2
GDSCTL> create shard -shardgroup primary_shgrp -destination sit2 -credential cre_reg1 -sys_password oracle
GDSCTL> add invitednode sit3
GDSCTL> create shard -shardgroup primary_shgrp -destination sit3 -credential cre_reg1 -sys_password oracle
GDSCTL> add invitednode sit4
GDSCTL> create shard -shardgroup primary_shgrp -destination sit4 -credential cre_reg1 -sys_password oracle
GDSCTL> deploy
四 基本操作
# catalog資料庫端,關閉director
GDSCTL>stop gsm -gsm sharddirector1
# 關閉catalog監聽
[[email protected] ~]$ lsnrctl stop
# 關閉catalog資料庫
SQL> shutdown immediate
# shard節點1和節點2關閉agent
[[email protected] trace]$ schagent -stop
[[email protected] trace]$ schagent -stop
# shard節點1和節點2關閉監控
[[email protected] trace]$ lsnrctl stop
[[email protected] trace]$ lsnrctl stop
# shard節點1和節點2關閉資料庫
SQL> shutdown immediate
# catalog端啟動資料庫和監聽
SQL> startup
[[email protected] ~]$ lsnrctl start
# 所有shard節點啟動資料庫,監聽,代理
SQL> startup
[[email protected] ~]$ lsnrctl start
[[email protected] ~]$ lsnrctl start
# catalog端啟動director
GDSCTL>start gsm -gsm sharddirector1
GSM 已成功啟動