メモリ: 8GB
ディスク: 60GB + 20GB
DB名: moon
プライマリDBユニーク名: moon
スタンバイDBユニーク名: sun
プライマリOracleHome: /u01/app/oracle/product/19.0.0/dbhome_1
スタンバイOracleHome: /u01/app/oracle/product/19.0.0/dbhome_2
eth0=192.168.137.125 eth1=192.168.70.125 vip=192.168.137.126 scan=192.168.137.127
プライマリ SCAN/ローカルリスナーポート: 1521
スタンバイ ローカルリスナーポート: 1522
同一サーバにプライマリDBとスタンバイDBが存在するため、
PDB名が同一となり、サービス名が重複する。
そのため、スタンバイはSCANリスナー登録対象外とする
--------[1]RAC--------
-- 1. OS設定
systemctl disable firewalld
sed -i -e "s/^SELINUX=enforcing$/SELINUX=disabled/g" /etc/selinux/config
yum update -y
yum install oracle-database-preinstall-19c -y
※ ACFSを使用する場合、カーネルはuekではなくel8を使用する
grubby --info=ALL
ll /boot/vmlinuz*
grub2-set-default 2
reboot
uname -r
cat /sys/kernel/mm/transparent_hugepage/enabled
→always madvise [never] となっていればOK
groupadd -g 1001 asmadmin
groupadd -g 1002 asmdba
useradd -u 54322 -g oinstall -G asmadmin,asmdba grid
echo oracle | passwd --stdin oracle
echo grid | passwd --stdin grid
usermod -G asmadmin,asmdba,backupdba,racdba,dgdba,dba,oper,kmdba oracle
vi /etc/pam.d/login
session required pam_limits.so
vi /etc/hosts
192.168.137.125 mmdb125.example.com mmdb125
192.168.70.125 mmdb125-priv.example.com mmdb125-priv
192.168.137.126 mmdb125-vip.example.com mmdb125-vip
192.168.137.127 scan125.example.com scan125
systemctl enable chronyd.service
systemctl start chronyd.service
mkdir -p /u01/app/oracle
mkdir -p /u01/app/grid
mkdir -p /u01/app/19.0.0/grid
mkdir /u01/app/oraInventory
chown -R grid:oinstall /u01
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01
vi /home/oracle/.bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=moon1
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/u01/app/19.0.0/grid/bin
umask 022
export NLS_LANG=American_America.AL32UTF8
vi /home/grid/.bash_profile
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.0.0/grid
export ORACLE_SID=+ASM1
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch
umask 022
export NLS_LANG=American_America.AL32UTF8
cat /etc/udev/rules.d/99-vmware-scsi-timeout.rules
vi /etc/udev/rules.d/99-vmware-scsi-timeout.rules
KERNEL=="sdb", SYMLINK+="oracleasm/asmdata21", OWNER="grid", GROUP="asmadmin", MODE="0660"
reboot
ll /dev/sd*
-- 2. GIインストール
gridユーザで実行
mkdir -p /u01/app/19.0.0/grid
chown grid:oinstall /u01/app/19.0.0/grid
cd /u01/app/19.0.0/grid
unzip /tmp/LINUX.X64_193000_grid_home.zip
su root
rpm -Uvh /u01/app/19.0.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm
exit
export CV_ASSUME_DISTID='OL7'
LANG=C /u01/app/19.0.0/grid/gridSetup.sh
vi /root/.bash_profile
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.0.0/grid
export PATH=$PATH:$ORACLE_HOME/bin
umask 022
export NLS_LANG=American_America.AL32UTF8
. /root/.bash_profile
crsctl stat res -t
-- 3. DBインストール
oracleユーザで実行
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
chown oracle:oinstall /u01/app/oracle/product/19.0.0/dbhome_1
cd /u01/app/oracle/product/19.0.0/dbhome_1
unzip /tmp/LINUX.X64_193000_db_home.zip
export CV_ASSUME_DISTID='OL7'
LANG=C ./runInstaller
export CV_ASSUME_DISTID='OL7'
export NLS_LANG=American_America.AL32UTF8
LANG=C dbca
select * from dba_profiles;
alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;
alter profile default limit PASSWORD_LIFE_TIME unlimited;
alter profile default limit PASSWORD_LOCK_TIME unlimited;
alter profile default limit PASSWORD_GRACE_TIME unlimited;
alter profile default limit INACTIVE_ACCOUNT_TIME unlimited;
select * from dba_profiles where profile='DEFAULT';
vi $ORACLE_HOME/sqlplus/admin/glogin.sql
set lines 1000
set pages 5000
set trims on
set sqlprompt "&_connect_identifier(&_user)> "
vi ~/.bashrc
alias moon1='export ORACLE_SID=moon1'
alias sun1='export ORACLE_SID=sun1'
alias cdh='cd $ORACLE_HOME'
alias cdb='cd $ORACLE_BASE'
alias sql='sqlplus / as sysdba'
. ~/.bashrc
sql
show pdbs
alter pluggable database all open;
alter pluggable database all save state;
alter session set container=pdb01;
create user test identified by test;
grant dba to test;
crsctl disable crs
--------[2] DG--------
-- 4. ネットワーク設定
cd $ORACLE_HOME/network/admin
vi tnsnames.ora
MOON =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mmdb125-vip.example.com)(PORT = 1521) )
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = moon.example.com)
)
)
PDB01RW =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = scan125.example.com)(PORT = 1521) )
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb01.example.com)
)
)
SUN=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mmdb125-vip.example.com)(PORT = 1522) )
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sun.example.com)
)
)
PDB01RO =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mmdb125-vip.example.com)(PORT = 1522) )
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb01.example.com)
)
)
cat tnsnames.ora
echo "select instance_name from v\$instance;" | sqlplus sys/oracle@MOON as sysdba
echo "select instance_name from v\$instance;" | sqlplus test/test@PDB01RW
-- 5. データガード前提条件の確認と設定
show pdbs
archive log list
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
archive log list
select FORCE_LOGGING from V$DATABASE ;
select flashback_on from v$database ;
select GROUP#, THREAD#, BYTES/1024/1024, MEMBERS from V$LOG order by 1, 2 ;
select GROUP#, THREAD#, BYTES/1024/1024 from V$STANDBY_LOG order by 1, 2;
col FILE_NAME for a60
select FILE_NAME, FORMAT, IS_ASM from V$PASSWORDFILE_INFO ;
※パスワードファイル名は後で使用するため、記録しておく
FILE_NAME FORMAT IS_AS
------------------------------------------------------------ ------ -----
+DATA/MOON/PASSWORD/pwdmoon.258.1196211043 12 TRUE
alter database force logging ;
select FORCE_LOGGING from V$DATABASE ;
show parameter reco
alter system set db_recovery_file_dest_size = 5G scope=both sid='*';
alter system set db_recovery_file_dest = '+DATA' scope=both sid='*';
show parameter reco
alter database flashback on;
select flashback_on from v$database ;
スタンバイREDOは(REDOグループ数+1)個作成、メンバー数は1固定
alter database add standby logfile thread 1 size 200M;
alter database add standby logfile thread 1 size 200M;
alter database add standby logfile thread 1 size 200M;
alter database add standby logfile thread 1 size 200M;
select GROUP#, THREAD#, BYTES/1024/1024 from V$STANDBY_LOG order by 1, 2;
-- 6. プライマリDBの初期化パラメータ修正
set lines 300 pages 50000 tab off trim on
col NAME for a30
col VALUE for a150
select INST_ID, NAME, VALUE from GV$PARAMETER
where upper(NAME) in (
'LOG_ARCHIVE_CONFIG',
'LOG_ARCHIVE_DEST_1',
'LOG_ARCHIVE_DEST_2',
'LOG_ARCHIVE_DEST_3',
'LOG_ARCHIVE_DEST_STATE_1',
'LOG_ARCHIVE_DEST_STATE_2',
'LOG_ARCHIVE_DEST_STATE_3',
'LOG_ARCHIVE_FORMAT',
'REMOTE_LOGIN_PASSWORDFILE',
'DB_RECOVERY_FILE_DEST',
'DB_RECOVERY_FILE_DEST_SIZE',
'FAL_CLIENT',
'FAL_SERVER',
'STANDBY_FILE_MANAGEMENT',
'DB_NAME',
'DB_UNIQUE_NAME',
'AUDIT_FILE_DEST',
'DIAGNOSTIC_DEST',
'REMOTE_LISTENER',
'CLUSTER_INTERCONNECTS')
order by 2, 1 ;
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(moon,sun)' scope=both sid='*' ;
alter system set LOG_ARCHIVE_DEST_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(ALL_LOGFILES,ALL_ROLES) MAX_FAILURE=1 REOPEN=5 DB_UNIQUE_NAME=moon ALTERNATE=LOG_ARCHIVE_DEST_2' scope=both sid='*' ;
alter system set LOG_ARCHIVE_DEST_2='location=+DATA valid_for=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=moon ALTERNATE=LOG_ARCHIVE_DEST_1' scope=both sid='*' ;
alter system set LOG_ARCHIVE_DEST_3='SERVICE=SUN ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=sun' scope=both sid='*' ;
alter system set log_archive_dest_state_2='ALTERNATE' scope=both sid='*' ;
alter system set FAL_CLIENT='MOON' scope=both sid='*' ;
alter system set FAL_SERVER='SUN' scope=both sid='*' ;
alter system set STANDBY_FILE_MANAGEMENT='AUTO' scope=both sid='*' ;
-- 7. バックアップを格納するディレクトリを作成
asmcmd
cd +DATA
mkdir BKUP
-- 8. バックアップ取得
export NLS_DATE_FORMAT="YYYY/MM/DD HH24:MI:SS"
rman target /
※DBIDは後で使用するため、記録しておく
connected to target database: MOON (DBID=2950463275)
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 ;
delete noprompt force archivelog all;
delete noprompt force backup of archivelog all ;
delete noprompt force backup of database ;
delete noprompt force backup of controlfile ;
delete noprompt force datafilecopy all ;
BACKUP
DEVICE TYPE DISK FORMAT '+DATA/BKUP/%U'
ARCHIVELOG ALL ;
BACKUP
DEVICE TYPE DISK FORMAT '+DATA/BKUP/%U'
DATABASE ;
BACKUP
DEVICE TYPE DISK FORMAT '+DATA/BKUP/%U' TAG 'controlfile'
CURRENT CONTROLFILE ;
BACKUP
DEVICE TYPE DISK FORMAT '+DATA/BKUP/%U' TAG 'spfile'
SPFILE ;
BACKUP
DEVICE TYPE DISK FORMAT '+DATA/BKUP/%U'
ARCHIVELOG ALL ;
list backup summary;
list datafilecopy all ;
list backup of archivelog all ;
-- 9. パスワードファイルをスタンバイ側へコピー
su - grid
asmcmd
cp +DATA/MOON/PASSWORD/pwdmoon.258.1196211043 /tmp/orapwsun
exit
su - oracle
cd /tmp
cp orapwsun /u01/app/oracle/product/19.0.0/dbhome_1/dbs/orapwsun1
-- 10. 監査ファイルの保存先の作成
mkdir -p /u01/app/oracle/admin/sun/adump
mkdir -p /u01/app/oracle/diag/rdbms/sun/sun1
-- 11. 補助インスタンス用の初期化パラメータ・ファイルの作成
vi /tmp/pfileAUX.ora
*.DB_NAME='moon'
*.DB_UNIQUE_NAME='sun'
*.DB_BLOCK_SIZE=8192
*.MEMORY_TARGET=2g
*.REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'
-- 12. 補助インスタンス起動
export ORACLE_SID=sun1
env | grep ORA
sqlplus / as sysdba
startup nomount pfile='/tmp/pfileAUX.ora' ;
Password Fileを読み込んでいることを確認
set lines 160 pages 50000 tab off trim on
col FILE_NAME for a60
select FILE_NAME, FORMAT, IS_ASM from V$PASSWORDFILE_INFO ;
exit
-- 13. RMANバックアップからスタンバイDBの作成
export ORACLE_SID=sun1
rman auxiliary /
duplicate database 'moon' DBID 2950463275 for standby
backup location '+DATA/BKUP/'
dorecover
spfile
set DB_UNIQUE_NAME='sun'
set LOG_ARCHIVE_DEST_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(ALL_LOGFILES,ALL_ROLES) MAX_FAILURE=1 REOPEN=5 DB_UNIQUE_NAME=sun ALTERNATE=LOG_ARCHIVE_DEST_2'
set LOG_ARCHIVE_DEST_2='location=+DATA valid_for=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=sun ALTERNATE=LOG_ARCHIVE_DEST_1'
set LOG_ARCHIVE_DEST_3='SERVICE=MOON ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=moon'
set FAL_SERVER='MOON'
set FAL_CLIENT='SUN'
set AUDIT_FILE_DEST='/u01/app/oracle/admin/sun/adump'
set INSTANCE_NUMBER='1'
set CONTROL_FILES='+DATA/SUN/CONTROLFILE/standby_controlfile.ctl'
set remote_listener='scan125.example.com:1522'
;
複製されたデータベースの名前、インスタンス名、ロールを確認
export ORACLE_SID=sun1
sqlplus / as sysdba
select NAME, DB_UNIQUE_NAME, OPEN_MODE, DATABASE_ROLE, FLASHBACK_ON from V$DATABASE ;
alter database flashback on ;
select NAME, DB_UNIQUE_NAME, OPEN_MODE, DATABASE_ROLE, FLASHBACK_ON from V$DATABASE ;
-- 14. SPFILE作成
create pfile='/tmp/pfileSTB.ora' from spfile ;
shutdown immediate ;
cp /tmp/pfileSTB.ora /tmp/pfileSTB.ora.bk
vi /tmp/pfileSTB.ora
アンダースコアで始まるパラメータを削除
次のパラメータが存在している場合は削除
*.instance_number
*.thread
*.undo_tablespace
インスタンス名を修正
moon1 -> sun1
*.dispatchers='(PROTOCOL=TCP) (SERVICE=moonXDB)'
↓
*.dispatchers='(PROTOCOL=TCP) (SERVICE=sunXDB)'
-- 15. SPFILEのASM配置
SPFILE格納用ディレクトリを作成
asmcmd
mkdir +DATA/SUN/parameterfile
export ORACLE_SID=sun1
sqlplus / as sysdba
create spfile='+DATA/SUN/parameterfile/spfilesun.ora' from pfile='/tmp/pfileSTB.ora' ;
-- 16. ポインターPFILE作成
rm -rf $ORACLE_HOME/dbs/spfilesun1.ora
echo "SPFILE='+DATA/SUN/parameterfile/spfilesun.ora'" > $ORACLE_HOME/dbs/initsun1.ora
-- 17. パスワードファイルのASM配置
asmcmd
mkdir +DATA/SUN/password
cp /u01/app/oracle/product/19.0.0/dbhome_1/dbs/orapwsun1 +DATA/SUN/password/orapwsun
-- 18. GIへのリソース登録
srvctl remove instance -db sun -instance sun1
srvctl remove database -db sun
srvctl add database -db sun -oraclehome /u01/app/oracle/product/19.0.0/dbhome_1 -dbtype RAC -dbname moon -role physical_standby -spfile "+DATA/SUN/parameterfile/spfilesun.ora" -pwfile "+DATA/SUN/password/orapwsun"
srvctl add instance -db sun -instance sun1 -node mmdb125
srvctl config database -db moon -all
srvctl config database -db sun -all
crsctl stat res -t
-- 19. スタンバイDBの起動
srvctl start database -db sun -startoption mount
export ORACLE_SID=sun1
sqlplus / as sysdba
alter database recover managed standby database disconnect from session ;
set linesize 170 pages 50000 tab off trim on
col VALUE for a32
select PROCESS,PID,STATUS,THREAD#,SEQUENCE# from V$MANAGED_STANDBY where PROCESS='MRP0';
select SOURCE_DB_UNIQUE_NAME, NAME, VALUE, UNIT from V$DATAGUARD_STATS ;
-- 20. スタンバイ側リスナー設定
export ORACLE_SID=sun1
sqlplus / as sysdba
show parameter listener
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.137.126)(PORT=1522))' scope=both sid='*';
show parameter listener
srvctl stop database -d sun
srvctl start database -d sun
crsctl stat res -t
srvctl config listener -listener listener
netcaで1522リスナー追加
srvctl config listener -listener listener2
srvctl config scan -all
srvctl config scan_listener -all
-- 21. Data Guard構成確認
set linesize 250 pages 5000 tab off
col FORCE_LOGGING for a6
col FLASHBACK_ON for a6
select DBID, NAME, DB_UNIQUE_NAME, DATABASE_ROLE, PROTECTION_MODE, CURRENT_SCN, FLASHBACK_ON, FORCE_LOGGING from V$DATABASE ;
select * from V$DATAGUARD_CONFIG ;
set linesize 200 pages 5000 tab off
col DEST_NAME for a20
col DB_UNIQUE_NAME for a8
col TARGET for a8
col RECOVERY_MODE for a25
col GAP_STATUS for a10
select A.DEST_ID, A.DEST_NAME, A.DB_UNIQUE_NAME, B.DATABASE_MODE, B.RECOVERY_MODE,
A.TRANSMIT_MODE, A.AFFIRM, A.TARGET, A.STATUS, A.LOG_SEQUENCE, A.APPLIED_SCN,
B.GAP_STATUS, A.ERROR, B.ERROR
from V$ARCHIVE_DEST A, V$ARCHIVE_DEST_STATUS B
where A.DEST_ID=B.DEST_ID
and A.TARGET in ('STANDBY', 'REMOTE') ;
set linesize 200 pages 5000 tab off
col PID for a10
select NAME, PID, TYPE, ROLE, ACTION, CLIENT_PID, CLIENT_ROLE, THREAD#, SEQUENCE#, BLOCK#, BLOCK_COUNT, DELAY_MINS, DEST_ID, DBID, DGID, INSTANCE
from V$DATAGUARD_PROCESS
order by 1 ;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE OPEN;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
alter pluggable database all open;
echo "select instance_name from v\$instance;" | sqlplus sys/oracle@SUN as sysdba
echo "select instance_name from v\$instance;" | sqlplus test/test@PDB01RO
crsctl stop crs
crsctl start crs -wait
crsctl stat res -t
-- 22. Oracle Data Guardブローカーのインストール
※プライマリとスタンバイで実施
alter system set dg_broker_start=true scope=both sid='*';
show parameter dg
ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='' scope=both sid='*';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='' scope=both sid='*';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='' scope=both sid='*';
show parameter log;
dgmgrl
connect sys/oracle
CREATE CONFIGURATION 'DRSolution' AS
PRIMARY DATABASE IS 'moon'
CONNECT IDENTIFIER IS MOON;
SHOW CONFIGURATION;
ADD DATABASE 'sun' AS
CONNECT IDENTIFIER IS SUN;
ENABLE CONFIGURATION;
show configuration verbose;
show database verbose 'moon';
show database verbose 'sun';
LANG=C netmgr
下記サービス追加
LISTENER
moon_DGMGRL.example.com
moon1
LISTENER2
sun_DGMGRL.example.com
sun1
srvctl stop listener -l listener
srvctl start listener -l listener
srvctl stop listener -l listener2
srvctl start listener -l listener2