6 Global Data Servicesのトラブルシューティング
次のトピックでは、発生する可能性があるGDSの問題をトラブルシューティングするためのツールおよび解決方法について説明します。
6.1 Global Data Servicesコンポーネントの実行ステータスの取得
status
コマンドを使用すると、GDSコンポーネントの実行ステータスを取得できます。
GDSCTL>status gsm GDSCTL>status service GDSCTL>status database
6.2 Global Data Servicesコンポーネントの静的構成情報の表示
gdsctl config
コマンドを使用すると、様々なGDSコンポーネントの静的構成情報を取得できます。
GDSCTL>config GDSCTL>config gsm GDSCTL>config region GDSCTL>config gdspool GDSCTL>config database GDSCTL>config service GDSCTL>config invitednode
6.3 ネットワークの問題
ここでは、次の問題について説明します:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
ORA-12516: TNS:listener could not find available handler with matching protocol stack
ORA-12541: TNS:no listener
GSM-40167: VNCR entry "<hostname>" is not resolvable on GSM host
6.3.1 ORA-12514: TNS: リスナーは接続記述子で要求されたサービスを現在認識していません
グローバル・サービスが停止している可能性があります。プール・データベースが実行されており、サービスが起動していることを確認してください。
グローバル・サービスが無効である可能性があります。プール・データベースが実行されており、サービスが有効で起動していることを確認してください。
GDSプール・データベースが停止している可能性があります。GDSプール・データベースが実行されており、サービスが有効で起動していることを確認してください。
6.3.2 ORA-12516: TNS: リスナーは、一致するプロトコル・スタックが使用可能なハンドラを検出できませんでした。
GDSプール・データベースのローカル・リスナーが停止している可能性があります。GDSプール・データベースのローカル・リスナーが実行されていることを確認してください。
6.4 add brokerconfig
に関連する問題
GDS環境の構成中に発生する可能性のある一般的な問題は、GSMリスナーへのデータベース登録がないことです。この顧客を検出するには、通常、GDSCTL status database
コマンドを使用します。このコマンドの出力には次が表示されます:
status database
Database: "test" Registered: N State: Ok ONS: Y. Role: N/A Instances: 0 Region: region1
Service: "test_failover" Globally started: Y Started: N
Scan: Y Enabled: Y Preferred: Y
この出力の注目すべき部分は、Registered
プロパティで、登録なしを示す値N
が表示されます。
GDSリスナーでのデータベース登録では、データベースにリージョンを割り当てる必要があることに注意してください。2つ以上のリージョンが存在するGDSプールにデータベースを追加するために add brokerconfig
コマンドが使用され、status databaseコマンドで登録がないことがと表示された場合は、modify database
コマンドを使用してリージョンを手動で割り当てます:
modify database … -region <region_name>
複数のスタンバイ・データベースをGDS構成に同時に追加する場合、「ORA-45539: データベースdb_nameはすでに別のプールに追加されています。」
を受け取ることがあります。解決策は、一度に1つずつ追加および同期することです。
6.5 無効なオブジェクト関連の問題
データベース・リリース更新(DBRU)または個々のパッチをインストールした後、GSMADMIN_INTERNAL
スキーマの一部のオブジェクトは、データベース全体または個々のコンテナ(PDB)で無効になる場合があります。たとえば、次の問合せがDBRUの後に発行されるとします:
select owner, object_name, object_type, status from dba_objects
where status='INVALID' and owner='GSMADMIN_INTERNAL' order by owner, object_name, object_type;
OWNER OBJECT_NAME OBJECT_TYPE STATUS CON_ID
----------------- ---------------------- ------------- ------- ------
GSMADMIN_INTERNAL DBMS_GSM_POOLADMIN PACKAGE BODY INVALID 3
GSMADMIN_INTERNAL CAT_ROLLBACK_TRIGGER TRIGGER INVALID 3
GSMADMIN_INTERNAL REQUEST_DELETE_TRIGGER TRIGGER INVALID 3
GSMADMIN_INTERNAL DONE_TRIGGER TRIGGER INVALID 3
...
GSMADMIN_INTERNALスキーマのオブジェクトが無効であるため、datapatchスクリプトの実行は失敗します。無効なオブジェクトの問題を解決するには、次のステップに従ってOracle提供のスクリプトを再実行する必要があります:
1. GSMADMIN_INTERNALスキーマにユーザー・データが含まれていないことを確認します。
Global Data Services (GDS)またはOracle Sharding機能が使用されている場合、GSMADMIN_INTERNALスキーマには重要な構成データが含まれている可能性があります。
SYSとして次の問合せを実行して、スキーマが空であることを確認します。コンテナ・データベース(CDB)の場合、この問合せはCDB$ROOTおよびすべてのプラガブル・データベース(PDB)で実行する必要があります。
select count(*) from gsmadmin_internal.cloud;
この問合せで0 (ゼロ)が返されたら、次のステップに進みます。ゼロ以外が返された場合は、オラクル・カスタマ・サポートに詳細なガイダンスを依頼してください。
2. SQL*Plusを使用してSYSとしてデータベースに接続します。データベースがCDBの場合、個々のPDBではなくCDB$ROOTに接続します。
3 次のコマンドを実行します。
SQL> spool /tmp/invalids.out
SQL> alter session set “_ORACLE_SCRIPT” = true;
SQL> drop user gsmadmin_internal cascade;
SQL> alter session set “_ORACLE_SCRIPT” = false;
SQL> @?/rdbms/admin/catgwm.sql
SQL> @?/rdbms/admin/dbmsgwm.sql
SQL> @?/rdbms/admin/catgwmcat.sql
SQL> @?/rdbms/admin/prvtgwm.sql
SQL> @?/rdbms/admin/utlrp.sql
SQL> spool off
4. 次の問合せを実行して、GSMADMIN_INTERNALが所有する無効なオブジェクトがないことを検証します: select owner, object_name, object_type, status from dba_objects where status='INVALID' and owner='GSMADMIN_INTERNAL' order by owner, object_name, object_type;
行が返されない場合は、GSMADMIN_INTERNALスキーマは正しい状態です。
まだ無効なオブジェクトがある場合は、オラクル・カスタマ・サポートに連絡して詳細なガイダンスを確認し、/tmp/invalids.outにあるスクリプトからの出力を提供します。
5. 最後に、特定のインスタンスで、一部のGSMADMIN_INTERNALオブジェクトがSYSスキーマに誤って作成されている場合があります。
したがって、これらのオブジェクトはGSMADMIN_INTERNALスキーマ内の正しいオブジェクトの複製であるため、削除する必要があります。
削除する必要がある、SYSが所有するオブジェクトを識別するには、SYSとして次の問合せを実行します: select object_name, object_type from dba_objects where owner = 'SYS' and (object_name, object_type) in (select object_name, object_type from dba_objects where owner = 'GSMADMIN_INTERNAL') order by object_name, object_type;
これにより、GSMADMIN_INTERNALにも存在する、SYSが所有するすべてのオブジェクトのリストが生成されます。
これらのオブジェクトは間違ったスキーマで作成されているため、SQL*Plusの適切なDROPコマンドを使用して削除する必要があります。
リストされたすべてのオブジェクトが削除されたとき、この問合せを再実行すると、0 (ゼロ)行が返されます。
6.7 GDSの問題のトラブルシューティング
GSM-45034: Connection to GDS catalog is not established
- グローバル・サービス・マネージャが実行されていない場合のGDS構成データベースへの接続
- グローバル・サービス・マネージャが実行されていない場合のカタログ・データベースへの接続
- GDS環境での
SYS_CONTEXT
パラメータの使用
6.7.1 GSM-45034: GDSカタログへの接続が確立されていません
GDSカタログ・データベースまたはそのリスナーが停止している可能性があります。GDSカタログ・データベースとそのローカル・リスナーが実行されていることを確認してください。
6.7.2 グローバル・サービス・マネージャが実行されていない場合のGDS構成データベースへの接続
複数のアドレス・リストが必要です。第1リストはリージョン・グローバル・サービス・マネージャ・リスナー専用とする必要があり、第2リストにはバディ・リージョンのグローバル・サービス・リスナーを含め、第3リストにはローカル・リスナーを含めます。
グローバル・サービス・マネージャが実行中は必ずグローバル・サービス・マネージャ経由で接続し、すべてのグローバル・サービス・マネージャ・リスナーが停止しているときのみローカル・リスナーにフェイルオーバーすることができます。
テンプレート:
(DESCRIPTION= (FAILOVER=on) (ADDRESS_LIST= (LOAD_BALANCE=ON) (ADDRESS=(global_protocol_address_information)) (ADDRESS=(global_protocol_address_information)) (ADDRESS=(global_protocol_address_information)) ) (ADDRESS_LIST= (LOAD_BALANCE=ON) (ADDRESS=(global_protocol_address_information)) (ADDRESS=(global_protocol_address_information)) (ADDRESS=(global_protocol_address_information)) ) (ADDRESS_LIST= (LOAD_BALANCE=ON) (ADDRESS=(local_protocol_address_information)) (ADDRESS=(local_protocol_address_information)) ) (CONNECT_DATA= (SERVICE_NAME=global_service_name) (REGION=region_name)))
例:
(DESCRIPTION= (FAILOVER=on) (ADDRESS_LIST= (LOAD_BALANCE=ON) (ADDRESS=(HOST=gsmhost1)(PORT=1523)(PROTOCOL=TCP)) (ADDRESS=(HOST=gsmhost2)(PORT=1523)(PROTOCOL=TCP)) (ADDRESS=(HOST=gsmhost3)(PORT=1523)(PROTOCOL=TCP)) ) (ADDRESS_LIST= (LOAD_BALANCE=ON) (ADDRESS=(HOST=gsmhost4)(PORT=1523)(PROTOCOL=TCP)) (ADDRESS=(HOST=gsmhost5)(PORT=1523)(PROTOCOL=TCP)) (ADDRESS=(HOST=gsmhost6)(PORT=1523)(PROTOCOL=TCP)) ) (ADDRESS_LIST= (LOAD_BALANCE=ON) (ADDRESS=(HOST=server1)(PORT=1521)(PROTOCOL=TCP)) ) (CONNECT_DATA= (SERVICE_NAME=sales_read_service.dbpoolora.oradbcloud) (REGION=WEST)))
ノート:
Oracle RAC対応のGDSデータベースの場合、第3のアドレス・リストにはローカルのOracle RACデータベースのSCANリスナーが含まれます。
6.7.3 グローバル・サービス・マネージャが実行されていない場合のカタログ・データベースへの接続
グローバル・サービス・マネージャが停止している場合でも、ローカル・リスナーを使用してGDSカタログ・データベースにアクセスできます。
このアクセスは、グローバル・サービス・マネージャが実行されていない状態で、DB管理またはメンテナンス・アクティビティをカタログ・データベースで行う場合に必要になることがあります。
6.7.4 GDS環境でのSYS_CONTEXT
パラメータの使用
グローバル・サービスへの接続を使用して確立されたセッションの場合、ネームスペースUSERENV
のいくつかのパラメータは、同じデータベースのローカル・サービスに接続したときに設定された値とは異なる値を持ちます。グローバル・サービスの異なる値は、データベース・プールが多くのインスタンスを持つ単一のデータベースとしてクライアントに認識されるように設定されます。
クライアントがグローバル・サービスに接続すると、GDSによって、次の項目が異なる方法でセッション・コンテキストに設定されます。
-
DB_UNIQUE_NAME
およびDB_DOMAIN
は、<gdspool_name>.<config_name>
に設定されます -
INSTANCE
は、GDS構成内で一意のシステム生成番号<inst_num>
に設定されます -
INSTANCE_NAME
は、<gdspool_name
>%<virtual_instance_num
>に設定されます -
SERVICE_NAME
は、<region_name
>%<service_name
>に設定されます
6.9 GDSログおよびトレース
この項では、ログ・ファイルの検索およびGDSコンポーネントのトレースの有効化について説明します:
- グローバル・サービス・マネージャのログ・ファイルおよびトレース・ファイルの使用
- グローバル・サービス・マネージャでのトレースの有効化および無効化
6.9.1 Global Data Servicesのログ・ファイルおよびトレース・ファイルの使用
GDSコンポーネントでロギングおよびトレースが有効になっている場合は、次の例に示すように、status gsm
コマンドを使用して、特定のグローバル・サービス・マネージャのログおよびトレース・ファイルの正確な場所を検索できます。
GDSCTL>status gsm Alias MYGSM Version 19.1.0.0.1 Start Date 22-OCT-2022 14:05:11 Trace Level support Listener Log File /scratch/oracle/diag/gsm/myhost/mygsm/alert/log.xml Listener Trace File /scratch/oracle/diag/gsm/myhost/mygsm/trace/ora_1829_ 47542149303936.trc Endpoint summary (ADDRESS=(HOST=myhost.com)(PORT=1571)(PROTOCOL=tcp)) GSMOCI Version 0.1.7 Mastership N Connected to GDS catalog Y Process Id 1833 Number of reconnections 0 Pending tasks. Total 0 Tasks in process. Total 0 Regional Mastership TRUE Total messages published 34261 Time Zone -07:00 Orphaned Buddy Regions: None GDS region east Network metrics: Region: euro RTT:34 Bandwidth:40
この例で、myhost
はグローバル・サービス・マネージャのホスト名で、mygsm
はグローバル・サービス・マネージャの名前です。
厳密にはGDSコンポーネントではありませんが、リスナー・ログ・ファイルは、いくつかの問題を解決するのに役立ちます。テキスト・ベースのリスナー・ログは、/scratch/oracle/diag/gsm/
hostname
/
gsm_name
/trace
ディレクトリにあります。ファイル名はalert_gsm*.log
になります(alert_gsm1.log
など)。
GDSコンポーネントに対してロギングおよびトレースが有効になっていない場合は、次のステップに従ってください:
-
GDSCTLのロギングを有効にします。GSMホストで、
$ORACLE_HOME/network/admin/gsm.ora
ファイルを編集し、_GDSCTL=(log=ALL)
を追加しますこれにより、GDSCTLを使用して実行されるすべてのコマンドが、GSMホストの次のログ・ファイルに記録されます。
$ORACLE_HOME/network/admin/GDSCTL.log
-
GSMプロセスのトレースを有効にします。
GDSCTL> set trace_level -gsm <gsm_name> SUPPORT
これにより、GSMの
DIAGNOSTICS_DEST
にトレース・ファイルが生成されます。たとえば、$ORACLE_BASE/diag/gsm/<hostname>/<gsm-name>/trace
です -
カタログ・データベースでトレースを有効にします。
SQL> alter system set events '10798 trace name context forever, level 7';
-
GDSプール・データベースでトレースを有効にします。
SQL> alter system set events '10798 trace name context forever, level 7';
ロギングおよびトレースを無効にするには、次のステップに従います:
-
GSMトレースをオフにします。
GDSCTL> set trace_level -gsm <gsm-name> OFF
-
gsm.oraファイルを編集し、次の行を削除して、GDSCTLコマンドのロギングをオフにします:
_GDSCTL=(log=ALL)
-
カタログ・データベースおよびGDSプール・データベースのトレースをオフにします。
SQL> alter system set events '10798 trace name context forever, level 0';
6.9.2 Global Data Servicesの高度なトラブルシューティング
Global Data Servicesを効果的にトラブルシューティングするには、GDSおよび関連コンポーネントから適切なデータを収集することが重要です。次のステップに従うと、問題のトラブルシューティングに適したデータ・プールが提供されます:
-
パッチ情報の収集は、コードのバージョン関連の問題に役立ちます:
$ cd $ORACLE_HOME/OPatch $ ./opatch lsinventory -detail > lsinventory_info.txt
-
すべてのGDS構成データを収集します。次のコマンドをスクリプトに保存して実行します:
#!/bin/bash # Stop script if any command fails set -e # Check if gdsctl is available in PATH if ! command -v gdsctl &> /dev/null then echo "gdsctl could not be found. Please make sure it is installed and available in PATH." exit 1 fi echo "Starting gdsctl session..." # Start the gdsctl session gdsctl << EOF # List GSMs, GSM status echo "GDSCTL COMAND: config" config echo "GDSCTL COMAND: config gsm -gsm <gsm name>" #config gsm -gsm <gsm name> echo "GDSCTL COMAND: gsm status" gsm status # List services echo "GDSCTL COMAND: services" services echo "GDSCTL COMAND: config service -service <service name>" #config service -service <service name> # List databases echo "GDSCTL COMAND: databases" databases # Network echo "GDSCTL COMAND: config vncr" config vncr # Validate config echo "GDSCTL COMAND: validate" validate # End of gdsctl commands EOF echo "gdsctl session completed successfully." # Exit the script exit 0
-
GSMリスナー・ステータスを収集します。
$ lsnrctl status <gsm-name>
Oracleサポートに連絡する必要がある場合は、前述のデータが役に立ちます。さらに、次のファイルも役立ちます:
GSMホストから: $ORACLE_HOME/network/admin
GSMホストから: GSMアラート・ログ・ファイル
GSMホストから: GDSCTL.log
GSMホストから: <DIAGNOSTIC_DEST>
にあるGSMトレース・ファイル
GSMホストから: lsinventory
、lsinventory_info.txt
GDSカタログ・ホストから: lsinventory
、lsinventory_info.txt