データベースCLIでのOracle Data Guardの使用
この記事では、データベースCLIを使用して、Oracle Cloud Infrastructureでファスト・スタート・フェイルオーバー(FSFO)を有効にしてData Guardを設定する方法について説明します。この記事のトピックでは、プライマリ・データベースとスタンバイ・データベースを準備してから、プライマリ・データベースからREDOデータを転送してスタンバイ・データベースに適用するようにData Guardを構成する方法について説明します。
データベースCLIのかわりにコンソールを使用して、Oracle Cloud InfrastructureでData Guardを設定および操作することをお薦めします。
ノート:
この記事では、Data GuardおよびFSFOに習熟している読者を想定しています。詳細は、DB SystemでのOracle Data Guardの使用を参照してください。
前提条件
このトピックの手順を実行するには、プライマリ・データベースおよびスタンバイ・データベースに関する次の情報が必要になります。
- db_name (またはoracle_sid)
- db_unique_name
- oracleホーム・ディレクトリ(またはデータベース・ホーム)
データベース情報の検索
このトピックで後述する説明に従って、プライマリDBシステムおよびスタンバイDBシステムを起動し、データベースを作成した後は、これらのシステムでCLIを使用して、必要なデータベース情報を検索できます。
- DBシステムにSSH接続します。
ssh -i <private_key_path> opc@<db_system_ip_address>
opc
としてログインし、sudo
でroot
ユーザーに切り替えます。ハイフンを含むsudo su -
を使用して、rootユーザーのプロファイルを起動します。これによって、PATH
がdbcliディレクトリ(/opt/oracle/dcs/bin
)に設定されます。sudo su -
- db_name (またはoracle_sid)およびdb_uniqueNameを見つけるには、
dbcli list-databases -j
コマンドを実行します。
出力:dbcli list-databases -j
[ { "id" : "80ad855a-5145-4f8f-a08f-406c5e4684ff", "name" : "dbtst", "dbName" : "dbtst", "databaseUniqueName" : "dbtst_phx1cs", "dbVersion" : "12.1.0.2", "dbHomeId" : "2efe7af7-0b70-4e9b-ba8b-71f11c6fe287", "instanceOnly" : false, . . .
- oracleホーム・ディレクトリ(またはデータベース・ホーム)を見つけるには、
dbcli list-dbhomes
コマンドを実行します。DBシステムに複数のデータベース・ホームがある場合は、前述のdbcli list-databases -j
コマンド出力の"dbHomeId"と一致するものを使用します。
出力:dbcli list-dbhomes
ID Name DB Version Home Location Status ---------------------------------------- -------------------- ---------------------------------------- --------------------------------------------- ---------- 2efe7af7-0b70-4e9b-ba8b-71f11c6fe287 OraDB12102_home1 12.1.0.2.160719 (23739960, 23144544) /u01/app/oracle/product/12.1.0.2/dbhome_1 Configured 33ae99fe-5413-4392-88da-997f3cd24c0f OraDB11204_home1 11.2.0.4.160719 (23054319, 23054359) /u01/app/oracle/product/11.2.0.4/dbhome_1 Configured
プライマリDBシステムの作成
プライマリDBシステムがまだない場合は、DB Systemの作成の概要の説明に従って作成します。DBシステムには初期データベースが含められます。DBシステムで使用可能なdatabaseコマンドを使用して、追加のデータベースを作成できます。
スタンバイDBシステムの作成
ノート:
スタンバイ・データベースのdb_nameはプライマリ・データベースと同じである必要がありますが、db_unique_nameは異なる必要があります。スタンバイとプライマリに同じデータベース名を使用する場合は、dbcli delete-database
コマンドを使用してスタンバイDBシステムからデータベースを削除してからでないと、後述のdbcli create-database
コマンドを実行できません。データベースの削除と作成は、完了までに数分かかります。dbcli
コマンドは、rootユーザーとして実行する必要があります。
- DB Systemの作成の概要の説明に従ってスタンバイDBシステムを作成し、DBシステムがプロビジョニングを完了して使用可能になるまで待ちます。
可用性およびディザスタ・リカバリの目的で、スタンバイDBシステムはプライマリDBシステムとは別の可用性ドメイン内に作成できます(これを強くお薦めします)。プライマリDBシステムのクラウド・ネットワーク内にスタンバイDBシステムを作成すると、両方のシステムを単一のルーティング可能なネットワーク内に配置できます。
- DBシステムにSSH接続します。
ssh -i <private_key_path> opc@<db_system_ip_address>
opc
としてログインし、sudo
でroot
ユーザーに切り替えます。ハイフンを含むsudo su -
を使用して、rootユーザーのプロファイルを起動します。これによって、PATH
がdbcliディレクトリ(/opt/oracle/dcs/bin
)に設定されます。sudo su -
- DBシステムには初期データベースが含められますが、
dbcli create-database
コマンドを--instanceonly
パラメータとともに使用してスタンバイ・データベースを作成する必要があります。このパラメータではデータベース・ストレージ構造のみが作成され、データベースが非マウント・モードで起動されます(他のデータベース・ファイルは作成されません)。--instanceonly
を使用する場合は、--dbname
パラメータと--adminpassword
パラメータの両方が必要です。混乱を避けるために、これらはプライマリ・データベースのdbnameおよび管理パスワードと一致している必要があります。次のサンプル・コマンドでは、管理パスワードの入力が要求されてから、dbnameという名前のデータベースのストレージ構造が作成されます。
dbcli create-database --dbname <same as primary dbname>;--databaseUniqueName <different from primary uniquename>;--instanceonly --adminpassword
プラガブル・データベースを使用している場合は、
--cdb
パラメータも指定してください。完全なコマンド構文は、databaseコマンドを参照してください。
dbcli create-database
コマンドによりスタンバイ・データベースが作成されるまで数分待ちます。dbcli list-jobs
コマンドを使用して、作成ジョブが正常に実行されたことを確認してから、dbcli list-databases
コマンドを使用して、データベースが構成されていることを確認できます。
プライマリDBシステムの準備
プライマリDBシステムを準備するには、静的リスナーを構成し、tnsnames.oraを更新して、いくつかのデータベース設定およびパラメータを構成する必要があります。
静的リスナーの構成
RMANおよびData Guard Brokerで使用される静的リスナーを作成します。
- プライマリDBシステムにSSH接続して、
opc
またはroot
ユーザーとしてログインし、sudo
でgrid OSユーザーに切り替えます。sudo su - grid
/u01/app/<version>/grid/network/admin/listener.ora
を編集し、次の内容をそれに追加します。ここに示された1つ目の静的リスナーは、オプションです。2番目のDGMGRL
静的リスナーは、バージョン12.1以降のデータベースではオプションですが、バージョン11.2のデータベースでは必須です。SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <primary_db_unique_name>.<primary_db_domain>) (SID_NAME = <primary_oracle_sid>) (ORACLE_HOME=<oracle_home_directory>) (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <primary_db_unique_name>_DGMGRL.<primary_db_domain>) (SID_NAME = <primary_oracle_sid>) (ORACLE_HOME=<oracle_home_directory>) (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin") ) )
- 変更を保存してから、リスナーを再起動します。
srvctl stop listener srvctl start listener
tnsnames.oraへのネット・サービス名の追加
oracleユーザーとして、$ORACLE_HOME/network/admin/tnsnames.ora
を編集し、スタンバイ・データベースのネット・サービス名をそれに追加します。
<standby db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <standby db_unique_name>.<standby db_domain>)
)
)
前述のサンプルでは、名前解決が機能していることと、<standby_server>.<domain>
がプライマリ・データベースで解決可能であることを前提としています。IPアドレスが単一のクラウド・ネットワーク(VCN)内でルーティング可能な場合は、スタンバイ・サーバーのプライベートIPアドレスを使用することもできます。
プライマリ・データベースのパラメータの構成
ヒント :
プライマリ・ホストとスタンバイ・ホストのディレクトリ構造が異なる場合は、ここでは説明していない追加のパラメータ(log_file_name_convert
パラメータなど)の設定が必要になることがあります。ホストにディレクトリ構造が異なるスタンバイを作成する方法の詳細は、RMANのドキュメントを参照してください。
- oracleユーザーとして、自動スタンバイ・ファイル管理を有効にします。
alter system set standby_file_management=AUTO;
- ブローカ構成ファイルの名前および場所を特定します。これに使用するコマンドは、データベース・ストレージのタイプによって異なります。データベース・ストレージのタイプがわからない場合は、DBシステムでdatabaseコマンドを使用します。
ACFSデータベース・ストレージの場合は、次のコマンドを使用してブローカ構成ファイルを設定します。
alter system set dg_broker_config_file1='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr1<Primary db_unique_name>.dat'; alter system set dg_broker_config_file2='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr2<Primary db_unique_name>.dat';
ASMデータベース・ストレージの場合は、次のコマンドを使用してブローカ構成ファイルを設定します。
alter system set dg_broker_config_file1='+DATA/<Primary db_unique_name>/dr1<db_unique_name>.dat'; alter system set dg_broker_config_file2='+DATA/<Primary db_unique_name>/dr2<db_unique_name>.dat';
- データベースのブローカDMONプロセスを有効にします。
alter system set dg_broker_start=true;
- すべてのデータベース・トランザクションに対してデータベース・ロギングを強制的に実行します。
alter database force logging ;
- オンラインREDOログ(ORL)に基づいて、スタンバイREDOログ(SRL)を追加します。新しく起動したDBシステムには、サイズ1073741824のORLが3つあるため、同じサイズの4つのSRLを作成します。
次の問合せを使用して、ORLの数およびサイズ(バイト)を確認できます。
出力:select group#, bytes from v$log;
GROUP# BYTES ---------- ---------- 1 1073741824 2 1073741824 3 1073741824
すべてのORLは同じサイズである必要があります。
SRLはORLと同じサイズである必要がありますが、ORLより少なくとも1つ多くSRLが存在する必要があります。前述の例では、ORLが3つあるため、SRLが4つ必要です。そのため、現在のREDOログに1を足した数を指定し、REDOログと同じサイズを使用します。
alter database add standby logfile thread 1 size <size>;
SRLグループに存在するメンバーは1つのみである必要があります(デフォルトでは、各SRLグループに1つのメンバーのみを持つDBシステムが作成されます)。これを確実にするために、次の構文でファイルを指定できます。
alter database add standby logfile thread 1 group 4 (<logfile name with full path>) size 1073741824, group 5(<logfile name with full path>) size 1073741824 ...
ASM/OMF構成の場合、前述のコマンドでは<logfile name with full path>ではなくディスク・グループが使用されます。
alter database add standby logfile thread 1 group 4 (+RECO) size 1073741824, group 5(+RECO) size 1073741824 ...
ヒント :
ORLとSRLのサイズは、ログ・スイッチの発生頻度が10分より短くなることがないように設定する必要があります。これにはアプリケーションの知識が必要であり、デプロイメント後に調整が必要になる場合もあります。詳細は、スタンバイREDOログの使用および適切なサイズの構成を参照してください。
- 正しい数のSRLを作成したことを確認します。
select group#, bytes from v$standby_log;
- データベースがARCHIVELOGモードになっていることを確認します。
archive log list
- データベースのFLASHBACKを有効にします。db_flashback_retention_targetの最小推奨値は120分です。
alter database flashback on ; alter system set db_flashback_retention_target=120;
- データベースが新しく作成された場合は、単一のスイッチREDOログを実行して、アーカイブをアクティブにします。(RMAN duplicateを実行する前に、少なくとも1つのログをアーカイブする必要があります。)
alter system switch logfile;
スタンバイ・データベースの準備
スタンバイ・データベースを準備する前に、スタンバイのデータベース・ホームのバージョンがプライマリと同じであることを確認してください。(プライマリ・データベースとスタンバイ・データベースの両方が同じデータベース・バージョンで新しく作成された場合、データベース・ホームは同じになります。)そうでない場合は、同じバージョンのデータベース・ホームを作成してください。dbhomeコマンドを使用してバージョンを確認し、必要に応じて新しいデータベース・ホームを作成できます。
スタンバイDBシステムを準備するには、静的リスナーの構成、tnsnames.oraの更新、TDE Walletの構成、一時パスワード・ファイルの作成、接続の確認、RMAN DUPLICATEの実行、FLASHBACKの有効化を行ってから、データベース・サービスを作成する必要があります。
静的リスナーの構成
RMANおよびData Guard Brokerで使用される静的リスナーを作成します。
- スタンバイDBシステムにSSH接続して、
opc
またはroot
ユーザーとしてログインし、sudo
でgrid OSユーザーに切り替えます。sudo su - grid
- 次の内容を
/u01/app/<db_version>/grid/network/admin/listener.ora
に追加します。次に示された1つ目の静的リスナーは、RMAN DUPLICATEで必須です。2番目のDGMGRL静的リスナーは、データベース・バージョン12.2.0.1および12.1.0.2ではオプションですが、データベース・バージョン11.2.0.4では必須です。
SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>_DGMGRL.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) )
- リスナーを再起動します。
srvctl stop listener srvctl start listener
- 静的リスナーが使用可能になっていることを確認します。次のサンプル出力は、データベース・バージョン12.1.0.2のものです。この時点で、
...status UNKNOWN
メッセージが予測されます。
出力:lsnrctl status
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 29-SEP-2016 21:09:25 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production Start Date 29-SEP-2016 21:09:19 Uptime 0 days 0 hr. 0 min. 5 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/12.1.0.2/grid/network/admin/listener.ora Listener Log File /u01/app/grid/diag/tnslsnr/dg2/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.1.24)(PORT=1521))) Services Summary... Service "dg2_phx2hx.oratst.org" has 1 instance(s). Instance "dg2", status UNKNOWN, has 1 handler(s) for this service... Service "dg2_phx2hx_DGMGRL.oratst.org" has 1 instance(s). Instance "dg2", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully
tnsnames.oraへのネット・サービス名の追加
oracleユーザーとして、スタンバイ・データベースのネット・サービス名を$ORACLE_HOME/network/admin/tnsnames.ora
に追加します。$ORACLE_HOMEは、スタンバイ・データベースが実行されているデータベース・ホームです。
<Primary db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <primary_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <primary db_unique_name).<primary db_domain>)
)
)
<Standby db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <standby db_unique_name>.<db_domain>)
)
)
スタンバイ・システムへのTDEウォレットのコピー
scp -i <private key> primary_server:/opt/oracle/dcs/commonstore/wallets/tde/<primary db_unique_name>/* standby_server:/opt/oracle/dcs/commonstore/wallets/tde/<standby db_unique_name>
スタンバイ・システム構成の設定
oracleユーザーとして、データベース・バージョン11.2.0.4用の次のディレクトリを作成します。このステップは、バージョン12.2.0.1およびバージョン12.1.0.2ではオプションです。
mkdir -pv /u03/app/oracle/redo/<standby db_unique_name uppercase>/controlfile
監査ファイルの保存先の作成
oracleユーザーとして、監査ファイルの保存先として使用する次のディレクトリを作成します。
mkdir -p /u01/app/oracle/admin/<db_name>/adump
そうしない場合、後で使用するRMAN duplicateコマンドが失敗します。
一時パスワード・ファイルの作成
oracleユーザーとして、一時パスワード・ファイルを作成します。
orapwd file=$ORACLE_HOME/dbs/orapw<standby oracle_sid> password=<admin password for primary> entries=5
パスワードは、プライマリ・データベースの管理パスワードと同じにする必要があります。そうしない場合、次のRMAN
duplicateステップはRMAN-05614: Passwords for target and auxiliary connections must be the same when using active duplicate.
で失敗します
スタンバイ・データベースが使用可能になっていることの確認
- oracleユーザーとして、環境変数を設定します。
. oraenv
$ORACLE_HOME/dbs/init<standby sid_name>.ora
を次の内容に置き換えます:db_name=<Primary db_name> db_unique_name=<standby db_unique_name> db_domain=<standby db_domain>
- スタンバイからspfileを削除します。
/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile$ORACLE_SID.ora
データベースはspfileを指定せずに非マウント・モードで起動する必要がありますが、元のinitファイルにspfileパラメータが含まれているために、
RMAN
duplicateステップが機能しなくなります。 ORACLE_UNQNAME
環境変数を、DB_UNIQUE_NAME
を指すように設定します。export ORACLE_UNQNAME =db_unique_name
ノート:
このステップを実行しない場合、ウォレットは開かれず、後続のステップでRMAN DUPLICATE
コマンドを実行すると失敗します。- 先に使用した
dbcli create-database --instanceonly
コマンドでは、スタンバイ・データベースがプライマリとして読取り/書込みモードでオープンするため、次の非マウント・ステップに進む前にデータベースを停止する必要があります。sqlplus / as sysdba shutdown immediate
- データベースを非マウント・モードで起動します。
startup nomount
データベース接続の確認
プライマリ・データベースとスタンバイ・データベースの間の接続を確認します。
- プライマリDBシステムおよびスタンバイDBシステムに使用されるセキュリティ・リストで、リスナー・ポート1521がオープンしていることを確認します。詳細は、DB Systemのセキュリティ・リストの更新を参照してください。
- プライマリ・データベースからスタンバイ・データベースに接続します。
sqlplus sys/<password>@<standby net service name> as sysdba
- スタンバイ・データベースからプライマリ・データベースに接続します。
sqlplus sys/<password>@<primary net service name> as sysdba
RMAN DUPLICATEコマンドの実行
oracleユーザーとして、スタンバイDBシステムでRMAN DUPLICATEコマンドを実行します。
プライマリ・データベースが大きい場合、パフォーマンスを向上させるために追加のチャネルを割り当てることができます。新しくインストールされたデータベースの場合、通常は1つのチャネルによってデータベースの複製が数分で実行されます。
RMAN DUPLICATEコマンドによって生成されたエラーがないことを確認します。エラーが発生した場合、それがRMAN DUPLICATEの一部として$ORACLE_HOME/dbs
の下に生成されている場合のために、(spfileではなく) init.ora
ファイルを使用してデータベースを再起動してください。
次の例では、特に指定がないかぎり、<Standby db_unique_name>に小文字を使用します。
ACFSストレージ・レイアウトの場合は、次のコマンドを実行します。
rman target sys/<password>@<primary alias> auxiliary sys/<password>@<standby alias> log=rman.out
run { allocate channel prim1 type disk;
allocate auxiliary channel sby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase >/'
set db_unique_name='<Standby db_unique_name>'
set db_create_file_dest='/u02/app/oracle/oradata/<Standby db_unique_name>'
set dg_broker_config_file1='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr1<Standby db_unique_name>.dat'
set dg_broker_config_file2='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr2<Standby db_unique_name>.dat'
set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
set instance_name='<Standby db_unique_name>'
;
}
ASMストレージ・レイアウトの場合は、次のコマンドを実行します。
rman target sys/<password>@<primary alias> auxiliary sys/<password>@<standby alias> log=rman.out
run {
allocate channel prim1 type disk;
allocate auxiliary channel sby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase>/'
set db_unique_name='<Standby db_unique_name>'
set dg_broker_config_file1='+DATA/<Standby db_unique_name>/dr1<Standby db_unique_name>.dat'
set dg_broker_config_file2='+DATA/<Standby db_unique_name>/dr2<Standby db_unique_name>.dat'
set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
set instance_name='<Standby db_unique_name>'
;
}
データベースFLASHBACKの有効化
- Data Guardのベスト・プラクティスとして、フラッシュバックを有効にし、プライマリ・データベースとスタンバイ・データベースの両方で
db_flashback_retention_target
を120分以上に設定します。alter database flashback on; alter system set db_flashback_retention_target=120;
- スタンバイ・データベースが正しく作成されていることを確認します。
select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE,SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
データベース・サービスの作成
srvctlを使用してスタンバイ・データベースのデータベース・サービスを作成することをお薦めします。
ACFSストレージ・レイアウトの場合。
- 共有ディレクトリを作成し、spfileファイルをそこにコピーします。
mkdir -pv /u02/app/oracle/oradata/<Standby db_unique_name>/dbs cp $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora /u02/app/oracle/oradata/<Standby db_unique_name>/dbs
- 既存のデータベース・サービスを停止して削除します。
srvctl stop database -d <standby db_unique_name> srvctl remove database -d <standby db_unique_name>
- データベース・サービスを作成します。
srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora' -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name> srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>" srvctl config database -d <standby db_unique_name>
- データベース・サービスを起動します。
srvctl start database -d <standby db_unique_name>
$ORACLE_HOME/dbs
からファイルをクリーンアップします。rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
- spfileファイルの新しい場所を参照するために、
$ORACLE_HOME/dbs/init<standby oracle_sid>.ora
ファイルを作成します。SPFILE='/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
- スタンバイ・データベースを停止してから、
srvctl
を使用して起動します。srvctl stop database -d <standby db_unique_name> srvctl start database -d <standby db_unique_name>
ASMストレージ・レイアウトの場合。
- +DATAの下にspfileファイルを生成することを検討してください。
create pfile='init<standby oracle_sid>.ora' from spfile ; create spfile='+DATA' from pfile='init<standby oracle_sid>.ora' ;
- 既存のデータベース・サービスを停止して削除します。
srvctl stop database -d <standby db_unique_name> srvctl remove database -d <standby db_unique_name>
- データベース・サービスを作成します。
srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx' -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name> srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>" srvctl config database -d <standby db_unique_name>
- データベース・サービスを起動します。
srvctl start database -d <standby db_unique_name>
$ORACLE_HOME/dbs
からファイルをクリーンアップします。rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
- spfileファイルの新しい場所を参照するために、
$ORACLE_HOME/dbs/init<standby oracle_sid>.ora
ファイルを作成します。SPFILE='+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
- データベースを停止し、srvctlを使用してスタンバイ・データベースを起動します。
srvctl start database -d <standby db_unique_name>
Data Guardの構成
次のステップを実行してData Guardの構成を完了し、プライマリ・データベースからのREDOトランスポートと、スタンバイ・データベースでのREDO適用を有効にします。
- プライマリDBシステムまたはスタンバイDBシステムから
dgmgrl
コマンドライン・ユーティリティを実行し、sys資格証明を使用してプライマリ・データベースに接続します。connect sys/<sys password>@<primary tns alias>
dgmgrl
コマンドライン・ユーティリティで、Data Guard構成を作成し、プライマリ・データベースとスタンバイ・データベースを識別します。create configuration mystby as primary database is <primary db_unique_name> connect identifier is <primary tns alias>; add database <standby db_unique_name> as connect identifier is <standby tns alias> maintained as physical;
dgmgrl
コマンドライン・ユーティリティで、Data Guard構成を有効にします。enable configuration;
- Data Guardの設定が正しく行われたことを確認します。SQLプロンプトで、プライマリ・データベースとスタンバイ・データベースの両方で次のSQLを実行します。
select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database;
- スタンバイ・データベースでData Guardプロセスが開始されていることを確認します。
select PROCESS,PID,DELAY_MINS from V$MANAGED_STANDBY;
- プライマリおよびスタンバイのパラメータ構成を確認します。
show parameter log_archive_dest_ show parameter log_archive_config show parameter fal_server show parameter log_archive_format
dgmgrl
コマンドライン・ユーティリティで、Data Guard構成が機能していることを確認します。具体的には、REDO送信とREDO適用が機能しており、スタンバイがプライマリよりも大きく遅れていないことを確認してください。show configuration verbose show database verbose <standby db_unique_name> show database verbose <primary db_unique_name>
矛盾、エラーまたは警告があれば解決する必要があります。また、プライマリでトランザクションを実行し、それがスタンバイで認識されていることを確認することもできます。
- スイッチオーバーとフェイルオーバーを両方向で実行して、Data Guard構成が正常に機能していることを確認します。
dgmgrl
コマンドライン・ユーティリティで、各操作の後にshow configuration
を実行し、エラーや警告がないことを確認します。注意:
このステップは、ユーザーの判断で設定できるオプションです。なんらかの理由で構成が有効でない場合は、スイッチオーバーまたはフェイルオーバー(あるいはその両方)が失敗し、プライマリ・データベースの起動が困難または不可能になる可能性があります。プライマリのリカバリが必要になり、可用性に影響を及ぼす場合があります。
switchover to <standby db_unique_name> switchover to <primary db_unique_name> #connect to standby before failover: connect sys/<sys password>@<standby db_unique_name> failover to <standby db_unique_name> reinstate database <primary db_unique_name> #connect to primary before failover: connect sys/<sys password>@<primary db_unique_name> failover to <primary db_unique_name> reinstate database <standby db_unique_name>
オブザーバの構成(オプション)
可用性および耐久性を高めるためのベスト・プラクティスは、プライマリ、スタンバイおよびオブザーバを別々の可用性ドメインで実行することです。オブザーバは、特定のターゲット・スタンバイ・データベースにフェイルオーバーするかどうかを決定します。オブザーバとして使用されるサーバーには、Oracle SQL NETおよびブローカを含むOracle Client Administratorソフトウェアが必要です。dgmgrl
コマンドライン・ユーティリティで、次のコマンドを実行します。
- 前述のように、プライマリ・データベースとスタンバイ・データベースの両方にTNS別名を構成し、両方のデータベースへの接続を確認します。
- 保護モードをmaxavailabilityまたはmaxperformanceに変更します(FSFOではmaxprotectionはサポートされていません)。
maxavailabilityを有効にするには:
edit database <standby db_unique_name> set property 'logXptMode'='SYNC'; edit database <primary db_unique_name> set property 'logXptMode'='SYNC'; edit configuration set protection mode as maxavailability;
maxperformanceを有効にするには:
edit configuration set protection mode as maxperformance; edit database <standby db_unique_name> set property 'logXptMode'='ASYNC'; edit database <primary db_unique_name> set property 'logXptMode'='ASYNC';
maxperformanceの場合、
FastStartFailoverLaglimit
プロパティによってデータ損失の最大許容量がデフォルトで30秒に制限されます。 - 次のプロパティも考慮する必要があります。
show configuration verbose
を実行して、その現在の値を表示します。- FastStartFailoverPmyShutdown
- FastStartFailoverThreshold
- FastStartFailoverTarget
- FastStartFailoverAutoReinstate
(オブザーバが起動するまでは、
show configuration
を実行すると次のエラーが発生します:Warning : ORA-16819: fast-start failover observer not started
。) - ブローカからファスト・スタート・フェイルオーバーを有効にします:
Enable fast_start failover
- ファスト・スタート・フェイルオーバーおよび関連する設定を確認します。
show fast_start failover
- ブローカからオブザーバを起動します(フォアグラウンドで実行されますが、バックグラウンドで実行することもできます)。
start observer
- ファスト・スタート・フェイルオーバーが有効になっていて、エラーや警告がないことを確認します。
show configuration verbose
- すべてが正常に機能していることを確認するために、必ずフェイルオーバーのテストは両方向で行ってください。プライマリ・データベースの強制終了を実行して、FSFOが適切に実行されていることを確認します。
オブザーバによってスタンバイ・データベースへのフェイルオーバーが開始されます。保護モードがmaxprotectionに設定されている場合は、FastStartFailoverLaglimitの値に基づいて、データの損失が発生することがあります。