データベースCLIでのOracle Data Guardの使用
この記事では、データベースCLIを使用して、Oracle Cloud InfrastructureでFast-Startフェイルオーバー(FSFO)を使用したData Guardを設定する方法について説明します。 この記事のトピックでは、プライマリ・データベースとスタンバイ・データベースを準備し、プライマリ・データベースからREDOデータを送信してスタンバイ・データベースに適用するようにData Guardを構成する方法について説明します。
Oracleでは、データベース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 SystemにSSHを実行します。
ssh -i <private_key_path> opc@<db_system_ip_address> opcとしてログインし、sudoをrootユーザーにログインします。sudo su -をハイフンとともに使用して、PATHをdbcliディレクトリ(/opt/oracle/dcs/bin)に設定するrootユーザー・プロファイルを起動します。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-dbhomesID 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システムの作成の概要」の説明に従って作成します。 DBシステムには初期データベースが含まれます。 DBシステムで使用可能な「データベース・コマンド」を使用して、追加のデータベースを作成できます。
スタンバイDBシステムの作成
ノート:
スタンバイ・データベースのdb_nameはプライマリ・データベースと同じである必要がありますが、異なるdb_unique_nameが必要です。 スタンバイとプライマリに同じデータベース名を使用する場合は、次に説明するdbcli create-databaseコマンドを実行する前に、dbcli delete-databaseコマンドを使用してスタンバイDBシステムからデータベースを削除する必要があります。 データベースの削除と作成には数分かかります。 dbcliコマンドは、rootユーザーとして実行する必要があります。
- 「DBシステムの作成の概要」の説明に従ってスタンバイDBシステムを作成し、DBシステムがプロビジョニングを完了して使用可能になるまで待機します。
スタンバイDBシステムは、可用性および障害リカバリの目的で、プライマリDBシステムとは異なるアベイラビリティ・ドメインに作成できます(これを強くお薦めします)。 プライマリDBシステム・クラウド・ネットワークにスタンバイDBシステムを作成して、両方のシステムが単一のルーティング可能なネットワークに存在するようにできます。
- DB SystemにSSHを実行します。
ssh -i <private_key_path> opc@<db_system_ip_address> opcとしてログインし、sudoをrootユーザーにログインします。sudo su -をハイフンとともに使用して、PATHをdbcliディレクトリ(/opt/oracle/dcs/bin)に設定するrootユーザー・プロファイルを起動します。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パラメータも指定します。完全なコマンド構文については、「データベース・コマンド」を参照してください。
dbcli create-databaseコマンドがスタンバイ・データベースを作成するまで数分待ちます。dbcli list-jobsコマンドを使用して作成ジョブが正常に実行されたことを確認し、dbcli list-databasesコマンドを使用してデータベースが構成されていることを確認します。
プライマリDBシステムの準備
プライマリDBシステムを準備するには、静的リスナーの構成、tnsnames.oraの更新、いくつかのデータベース設定およびパラメータの構成を行う必要があります。
静的リスナーの構成
RMANおよびData Guard Brokerで使用する静的リスナーを作成します。
- プライマリDBシステムにSSH接続し、
opcまたはrootユーザーとしてログインし、grid OSユーザーにsudoにログインします。sudo su - grid /u01/app/<version>/grid/network/admin/listener.oraを編集し、次のコンテンツを追加します。 ここに示す最初の静的リスナーはオプションです。 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システムで「データベース・コマンド」を使用します。
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の3つのORLが存在するため、同じサイズの4つのSRLを作成します。
下の問合せを使用すると、ORLの数とサイズ(バイト)を判別できます。
出力:select group#, bytes from v$log;GROUP# BYTES ---------- ---------- 1 1073741824 2 1073741824 3 1073741824ORLはすべて同じサイズである必要があります。
SRLのサイズはORLと同じである必要がありますが、ORLよりも少なくとも1つのSRLが必要です。 前述の例では、3つのORLがあるため、4つのSRLが必要です。 そのため、現在のREDOログと1つを指定して、REDOログと同じサイズを使用します。
alter database add standby logfile thread 1 size <size>;SRLグループにはメンバーが1つのみ存在する必要があります(デフォルトでは、DBシステムはSRLグループごとに1つのメンバーのみで作成されます)。 これを確実にするために、次の構文でファイルに名前を付けることができます。
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の複製を実行する前に、少なくとも1つのログをアーカイブする必要があります。)
alter system switch logfile;
スタンバイ・データベースの準備
スタンバイ・データベースを準備する前に、スタンバイのデータベース・ホームがプライマリと同じバージョンであることを確認します。 (プライマリ・データベースとスタンバイ・データベースの両方が同じデータベース・バージョンで新しく作成された場合、データベース・ホームは同じになります。) そうでない場合は、同じバージョンのデータベース・ホームを作成します。 「Dbhomeコマンド」を使用してバージョンを確認し、必要に応じて新しいデータベース・ホームを作成できます。
スタンバイDBシステムを準備するには、静的リスナーの構成、tnsnames.oraの更新、TDE Walletの構成、一時パスワード・ファイルの作成、接続の確認、RMAN DUPLICATEの実行、FLASHBACKの有効化、データベース・サービスの作成を行う必要があります。
静的リスナーの構成
RMANおよびData Guard Brokerで使用する静的リスナーを作成します。
- スタンバイDBシステムにSSH接続し、
opcまたはrootユーザーとしてログインし、grid OSユーザーにsudoにログインします。sudo su - grid - 次の内容を
/u01/app/<db_version>/grid/network/admin/listener.oraに追加します。次に示す最初の静的リスナーは、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 statusLSNRCTL 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重複ステップが失敗: 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を指定せずにnomountモードで起動する必要がありますが、元のinitファイルにはspfileパラメータが含まれており、これによって
RMANの重複ステップが機能しなくなります。 DB_UNIQUE_NAMEを指すようにORACLE_UNQNAME環境変数を設定します。export ORACLE_UNQNAME =db_unique_nameノート:
このステップを実行しない場合、ウォレットはオープンされず、後続のステップでRMAN DUPLICATEコマンドを実行すると失敗します。- 以前に使用した
dbcli create-database --instanceonlyコマンドは、スタンバイ・データベースをプライマリとして読取り/書込みモードでオープンするため、次のマウント・ステップに進む前にデータベースを停止する必要があります。sqlplus / as sysdba shutdown immediate - データベースをnomountモードで起動します。
startup nomount
データベース接続の確認
プライマリ・データベースとスタンバイ・データベース間の接続を確認します。
- プライマリおよびスタンバイDBシステムに使用されるセキュリティ・リストで、リスナー・ポート1521が開いていることを確認します。 詳細は、「DBシステムのセキュリティ・リストの更新」を参照してください。
- プライマリ・データベースから、スタンバイ・データベースに接続します。
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で生成された場合は、init.oraファイル(spfileではない)を使用してデータベースを再起動します。
次の例では、特に指定がないかぎり、<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 ;
データベース・サービスの作成
Oracleでは、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$ORACLE_HOME/dbs/init<standby oracle_sid>.oraファイルを作成して、spfileファイルの新しいロケーションを参照します。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$ORACLE_HOME/dbs/init<standby oracle_sid>.oraファイルを作成して、spfileファイルの新しいロケーションを参照します。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システムから
dgmgrlコマンドライン・ユーティリティを実行し、sys資格証明を使用してプライマリ・データベースに接続します。connect sys/<sys password>@<primary tns alias> - Data Guard構成を作成し、
dgmgrlコマンドライン・ユーティリティでプライマリ・データベースとスタンバイ・データベースを識別します。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; - Data Guard構成で
dgmgrlコマンドライン・ユーティリティを有効にします。enable configuration; - Data Guardの設定が正しく行われたことを確認します。 SQLプロンプトのプライマリ・データベースとスタンバイ・データベースのbothで、次の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構成が期待どおりに機能していることを確認します。 各操作の後に
show configurationを実行し、dgmgrlコマンドライン・ユーティリティにエラーまたは警告がないことを確認します。注意:
このステップは、ユーザーの判断に基づいてオプションです。 何らかの理由で構成が有効でない場合、スイッチオーバーまたはフェイルオーバー(あるいはその両方)は失敗し、プライマリ・データベースの起動が困難または不可能になる可能性があります。 プライマリのリカバリが必要な場合があり、可用性に影響します。
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はサポートされていません)。
最大可用性を有効にするには:
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';最大パフォーマンスの場合、
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値に基づいてデータが失われる可能性があります。