一. 網絡設計
#Public IP
192.168.247.5 RAC1
192.168.247.6 RAC2
#Private IP
192.168.68.5 RAC1-priv
192.168.68.6 RAC2-priv
#Virtual IP
192.168.247.15 RAC1-vip
192.168.247.16 RAC2-vip
#Scan IP
192.168.247.7 RAC-scan
# DG
192.168.247.8 DataGuard
二.磁盤規劃
懶惰的我,裝虛擬機時選擇了默認
三.內存規劃
RAC1 8g
RAC2 8g
DG 8g
四.系統安裝及設置
1.安裝系統
勾選Server with GUI
安裝工具裏面勾選:Performance Tools
Development Tools
Security Tools
System Administration Tools
2.設置主機名(演示RAC1節點)
vim /etc/hostname
3.配置IP地址
cd /etc/sysconfig/network-scripts/
vim ifcfg-ens33
vim ifcfg-ens34
vim /etc/resolv.conf --添加DNS
vi /etc/sysconfig/network-scripts/route-ens33 ---添加靜態路由
4. 同步系統時間
chmod +x /etc/rc.d/rc.local
vim /etc/rc.d/rc.local
/usr/sbin/ntpdate ntp.aliyun.com
5. 關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
6. 關閉selinux
vi /etc/selinux/config
SELINUX=disabled
7. 配置/etc/hosts
#Public IP
192.168.247.5 rac1
192.168.247.6 rac2
# Private IP
192.168.68.5 rac1-priv
192.168.68.6 rac2-priv
# Virtual IP
192.168.247.15 rac1-vip
192.168.247.16 rac1-vip
# Scan IP
192.168.247.7 rac-scan
# DG IP
192.168.247.8 DataGuard
8. 配置資源限制
vi /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 3145728
oracle hard stack 3145728
oracle soft memlock 3145728
oracle hard memlock 3145728
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 3145728
grid hard stack 3145728
9. 配置/dev/shm
vi /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=6G 0 0
mount -o remount /dev/shm
10. 配置內核參數
touch /etc/sysctl.d/97-oracledatabase-sysctl.conf
vi /etc/sysctl.d/97-oracledatabase-sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 1572864
kernel.shmmax = 6442450944
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
sysctl --system(立即生效)
sysctl -a|grep shmmax
sysctl -a|grep shmall
11. 添加賬戶
groupadd oinstall
groupadd dba
groupadd oper
groupadd asmadmin
groupadd asmoper
groupadd asmdba
useradd -g oinstall -G dba,asmoper,asmadmin,asmdba grid
useradd -g oinstall -G dba,oper,asmdba,asmadmin oracle
passwd grid
passwd oracle
id oracle
id grid
2個節點的用戶號必須一樣
12. 創建目錄
mkdir -p /u01/app/grid #grid的ORACLE_BASE
mkdir -p /u01/app/12.2.0.1/grid #grid的ORACLE_HOME,不能是包含關係
mkdir -p /u01/app/oracle/product/12.2.0.1/db_1
chown -R oracle:oinstall /u01
chown -R grid:oinstall /u01/app/grid
chown -R grid:oinstall /u01/app/12.2.0.1
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01
13. 配置環境變量
Grid Infrastructure
.bash_profile
export ORACLE_SID=+ASM1
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/12.2.0.1/grid
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=+ASM2
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/12.2.0.1/grid
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH
Oracle Database
.bash_profile
export ORACLE_SID=orcl1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.2.0.1/db_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=orcl2
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.2.0.1/db_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
14. 修改/etc/nsswitch.conf
修改行
hosts: files dns myhostname
爲
hosts: files dns nis
15. 關閉透明大頁
cat /sys/kernel/mm/transparent_hugepage/enabled
[always]代表啓用
[never]代表禁用
vi /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet transparent_hugepage=never"
grub2-mkconfig -o /boot/grub2/grub.cfg
重啓系統
cat /proc/cmdline
16. 禁止ntp服務
systemctl stop chronyd
systemctl disable chronyd
mv /etc/chrony.conf /etc/chrony.conf.bak
17. 禁止avahi-daemon服務
avahi-daemon 服務會影響 oracle的多波通信,進而導致節點重啓
因此,oracle環境下不能啓用 avahi-daemon 服務
systemctl stop avahi-daemon.service
systemctl disable avahi-daemon.service
18. 配置network文件
vi /etc/sysconfig/network
NOZEROCONF=yes
19. 添加共享磁盤
Share1 20G
Share2 25G
20. 配置共享磁盤.
配置vmx文件,添加如下內容:
scsi1:0.deviceType = "disk"
scsi1:1.deviceType = "disk"
disk.locking="false"
diskLib.dataCacheMaxSize="0"
diskLib.dataCacheMaxReadAheadSize="0"
diskLib.DataCacheMinReadAheadSize="0"
diskLib.dataCachePageSize="4096"
diskLib.maxUnsyncedWrites="0"
scsi1.sharedBus="virtual"
scsi1:0.mode="independent-persistent"(設置爲獨立模式) -- 如果已設獨立模式,可能會衝突
scsi1:1.mode="independent-persistent"
21.配置udev共享存儲
查看硬盤是否雙節點都有加載
fdisk -l
vi /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="36000c29bd302d56cea04ce113585e607", RUN+="/bin/sh -c 'mknod /dev/asmdisk1 b $major $minor; chown grid:asmadmin /dev/asmdisk1; chmod 0660 /dev/asmdisk1'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="36000c29e9bbd1d9724ab6823ca21bfc1", RUN+="/bin/sh -c 'mknod /dev/asmdisk2 b $major $minor; chown grid:asmadmin /dev/asmdisk2; chmod 0660 /dev/asmdisk2'"
重啓UDEV:
systemctl restart systemd-udevd.service
udevadm control --reload-rules
/sbin/udevadm trigger --type=devices --action=add
/sbin/udevadm trigger --type=devices --action=change
22. 配置節點互信
在安裝羣集時,只需要在一個節點安裝軟件即可,節點互信會自動把安裝的軟件複製到其他節點
首先配置RAC1,RAC2 Oracle用戶的節點互信
su - oracle
mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa (全回車,默認即可)
ssh-keygen -t dsa (全回車,默認即可)
(以上節點互信命令,RAC1,RAC2均要執行)
返回RAC1,執行(下面互信命令 RAC2不執行)
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
ssh RAC2 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
ssh RAC2 cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys oracle@RAC2:~/.ssh/authorized_keys
再配置RAC1,RAC2 grid用戶的節點互信
su - grid
mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa (全回車,默認即可)
ssh-keygen -t dsa (全回車,默認即可)
(以上節點互信命令,RAC1,RAC2均要執行)
返回RAC1,執行(下面互信命令 RAC2不執行)
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
ssh RAC2 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
ssh RAC2 cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys grid@RAC2:~/.ssh/authorized_keys
五.安裝Grid
1. 上傳 linuxx64_12201_grid_home.zip 至$ORACLE_HOME
2.解壓
su - grid
cd $ORACLE_HOME
unzip linuxx64_12201_grid_home.zip
3.安裝 cvuqdisk-1.0.10-1.rpm
su root
cd /u01/app/12.2.0.1/grid/cv/rpm
rpm -ivh cvuqdisk-1.0.10-1.rpm
scp cvuqdisk-1.0.10-1.rpm rac2:/opt --在rac2安裝此包
在系統包裏找到並安裝
compat-libcap1-1.10-7.el7.x86_64.rpm
ksh-20120801-139.el7.x86_64.rpm
libaio-devel-0.3.109-13.el7.x86_64.rpm
六.安裝ORACLE
1.上傳Oracle安裝包,解壓至
七.DG服務器安裝ORACLE單機庫
八.配置DataGuard
前提條件:
①.RAC已經成功安裝
②.dg備庫已經安裝完相同版本的Oracle軟件,無需創建數據庫(無需使用DBCA創建數據庫)
③.容器數據庫CDB和PDB
不能基於PDB級別進行DG安裝,且主備庫的CDB開啓需保持一致
主庫:非CDB 備庫:非CDB
主庫:CDB 備庫:CDB
select cdb from v$database; --查詢數據庫是否是CDB數據庫
開始配置:
1.RAC開啓歸檔
創建歸檔文件存放路徑(任一節點)
su – grid
amscmd
cd data
mkdir arch
設置歸檔文件存放路徑
su – oracle
sqlplus / as sysbda
--設置默認歸檔文件名稱, sid='*' 所有節點都生效
alter system set log_archive_format='%t_%s_%r.arc' scope=spfile sid='*';
--將所有節點的歸檔都存放到+data/arch
alter system set log_archive_dest_1='LOCATION=+data/arch' scope=spfile sid='*';
開啓歸檔
shutdown immediate;(兩個節點都關閉)
startup mount(啓動一個節點)
alter database archivelog;(一個節點執行)
alter database open;(雙節點執行)
2.啓用force logging功能(任一節點)
select force_logging from v$database;
alter database force logging;
3.配置主庫初始化參數
查詢數據庫唯一名,如果沒有唯一名,需要設置一個唯一名
show parameter db_unique_name
設置唯一名
alter system set db_unique_name='fxdb' scope=spfile; --修改之後需要重啓數據庫
alter system set db_unique_name=fxdb scope=spfile; --如果不打' ' FXDB是大寫
alter system set log_archive_config='DG_CONFIG=(orcl,dg)' scope=both sid='*';
--任一節點執行
alter system set log_archive_dest_1='LOCATION=+data/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl' scope=both sid='*';
alter system set log_archive_dest_2='SERVICE=tnsdg LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dg' scope=both sid='*';
alter system set standby_file_management=auto scope=both sid='*';
alter system set db_file_name_convert='/orcl/app/oracle/oradata/dg','+DATA/ORCL/DATAFILE','/orcl/app/oracle/oradata/dg','+DATA/ORCL/TEMPFILE' scope=spfile sid='*';
alter system set log_file_name_convert='/orcl/app/oracle/oradata/dg','+DATA/ORCL/ONLINELOG' scope=spfile sid='*';
alter system set fal_client='tnsorcl' scope=both sid='*';
alter system set fal_server='tnsdg' scope=both sid='*';
alter database add standby logfile thread 1 group 11 ('+DATA') size 200M;
alter database add standby logfile thread 1 group 12 ('+DATA') size 200M;
alter database add standby logfile thread 1 group 13 ('+DATA') size 200M;
alter database add standby logfile thread 2 group 14 ('+DATA') size 200M;
alter database add standby logfile thread 2 group 15 ('+DATA') size 200M;
alter database add standby logfile thread 2 group 16 ('+DATA') size 200M;
查看參數設置
show parameter log
show parameter fal
配置TNS
節點rac1:
tnsorcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
tnsdg =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
節點rac2:
tnsorcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
tnsdg =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
拷貝密碼文件
11g及之前版本數據庫中密碼文件存儲在$ORACLE_HOME/dbs下
orapwSID
12C開始,密碼文件存放在ASM共享存儲中。
12cRAC中:+DATA/FXDB/PASSWORD/pwdfxdb.282.1006058263
查詢密碼文件位置:
srvctl config database -d orcl
主庫和備庫的SYS密碼必須一致。
su - grid
amscmd
pwcopy +DATA/FXDB/PASSWORD/pwdfxdb.282.1006058263 /tmp/mypwfile
scp /tmp/mypwfile dg:/u01/app/oracle/product/12.2.0.1/db_1/dbs
登錄DG服務器,將密碼文件改名
mv mypwfile orapwdg
配置備庫:
touch initsbdb.ora
db_name='orcl' ---與主庫一致 show parameter db_name
db_unique_name='dg'
sga_target=2G
pga_aggregate_target=800M
audit_file_dest='/u01/app/oracle/admin/dg/adump' ---需備庫手工創建
compatible='12.2.0' --與主庫一致 show parameter compatible
remote_login_passwordfile='EXCLUSIVE'
control_files='/u01/app/oracle/oradata/dg/control01.ctl','/u01/app/oracle/oradata/dg/control02.ctl' ---路徑需備庫手工創建
log_archive_config='DG_CONFIG=(orcl,dg)' --與主庫設置保持一致
---設置備庫歸檔路徑
log_archive_dest_1='LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=dg'
log_archive_dest_2='SERVICE=tnsorcl LGWR SYNC AFFIRM
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
log_archive_format='%t_%s_%r.arc'
-----查詢主庫數據文件路徑 SELECT * FROM V$dbfile
-----查詢主數據庫臨時文件路徑 SELECT * FROM V$tempfile
db_file_name_convert='+DATA/FXDB/DATAFILE','/u01/app/oracle/oradata/dg',
'+DATA/FXDB/TEMPFILE','/u01/app/oracle/oradata/dg'
---SELECT * FROM V$LOGFILE
log_file_name_convert='+DATA/FXDB/ONLINELOG','/u01/app/oracle/oradata/dg'
fal_client='tnsdg'
fal_server='tnsorcl'
standby_file_management='AUTO'
mkdir -p /u01/app/oracle/admin/dg/adump
mkdir -p /u01/app/oracle/oradata/dg
mkdir -p /u01/arch
su - oracle
sqlplus / as sysdba
create spfile from pfile;
startup nomount
3.配置靜態監聽
listener.ora
LISTENER1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg)(PORT = 1522))
)
)
)
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(SID_NAME = dg)
(ORACLE_HOME = /u01/app/oracle/product/12.2.0.1/db_1)
)
)
lsnrctl start listener1
備庫爲什麼一定要配置靜態監聽?
nomount狀態下必須使用靜態監聽才能連接到實例
4.tns配置
tnsnames.ora
tnsorcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
tnssg =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
5.測試tns
主庫2節點和備庫:
tnsping tnsfxdb
tnsping tnssbdb
主庫和備庫:
sqlplus sys/woailyoo@tnsorcl as sysdba
sqlplus sys/woailyoo@tnsdg as sysdba
SELECT INSTANCE_NAME,STATUS FROM V$INSTANCE;
【使用Duplicate創建物理standby】
1.duplicate
1.1離線--rman備份集
1.2在線--duplicate,適合局域網
rman target sys/Oracle123@tnsfxdb 必須指定密碼
rman target / 最好不要使用---可能會有密碼錯誤
connect auxiliary sys/Oracle123@tnssbdb
rman target sys/Oracle123@tnsfxdb auxiliary sys/Oracle123@tnssbdb
duplicate target database for standby from active database nofilenamecheck;
【添加Standby日誌組並開啓同步】
standby日誌組:redo日誌組+1 2+1
standby日誌組與redo日誌組大小必須一致
SELECT * FROM v$log --Thread$ Group# Bytes MEMBER
SELECT * FROM v$logfile
查看standby日誌組:---備庫查看
select * from v$standby_log;
備庫:
alter database add standby logfile thread 1 group 11 ('/orcl/app/oracle/oradata/dg/stredo11.log') size 200M;
alter database add standby logfile thread 1 group 12 ('/orcl/app/oracle/oradata/dg/stredo12.log') size 200M;
alter database add standby logfile thread 1 group 13 ('/orcl/app/oracle/oradata/dg/stredo13.log') size 200M;
alter database add standby logfile thread 2 group 14 ('/orcl/app/oracle/oradata/dg/stredo14.log') size 200M;
alter database add standby logfile thread 2 group 15 ('/orcl/app/oracle/oradata/dg/stredo15.log') size 200M;
alter database add standby logfile thread 2 group 16 ('/orcl/app/oracle/oradata/dg/stredo16.log') size 200M;
開啓同步:
alter database open;---備庫
開啓redo應用(實時同步)commit
alter database recover managed standby database disconnect; (12C)
停止redo應用----停止實實同步
alter database recover managed standby database cancel;
查看狀態:
select name,open_mode,database_role,protection_mode,protection_level from v$database;
更改保護模式:
alter database set standby database to maximize performance;最大性能
alter database set standby database to maximize availability;最大可用 ---主備都執行
alter database set standby database to maximize protection;最大保護
測試同步:
create table t(id int);
insert into t values(100);
commit;
備庫查詢:
select * from v$managed_standby;備庫查詢
select * from v$standby_log;
【解決同步故障】
1.查下主庫2節點,備庫的配置
2.檢查tns配置
3.檢查fal_client,fal_server
4.查下備庫是否在實時應用模式
5.查詢相關視圖
v$managed_standby(備庫查詢)
RFS:傳輸進程
MRP0:日誌應用進程
v$archive_dest(主庫)
v$archive_dest_status(主庫)
2個角色:primary和standby
select database_role from v$database;
2.
select name,database_role,switchover_status from v$database;
SWITCHOVER_STATUS:
to standby:
session active:有會話連接。
備庫查詢:NOT ALLOWED
驗證是否有gap:
select status, gap_status from v$archive_dest_status where dest_id = 2;
最保險的還要執行,insert
12c新語法:
主庫執行:
alter database switchover to dg verify;
alter database switchover to dg;
alter database switchover to dg force;
主庫:shutdown
備庫:mount
select name,open_mode,database_role,protection_mode,protection_level,switchover_status from v$database;
alter database recover managed standby database disconnect;