以下の内容はhttps://htn20190109.hatenablog.com/entry/2025/03/21/105651より取得しました。


1台RAC/DG

 

OS: Oracle Linux 8.10 

メモリ: 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. データガード前提条件の確認と設定


sql

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

 

 

 

 




以上の内容はhttps://htn20190109.hatenablog.com/entry/2025/03/21/105651より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14