- キャッシュ・ガイド
- Data Guardと連携したキャッシュの使用
- 非同期Active Data Guardと連携したTimesTenのキャッシュの動作
- プライマリおよびスタンバイのOracleデータベースの構成
- システム・トリガーを使用したOracle Databaseサービスの構成
システム・トリガーを使用したOracle Databaseサービスの構成
特定のステップを実行すると、トリガーを使用してプライマリOracleデータベースでprimaryrole
およびstandbyrole
データベース・サービスを作成できます。作成後、これらはスタンバイOracleデータベースにレプリケートされます。
- プライマリOracleデータベースで
primaryrole
およびstandbyrole
データベース・サービスを作成します。exec DBMS_SERVICE.CREATE_SERVICE( service_name => 'primaryrole', network_name => 'primaryrole', aq_ha_notifications => true, failover_method => 'BASIC', failover_type => 'SELECT', failover_retries => 180, failover_delay => 1 ); exec DBMS_SERVICE.CREATE_SERVICE( service_name => 'standbyrole', network_name => 'standbyrole', aq_ha_notifications => true, failover_method => 'BASIC', failover_type => 'SELECT', failover_retries => 180, failover_delay => 1 );
- プライマリOracleデータベースで、データベース起動時のための
primaryrole
およびstandbyrole
トリガーを作成します。CREATE OR REPLACE TRIGGER manage_OCIService after startup on database DECLARE role VARCHAR(30); BEGIN SELECT DATABASE_ROLE INTO role FROM V$DATABASE; IF role = 'PRIMARY' THEN BEGIN DBMS_SERVICE.START_SERVICE('primaryrole'); EXCEPTION WHEN OTHERS THEN NULL; END; BEGIN DBMS_SERVICE.STOP_SERVICE('standbyrole'); EXCEPTION WHEN OTHERS THEN NULL; END; ELSE BEGIN DBMS_SERVICE.STOP_SERVICE('primaryrole'); EXCEPTION WHEN OTHERS THEN NULL; END; BEGIN DBMS_SERVICE.START_SERVICE('standbyrole'); EXCEPTION WHEN OTHERS THEN NULL; END; END IF; END;
- プライマリOracleデータベースで、データベースのロールが変更されたときに実行する次のトリガーを作成します。
CREATE OR REPLACE TRIGGER manage_OCIService2 AFTER DB_ROLE_CHANGE ON DATABASE DECLARE role VARCHAR(30); BEGIN SELECT DATABASE_ROLE INTO role FROM V$DATABASE; IF role = 'PRIMARY' THEN BEGIN DBMS_SERVICE.START_SERVICE('primaryrole'); EXCEPTION WHEN OTHERS THEN NULL; END; BEGIN DBMS_SERVICE.STOP_SERVICE('standbyrole'); EXCEPTION WHEN OTHERS THEN NULL; END; ELSE BEGIN DBMS_SERVICE.STOP_SERVICE('primaryrole'); EXCEPTION WHEN OTHERS THEN NULL; END; BEGIN DBMS_SERVICE.START_SERVICE('standbyrole'); EXCEPTION WHEN OTHERS THEN NULL; END; END IF; END;
- 適切な
tnsnames.ora
ファイルで接続の別名を追加して、プライマリとスタンバイのOracleデータベースを識別し、それぞれのデータベース・サービス名を指定します。primaryinstance= (DESCRIPTION_LIST= (LOAD_BALANCE=off) (FAILOVER=on) (DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=on) (ADDRESS=(PROTOCOL=TCP)(HOST=myhost1)(PORT=1521))) (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=primaryrole))) (DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=on) (ADDRESS=(PROTOCOL=TCP)(HOST=myhost2)(PORT=1521))) (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=primaryrole)))) standbyinstance= (DESCRIPTION_LIST= (LOAD_BALANCE=off) (FAILOVER=on) (DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=on) (ADDRESS=(PROTOCOL=TCP)(HOST=myhost1)(PORT=1521))) (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=standbyrole))) (DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=on) (ADDRESS=(PROTOCOL=TCP)(HOST=myhost2)(PORT=1521))) (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=standbyrole))))
- 両方のOracleデータベースを再起動して、トリガーが適切なデータベース・サービスを開始および停止できるようにします。あるいは、Oracleデータベースをどちらも再起動しない場合は、次のようにして各Oracleデータベースで適切なデータベース・サービスを開始および停止できます。
プライマリOracleデータベースの場合:
exec DBMS_SERVICE.START_SERVICE('primaryrole'); exec DBMS_SERVICE.STOP_SERVICE('standbyrole');
スタンバイOracleデータベースの場合:
exec DBMS_SERVICE.STOP_SERVICE('primaryrole'); exec DBMS_SERVICE.START_SERVICE('standbyrole');