Data Guard プライマリ データベースを準備する
Data Guard には、プライマリ データベースと少なくとも 1 つのスタンバイ データベースが必要です。Bare Metal Solution 上に Data Guard を設定する前に、プライマリ データベースを作成してください。
このガイド全体を通して、次の例を使用します。
データベースの一意の名前 | サーバーのホスト名 | RAC インスタンス名 | 役割 |
---|---|---|---|
DBDG_SITE1 | site1db1、site1db2 | DBDG_SITE11、DBDG_SITE12 | プライマリ |
DBDG_SITE2 | site2db1、site2db2 | DBDG_SITE21、DBDG_SITE22 | スタンバイ |
このガイドの Oracle を実行する Bare Metal Solution サーバーには、次の環境変数が構成されています。
環境変数名 | 値 |
---|---|
ORACLE_BASE | /apps/oracle/oracle_base |
ORACLE_HOME | /apps/oracle/19.0.0/db_home1 |
設定によっては、環境変数のパスの変更が必要になる場合があります。
プライマリ データベースを設定する
プライマリ データベースをホストする最初の Bare Metal Solution サーバーにログインします。
/etc/oratab
ファイルで、oraenv
コマンドがプライマリ データベースの環境変数を設定できるようにエントリを追加します。各ノードで実行中のインスタンスと一致するようにインスタンス名を変更し、Oracle データベース ホームのフルパスを指定します。DBDG_SITE11:ORACLE_HOME:N
プライマリ データベースに接続できるように、
ORACLE_SID
環境変数を設定します。source oraenv <<< "DBDG_SITE11"
レスポンス
The Oracle base has been set to /apps/oracle/oracle_base
が返されます。
データベース ロギングを構成し、フラッシュバック データベースを有効にする
SQL*Plus を起動して
force logging
を有効にし、データベースに追加されたnologging
テーブルスペースがログに記録されるようにします。sqlplus / as sysdba
ALTER DATABASE FORCE LOGGING;
archivelog mode
とflashback database
がオンであることを確認します。ARCHIVE LOG LIST; SELECT LOG_MODE, FLASHBACK_ON FROM V$DATABASE;
archivelog mode
とflashback database
がオフになっている場合は、次の SQL コマンドでオンにします。クラスタ化されたデータベースを停止して、必要な変更を行います。
srvctl stop database -d
必要な SQL コマンドを実行して
archivelog mode
とflashback database
をオンにします。STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE FLASHBACK ON; ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=1440 SID='*' SCOPE=BOTH; ALTER DATABASE OPEN; SHUTDOWN IMMEDIATE; EXIT;
クラスタ化されたデータベースを再び開始します。
srvctl start database -d DBDG_SITE1
Data Guard 用にデータベースを準備する
プライマリ データベースをホストする最初の Bare Metal Solution サーバーにログインし、プライマリ データベースに接続できるように
ORACLE_SID
環境変数を設定します。source oraenv <<< "DBDG_SITE11"
レスポンス
The Oracle base has been set to /apps/oracle/oracle_base
が返されます。SQL*Plus を起動して、Data Guard の構成とサービスに必要なデータベース初期化パラメータを変更します。
sqlplus / as sysdba
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SID='*' SCOPE=SPFILE; ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=8 SID='*' SCOPE=BOTH; ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SID='*' SCOPE=SPFILE; ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SID='*' SCOPE=BOTH;
データベースにスタンバイ REDO ログが存在することを確認します。各スレッドには、オンライン REDO ロググループの数よりも 1 つ多いスタンバイ REDO ロググループが必要です。
SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD# UNION SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
次の例では、スレッドごとに 4 つのオンライン REDO ログがあり、スタンバイ REDO ロググループは作成されていません。オンライン REDO ロググループは 4 つあるため、スレッドごとに 5 つのスタンバイ REDO ロググループを作成する必要があります。
Logfile groups in thread 1: 4 Logfile groups in thread 2: 4
十分なスタンバイ REDO ロググループが存在する場合は、この手順をスキップします。スタンバイ REDO ロググループは、各オンライン REDO ロググループと同じサイズにする必要があります。次の PL/SQL コードで、必要な数のスタンバイ REDO ロググループを作成します。
SET FEEDBACK OFF SET SERVEROUTPUT ON DECLARE CURSOR cur_thread IS SELECT THREAD# THREAD, COUNT(*) COUNT FROM V$LOG GROUP BY THREAD#; standbylog_count NUMBER := 0; standbylog_group NUMBER := 0; standbylog_size NUMBER := 0; last_group_number NUMBER; sqlstmt VARCHAR2(200); BEGIN SELECT MAX(GROUP#), MAX(BYTES) INTO last_group_number, standbylog_size FROM V$LOG; standbylog_group := last_group_number + 1; FOR rec_thread IN cur_thread LOOP standbylog_count := rec_thread.count + 1; FOR i IN 1..standbylog_count LOOP sqlstmt := 'ALTER DATABASE ADD STANDBY LOGFILE THREAD ' || rec_thread.thread || ' GROUP ' || TO_CHAR(standbylog_group) || ' SIZE ' || standbylog_size || ';'; DBMS_OUTPUT.PUT_LINE( sqlstmt); standbylog_group := standbylog_group + 1; END LOOP; END LOOP; END; / SET FEEDBACK ON
次の出力例では、2 つのスレッドのそれぞれに 5 つのスタンバイ REDO ロググループを作成するよう指示しています。
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 9 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 13 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 14 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 15 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 16 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 17 SIZE 2147483648; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 18 SIZE 2147483648;
構成に対してスタンバイ REDO ログが正しく設定されていることを確認します。
SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD# UNION SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
次の出力には、スレッドごとに 4 つのオンライン REDO ロググループと、スレッドごとに 5 つのスタンバイ REDO ロググループがあります。
Logfile groups in thread 1: 4 Logfile groups in thread 2: 4 Standby logfile groups in thread 1: 5 Standby logfile groups in thread 2: 5
SQL*Plus を終了します。
EXIT;
データベース パラメータとパスワード ファイルをスタンバイ サーバーにコピーする
データベース パラメータ ファイルを作成してスタンバイ サーバーにコピーします。
スタンバイ データベース パラメータ ファイル(
pfile
)用のフォルダを作成します。mkdir /home/oracle/backup
SQL*Plus を起動して、スタンバイ データベース
pfile
を作成します。sqlplus / as sysdba
CREATE PFILE='/home/oracle/backup/initDBDG_SITE21.ora' FROM SPFILE;
SQL*Plus を終了してから、
pfile
をスタンバイの場所にある最初の Bare Metal Solution サーバーにコピーします。EXIT;
scp /home/oracle/backup/initDBDG_SITE21.ora ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora
SYS リモート ログインのパスワードは安全に保管してください。パスワードがわからない場合は、パスワードを再設定します。
パスワード ファイルをスタンバイ クラスタにコピーします。
srvctl
コマンドを使用して、パスワード ファイルの場所を取得します。srvctl config database -db DBDG_SITE1 | grep -i password
次の出力は、ASM 内のパスワード ファイル ストアの場所を示しています。
Password file: +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663
asmcmd
コマンドを使用して、ローカル ファイル システム上にパスワード ファイルの一時コピーを作成します。asmcmd cp +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663 /tmp/orapwDBDG_SITE21
スタンバイの場所にある最初の Bare Metal Solution サーバーにパスワード ファイルをコピーし、プライマリの場所にある Bare Metal Solution サーバーからこの一時コピーを削除します。
scp /tmp/orapwDBDG_SITE21 ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/orapwDBDG_SITE21 rm /tmp/orapwDBDG_SITE21
データベース接続を構成する
プライマリ データベースの場所にある Bare Metal Solution サーバーにある $ORACLE_HOME/network/admin/tsnames.ora
ファイルを編集し、ネットサービスの構成を更新します。このファイルには、各データベースのエントリと、データベース複製時に使用される一時エントリ(後で削除します)の 3 つのエントリがあります。
DBDG_SITE1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE1_SCAN_HOSTNAME)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DBDG_SITE1) (UR=A)
)
)
DBDG_SITE2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE2_SCAN_HOSTNAME)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DBDG_SITE2) (UR=A)
)
)
DBDG_SITE2_FOR_DUPLICATION =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = site2db1)(PORT = 1523))
(CONNECT_DATA =
(SERVER = DEDICATED)
(INSTANCE_NAME = DBDG_SITE21) (UR=A)
)
)
これで、プライマリ データベースを Data Guard 構成で使用できるようになりました。
次のステップ
Data Guard のスタンバイ データベースを作成します。