CentOS7.6安裝ORACLE 12C RAC + DATAGUARD

一. 網絡設計

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

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章