Oracle-12C-Sharding-安裝配置
阿新 • • 發佈:2020-08-20
參考:
Oracle 12C Sharding部署和測試
12c新特性-Oracle Sharding簡介
1.規劃
序號 | 主機名 | 元件 | sid | Oracle_Home | IP | 記憶體大小 |
---|---|---|---|---|---|---|
1 | gsm1 | shard Director | /u05/../12.2.0/gsm_1 | 192.168.40.135 | 4GB | |
2 | gsm1 | Shard catalog | catadb | /u01/. ./12.2.0/db_1 | 192.168.40.135 | 4GB |
3 | sd1 | shard伺服器1 | sh1 | /u01/. ./12.2.0/db_1 | 192.168.40.136 | 4GB |
4 | sd2 | shard伺服器2 | sh2 | /u01/. ./12.2.0/db_1 | 192.168.40.137 | 4GB |
2.硬碟劃分
序號 | 分割槽名稱 | 大小 | 用途說明 |
---|---|---|---|
1 | /boot | 200MB | 引導分割槽 |
2 | /tmp | 2G | 臨時空間 |
3 | /home | 1G | 所有使用者的home目錄 |
4 | swap | 8G | 交換分割槽(實體記憶體小於8G則 *2 反之 同實體記憶體 |
5 | / | 39G | 根分割槽 |
3.禁用防火牆
#關閉firewall:停止firewall
systemctl stop firewalld.service
#禁止firewall開機啟動
systemctl disable firewalld.service
4.安裝基本工具
yum -y install nano vim wget curl net-tools lsof zip unzip
yum -y install perl autoconf autoconf
cd /usr/local/src
wget http://www.rpmfind.net/linux/epel/6/x86_64/Packages/r/rlwrap-0.42-1.el6.x86_64.rpm
rpm -ivh rlwrap-0.42-1.el6.x86_64.rpm
5.linux完整更新(可選項)
yum update -y
6.檢查並解除安裝OpenJDK & 安裝JDK 1.8
#解除安裝
rpm -qa | grep java
#安裝jdk
mkdir /u01/java -p
cd /u01/java/
#上傳jdk-8u181-linux-x64.tar.gz
tar -zxvf jdk-8u181-linux-x64.tar.gz
#設定環境變數
vim /etc/profile
在profile中新增如下內容:
#set java environment
JAVA_HOME=/u01/java/jdk1.8.0_181
JRE_HOME=/u01/java/jdk1.8.0_181/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
#讓修改生效:
source /etc/profile
#輸入java -version檢視一下jdk版本資訊:
java -version
7.sysctl.conf 配置
grep MemTotal /proc/meminfo
MemTotal: 3861320 kB
#計算方法如下
shmall = 3861320 * 1024 /4096 =965330
shmmax = 3861320 * 1024 *0.9 =3558592512
[root@sd2 ~]# cat /etc/sysctl.conf
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 965330
kernel.shmmax = 3558592512
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
8.配置主機名
[root@gsm1 ~]# cat /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
HOSTNAME=gsm1
[root@sd1 ~]# cat /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
HOSTNAME=sd1
[root@sd2 ~]# cat /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
HOSTNAME=sd2
vim /etc/hosts
#增加如下
192.168.40.135 gsm1
192.168.40.136 sd1
192.168.40.137 sd2
9.配置limits.conf
vim /etc/security/limits.conf
#增加如下配置
#最後兩行memlock =kernel.shmmax/1024 = 3558592512/1024=3475188
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 16384
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
oracle soft memlock 3475188
oracle hard memlock 3475188
10.編輯 /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
#SELINUXTYPE=targeted
SELINUX=permissive
#生效
setenforce Permissive
11.建立使用者和組
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
#groupadd -g 54324 backupdba
#groupadd -g 54325 dgdba
#groupadd -g 54326 kmdba
#groupadd -g 54327 asmdba
#groupadd -g 54328 asmoper
#groupadd -g 54329 asmadmin
#groupadd -g 54330 racdba
useradd -u 54321 -g oinstall -G dba,oper oracle
#oracle使用者的登入密碼,後續登入要用,記著。
echo "123456" | passwd --stdin oracle
#設定密碼永不過期
chage -M -1 oracle
chage -l oracle
id oracle
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper)
12.配置/dev/shm大小
#驗證共享記憶體是否已正確安裝且大小足夠
# > SGA+PGA 或 =實體記憶體*50%
vim /etc/fstab
#修改/dev/shm的大小
修改/etc/fstab的這行: 預設的:
tmpfs /dev/shm tmpfs defaults 0 0
改成:
tmpfs /dev/shm tmpfs defaults,size=4G 0 0
#重新mount /dev/shm使之生效:
mount -o remount /dev/shm
df -h
...
tmpfs 4.0G 0 4.0G 0% /dev/shm
...
13.限制引數修改(可)
vim /etc/pam.d/login
#add
#這是對應64位的
session required /lib64/security/pam_limits.so
#這是對應32位的
#session required /lib/security/pam_limits.so
#修改ulimit:
vim /etc/profile
#新增oracle 使用者 limit:
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
#生效
source /etc/profile
14.建立目錄
mkdir -p /u01/app/oracle/
mkdir -p /u01/tmp/
#mkdir -p /u02/oradata/
#mkdir -p /u03/fra/
mkdir -p /u01/app/oracle/oradata/
mkdir -p /u01/app/oracle/fast_recovery_area
chown -R oracle:oinstall /u01/app/
chown -R oracle:oinstall /u01/tmp/
#chown -R oracle:oinstall /u02/oradata/
#chown -R oracle:oinstall /u03/fra/
chmod -R 775 /u01/app/
chmod -R 775 /u01/tmp/
#chmod -R 775 /u02/oradata/
#chmod -R 775 /u03/fra/
15.安裝oracle 12c 依賴包
yum install binutils -y
yum install compat-libcap1 -y
yum install compat-libstdc++-33 -y
yum install compat-libstdc++-33.i686 -y
yum install glibc -y
yum install glibc.i686 -y
yum install glibc-devel -y
yum install glibc-devel.i686 -y
yum install ksh -y
yum install libaio -y
yum install libaio.i686 -y
yum install libaio-devel -y
yum install libaio-devel.i686 -y
yum install libX11 -y
yum install libX11.i686 -y
yum install libXau -y
yum install libXau.i686 -y
yum install libXi -y
yum install libXi.i686 -y
yum install libXtst -y
yum install libXtst.i686 -y
yum install libgcc -y
yum install libgcc.i686 -y
yum install libstdc++ -y
yum install libstdc++.i686 -y
yum install libstdc++-devel -y
yum install libstdc++-devel.i686 -y
yum install libxcb -y
yum install libxcb.i686 -y
yum install make -y
yum install nfs-utils -y
yum install net-tools -y
yum install smartmontools -y
yum install sysstat -y
yum install unixODBC -y
yum install unixODBC-devel -y
yum install gcc gcc-c++ xterm libXp e2fsprogs e2fsprogs-libs elfutils-libelf-devel libXrender -y
yum -y install bc
16.建立scripts 目錄及setEnv.sh檔案(從此處開始無特別說明都是在oracle使用者下操作)
mkdir /home/oracle/scripts
#建立 setEnv.sh 檔案 [不同機器上 ORACLE_ 的 HOSTNAME、UNQNAME、SID 不同]
##gsm1
----------------------------------------------------------------------
cat > /home/oracle/scripts/setEnv.sh <<EOF
# Oracle Settings
export TMP=/tmp
export TMPDIR=\$TMP
export ORACLE_HOSTNAME=gsm1
export ORACLE_UNQNAME=catadb
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/12.2.0.1/db_1
export ORACLE_SID=catadb
export PATH=/usr/sbin:/usr/local/bin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
EOF
=================================================================
##sd1
----------------------------------------------------------------------
cat > /home/oracle/scripts/setEnv.sh <<EOF
# Oracle Settings
export TMP=/tmp
export TMPDIR=\$TMP
export ORACLE_HOSTNAME=sd1
export ORACLE_UNQNAME=sh1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/12.2.0.1/db_1
export ORACLE_SID=sh1
export PATH=/usr/sbin:/usr/local/bin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
EOF
=================================================================##sd2
----------------------------------------------------------------------
cat > /home/oracle/scripts/setEnv.sh <<EOF
# Oracle Settings
export TMP=/tmp
export TMPDIR=\$TMP
export ORACLE_HOSTNAME=sd2
export ORACLE_UNQNAME=sh2
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/12.2.0.1/db_1
export ORACLE_SID=sh2
export PATH=/usr/sbin:/usr/local/bin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
EOF
=================================================================
#Add a reference to the "setEnv.sh" file at "/home/oracle/.bash_profile" file
echo ". /home/oracle/scripts/setEnv.sh" >> /home/oracle/.bash_profile
#生效
source /home/oracle/.bash_profile
#Create a "start_all.sh" and "stop_all.sh" script
---------------------------------------------------------------
cat > /home/oracle/scripts/start_all.sh <<EOF
#!/bin/bash
. /home/oracle/scripts/setEnv.sh
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES
dbstart \$ORACLE_HOME
EOF
---------------------------------------------------------------
cat > /home/oracle/scripts/stop_all.sh <<EOF
#!/bin/bash
. /home/oracle/scripts/setEnv.sh
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES
dbshut \$ORACLE_HOME
EOF
=====================================================
chown -R oracle.oinstall /home/oracle/scripts
chmod u+x /home/oracle/scripts/*.sh
17.安裝database 軟體
export DISPLAY=192.168.0.7:0.0
#安裝oracle 【說明:本次僅安裝軟體】
unzip linuxx64_12201_database.zip
cd database/
./runInstaller
18.建立並啟動監聽
netca
19.啟停說明 【附加】
#編輯 "/etc/oratab" file setting the restart flag for each instance to 'Y'.
catadb:/u01/app/oracle/product/12.2.0.1/db_1:Y
#通過如下指令碼啟動或停止資料庫
/home/oracle//scripts/start_all.sh
/home/oracle//scripts/stop_all.sh
20.安裝GDS/GSM軟體【gsm1上安裝】
#建立 gds 使用者 【root 下操作】
useradd -g oinstall -G dba,oper gds
#gds使用者的登入密碼,後續登入要用,記著。
echo "123456" | passwd --stdin gds
#設定密碼永不過期
chage -M -1 gds
chage -l gds
#建立安裝目錄
mkdir -p /u05/app/oracle/
chown -R gds:oinstall /u05/app/
chmod -R 775 /u05/app/
mkdir -p /u05/tmp/
chown -R gds:oinstall /u05/tmp/
chmod -R 775 /u05/tmp/
# 檢視環境變數
su - gds
vim /home/gds/.bash_profile
source /home/gds/.bash_profile
cat /home/gds/.bash_profile
-------------------------------------------------------------------------
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
ORACLE_BASE=/u05/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12.2.0/gsm_1; export ORACLE_HOME
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
export PATH=${PATH}:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export TEMP=/u05/tmp
export TMPDIR=/u05/tmp
umask 022
=================================================================
#開始安裝gsm
export DISPLAY=192.168.0.7:0.0
unzip linuxx64_12201_gsm.zip
cd gsm
./runInstaller
# 安裝很簡單,一直點 next
21.建立Shard Catalog database (即catadb 例項) -> gsm1 上 oracle 使用者
#在Shard catalog 伺服器gsm1 上 建立 non-cdb (即不要勾選 create as container database)
#字符集:AL32UTF8,National character set 選擇 AL16UTF。建立過程與普通資料庫相同
#選擇File System,選擇Oracle-Managed Files(OMF)
#選擇Specify Fast Recovery Area ,Enable archiving
#不要選擇Configure EnterpriseManager(EM) database express
dbca
22.配置GSM/Shard director -> gsm1 上 oracle 使用者
#檢查資料庫是否存在GSM使用者(必備條件)
#12c後新增了幾個使用者,下面這些使用者用於GDS
sql / as sysdba
SQL> SET SQLFORMAT ansiconsole
SQL> select username,account_status from dba_users where username like '%GSM%';
USERNAME ACCOUNT_STATUS
GSMCATUSER EXPIRED & LOCKED
GSMUSER EXPIRED & LOCKED
GSMADMIN_INTERNAL EXPIRED & LOCKED
#解鎖使用者
sqlplus / as sysdba
SQL> alter user gsmcatuser identified by oracle account unlock;
#建立管理使用者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;
#在gsm1伺服器(catalog 資料庫/shard director),啟動listener
#步驟4 在gsm1伺服器gds使用者下,建立shard catalog,在shard catalog中配置remote scheduler agent.
su - gds
引數含義:
-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)型別
$ gdsctl
GDSCTL>
create shardcatalog -database gsm1:1521:catadb -chunks 12 -user mygds/oracle -sdb shdb -region region1, region2 -agent_port 8080 -agent_password oracle
#建立和啟動shard director
引數含義:
-gsm: 指定shard director名稱
-listener: 指定shard director的監聽埠,注意不能與資料庫的listener埠衝突
-catalog: 指定catalog database 資訊,catalog資料庫的主機名:監聽器port: catalog 資料庫db_name
GDSCTL>add gsm -gsm sharddirector3 -listener 1522 -pwd oracle -catalog gsm1:1521:catadb -region region1
GDSCTL>start gsm -gsm sharddirector3
#新增作業系統認證.
GDSCTL> add credential -credential cre_reg1 -osaccount oracle -ospassword 123456
#步驟7 在所有的shard 節點(sd1、sd2)分別執行Agent
--在sd1節點執行
[oracle@sd1 ~]$ schagent -start
[oracle@sd1 ~]$ schagent -status
--密碼oracle和埠8080是在第4步建立shardcatalog時設定的:
[oracle@sd1 ~] $ echo oracle | schagent -registerdatabase gsm1 8080
Agent Registration Password ?
Oracle Scheduler Agent Registration for 12.2.0.1.2 Agent
Agent Registration Successful!
--在sd2節點執行
[oracle@sd2 ]$ schagent -start
[oracle@sd2 ]$ schagent -status
[oracle@sd2 ]$ echo oracle | schagent -registerdatabase gsm1 8080
Agent Registration Password ?
Oracle Scheduler Agent Registration for 12.2.0.1.2 Agent
Agent Registration Successful!
23.建立System-Managed SDB
1.在Shard伺服器 sd1 連線到shard director/GSM伺服器(gsm1)
$ ssh gds@gsm1
2. 設定當前session為sharddirector3 shard director.
$ gdsctl
GDSCTL>set gsm -gsm sharddirector3
GDSCTL>connect mygds/oracle
or
GDSCTL>connect mygds/oracle@gsm1:1521:catadb
3. 新增shardgroup, shardgroup是一組shard的集合,
# shardgroup名稱為primary_shardgroup,-deploy_as primary表示這個group中的shard都是主庫。
GDSCTL>add shardgroup -shardgroup primary_shardgroup -deploy_as primary -region region1
4. 將每個shard 地址新增到catalog 的 (VNCR) 列表,並且建立shard
GDSCTL> add invitednode sd1
GDSCTL>create shard -shardgroup primary_shardgroup -destination sd1 -credential cre_reg1 -sys_password 123456
------------------------------------------------------
The operation completed successfully
DB Unique Name: sh1
GDSCTL> add invitednode sd2
GDSCTL> create shard -shardgroup primary_shardgroup -destination sd2 -credential cre_reg1 -sys_password 123456
-------------------------------------------------------
The operation completed successfully
DB Unique Name: sh2
5. 檢查配置
GDSCTL>config
Regions
------------------------
region1
region2
GSMs
------------------------
sharddirector3
Sharded Database
------------------------
shdb
Databases
------------------------
sh1
sh2
Shard Groups
------------------------
primary_shardgroup
Shard spaces
------------------------
shardspaceora
Services
------------------------
GDSCTL pending requests
------------------------
Command Object Status
------- ------ ------
Global properties
------------------------
Name: oradbcloud
Master GSM: sharddirector3
DDL sequence #: 0
----------------------------------------------------------------------------
GDSCTL>config shardspace
Shard space Chunks
----------- ------
shardspaceora 12
-------------------------------------------------------------------------------
GDSCTL>config shardgroup
Shard Group Chunks Region Shard space
----------- ------ ------ -----------
primary_shardgroup 12 region1 shardspaceora
----------------------------------------------------------------------------------
GDSCTL>config vncr
Name Group ID
---- --------
sd1
sd2
192.168.40.135
-------------------------------------------------------------------------------------
GDSCTL>config shard
Name Shard Group Status State Region Availability
---- ----------- ------ ----- ------ ------------
sh1 primary_shardgroup U none region1 -
sh2 primary_shardgroup U none region1 -
-------------------------------------------------------------------------------------------
6. 部署/deploy ( Shard資料庫部署過程採用靜默安裝方式 )
GDSCTL>deploy
deploy: examining configuration...
deploy: deploying primary shard 'sh1' ...
deploy: network listener