11 Oracle Shardingのトラブルシューティング

トレースの有効化、ログとトレース・ファイルの検索、および一般的な問題のトラブルシューティングを行うことができます。

次の各項では、Oracle Shardingのトラブルシューティングについて詳細に説明します。

Oracle Shardingのトレースおよびデバッグ情報

次の各項では、トレースを有効化する方法とログを見つける方法について説明します。

Oracle Shardingに対するトレースの有効化

シャード・データベース内の問題を追跡するため、PL/SQLトレースを有効にします。

完全なトレースを取得するには、次に示すようにGWM_TRACEレベルを設定します。次の文を実行すると、ただちにトレースが有効になりますが、データベースを再起動するとトレースは無効になります。

ALTER SYSTEM SET EVENTS 'immediate trace name GWM_TRACE level 7';

次の文を実行すると、永続的に動作するトレースが有効になりますが、データベースを再起動しないと起動しません。

ALTER SYSTEM SET EVENT='10798 trace name context forever, level 7' SCOPE=spfile;

前述の両方のトレースを完全に設定することをお薦めします。

Oracle Sharding環境のすべてをトレースするには、シャード・カタログとすべてのシャードでトレースを有効にする必要があります。トレースは、シャード・カタログのGDSCTLセッションまたは個々のシャードでシャード・ディレクタ(GSMとも呼びます)によって作成されたセッションのRDBMSセッション・トレース・ファイルに書き込まれます。

Oracle Shardingのアラート・ログおよびトレース・ファイルの検索場所

Oracle Sharding環境には、トレース・ファイルとアラート・ログを検索する場所がいくつかあります。

diag/rdbms/..にある標準RDBMSトレース・ファイルには、トレース出力が格納されます。

「deploy」の出力は、ジョブ・キューのトレース・ファイルdb_unique_name_jXXX_PID.trcに格納されます。

他のGDSCTLコマンドの出力は、使用される接続文字列に応じて、共有サーバー・トレース・ファイルdb_unique_name_sXXX_PID.trcまたは専用トレース・ファイルdb_unique_name_ora_PID.trcのいずれかに格納されます。

通常、カタログおよびシャードへの接続の多くに共有サーバーが使用されるため、トレースはSID_s00*.trcという名前の共有サーバー・トレース・ファイルに含まれています。

GDSCTLには、ステータスおよびエラー情報を表示できるコマンドがいくつか用意されています。

シャード・ディレクタ(GSM)のトレース・ファイルとログ・ファイルの場所を表示するには、GDSCTL STATUS GSMを使用します。

GDSCTL> status
Alias                     SHARDDIRECTOR1
Version                   18.0.0.0.0
Start Date                25-FEB-2016 07:27:39
Trace Level               support
Listener Log File         /u01/app/oracle/diag/gsm/slc05abw/sharddirector1/alert/log.xml
Listener Trace File       /u01/app/oracle/diag/gsm/slc05abw/sharddirector1/trace/
ora_10516_139939557888352.trc
Endpoint summary          (ADDRESS=(HOST=shard0)(PORT=1571)(PROTOCOL=tcp))
GSMOCI Version            2.2.1
Mastership                N
Connected to GDS catalog  Y
Process Id                10535
Number of reconnections   0
Pending tasks.     Total  0
Tasks in  process. Total  0
Regional Mastership       TRUE
Total messages published  71702
Time Zone                 +00:00
Orphaned Buddy Regions:   None
GDS region                region1
Network metrics:
   Region: region2 Network factor:0

非XMLバージョンのalert.logファイルは、次に示す/traceディレクトリにあります。

/u01/app/oracle/diag/gsm/shard-director-node/sharddirector1/trace/alert*.log

GSMのログ出力を復号化するには、次のコマンドを使用します。

GDSCTL> set _event 17 -config_only

マスター・シャード・ディレクタ(GSM)のトレース/アラート・ファイルには、すべての非同期コマンドまたはバックグラウンド・タスク(move chunk、split chunk、deploy、シャード登録、Data Guard構成、シャードDDLの実行など)のステータスとエラーが含まれています。

シャード・ディレクタのエラー・ステータスを含む保留中のAQリクエストを見つけるには、GDSCTL CONFIGを使用します。

進行中およびスケジュール済のチャンク移行を表示するには、GDSCTL CONFIG CHUNKS -show_reshardを使用します。

DDLが失敗したシャードを表示するには、GDSCTL SHOW DDL -failed_onlyを使用します。

特定のシャードのDDLエラー情報を表示するには、GDSCTL CONFIG SHARD -shard shard_nameを使用します。

シャード・データベースの一般的なエラー・パターンおよび解決

Oracle Shardingの一般的なエラーをトラブルシューティングする方法の詳細は、次の各項を参照してください。

リモート・スケジューラ・エージェントの起動時の問題

すべてのシャード・ホストでリモート・スケジューラ・エージェントの起動時に問題が発生した場合は、次の操作を試行します。

スケジューラを起動するには、各シャード・サーバーのORACLE_HOMEに移動する必要があります。

[oracle@shard2 ~]$ echo welcome | schagent -registerdatabase 192.0.2.24 8080
Agent Registration Password?
Failed to get agent Registration Info from db: No route to host

Solution: Disable firewall

service ipchains stop
service iptables stop
chkconfig ipchains off
chkconfig iptables off

シャード・ディレクタの起動時の障害

シャード・ディレクタの起動時に問題が発生した場合は、次の操作を試行します。

スケジューラを起動するには、各シャード・サーバーのORACLE_HOMEに移動する必要があります。

GDSCTL>start gsm -gsm shardDGdirector
GSM-45054: GSM error
GSM-40070: GSM is not able to establish connection to GDS catalog

GSM alert log, /u01/app/oracle/diag/gsm/shard1/sharddgdirector/trace/alert_gds.log
GSM-40112: OCI error. Code (-1). See GSMOCI trace for details.
GSM-40122: OCI Catalog Error. Code: 12514. Message: ORA-12514: TNS:listener does not 
currently know of service requested in connect descriptor
GSM-40112: OCI error. Code (-1). See GSMOCI trace for details.
2017-04-20T22:50:22.496362+05:30
Process 1 in GSM instance is down
GSM shutdown is successful
GSM shutdown is in progress
NOTE : if not message displayed in the GSM log then enable GSM trace level to 16 
while adding GSM itself.
  1. 起動に失敗した新規作成のシャード・ディレクタ(GSM)を削除します。

    GDSCTL> remove gsm -gsm shardDGdirector
    
  2. トレース・レベル16を使用してシャード・ディレクタを追加します。

    GDSCTL> add gsm -gsm shardDGdirector -listener port_num -pwd gsmcatuser_password
     -catalog hostname:port_num:shard_catalog_name
     -region region1 -trace_level 16
  3. シャード・カタログ・データベースがデフォルト以外のポート(1521以外)で実行されている場合は、リモート・リスナーを設定します。

    SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)
    (HOST=hostname)(PORT=port_num)))';

CREATE SHARDで作成されたシャードのエラー

GDSCTL CREATE SHARDコマンドで作成されたシャードのDEPLOY実行中に発生したエラーについては、次の項目を確認します。

  • シャード・ホスト上のリモート・スケジューラ・エージェントのログ

  • シャード・カタログのDBA_SCHEDULER_JOB_RUN_DETAILSビュー

  • シャード・ホスト上の$ORACLE_BASE/cfgtoollogsにあるNETCA/DBCAの出力ファイル

CREATE SHARDの使用時の問題

GDSCTL CREATE SHARDコマンドの使用時に発生した問題には、次のような解決策があります。

次のエラーを回避するには$ORACLE_BASE/oradataおよび$ORACLE_BASE/fast_recovery_areaディレクトリを作成する必要がある

GDSCTL> create shard -shardgroup primary_shardgroup -destination che -osaccount
 oracle -ospassword oracle
GSM-45029: SQL error
ORA-03710: directory does not exist or is not writeable at destination:
 $ORACLE_BASE/oradata
ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 6920
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 4730
ORA-06512: at line 1

GDSCTL>create shard -shardgroup primary_shardgroup -destination che -osaccount oracle
 -ospassword oracle
GSM-45029: SQL error
ORA-03710: directory does not exist or is not writeable at destination:
 $ORACLE_BASE/fast_recovery_area
ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 6920
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 4755
ORA-06512: at line 1

解決策: すべてのシャード・ホスト上の$ORACLE_BASEの下に/oradataとfast_recovery_areaを作成します。

権限の問題

GDSCTL>create shard -shardgroup primary_shardgroup -destination blr -credential cred
GSM-45029: SQL error
ORA-02610: Remote job failed with error:
EXTERNAL_LOG_ID="job_79126_3",
USERNAME="oracle",
STANDARD_ERROR="Launching external job failed: Login executable not setuid-root"
ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 6920
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 4596
ORA-06512: at line 1

解決策: 次のディレクトリに対するroot権限があることを確認します。

chown root $ORACLE_HOME/bin/extjob
chmod 4750 $ORACLE_HOME/bin/extjob
chown root $ORACLE_HOME/rdbms/admin/externaljob.ora
chmod 640 $ORACLE_HOME/rdbms/admin/externaljob.ora
chown root $ORACLE_HOME/bin/jssu
chmod 4750 $ORACLE_HOME/bin/jssu

CREATE SHARDでのエラー

GDSCTL>create shard -shardgroup primary_shardgroup -destination mysql02 -osaccount
 oracle -ospassword oracle
GSM-45029: SQL error
ORA-03719: Shard character set does not match catalog character set.
ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 7469
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79
ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 5770
ORA-06512: at line 1

解決策: Javaのバージョンを確認します(シャード・カタログおよびすべてのシャード・サーバーで同じである必要があります)。

rpm -qa|grep java

deployコマンドの使用時の問題

GDSCTL> deploy
GSM-45029: SQL error
ORA-29273: HTTP request failed
ORA-06512: at "SYS.DBMS_ISCHED", line 3715
ORA-06512: at "SYS.UTL_HTTP", line 1267
ORA-29276: transfer timeout
ORA-06512: at "SYS.UTL_HTTP", line 651
ORA-06512: at "SYS.UTL_HTTP", line 1257
ORA-06512: at "SYS.DBMS_ISCHED", line 3708
ORA-06512: at "SYS.DBMS_SCHEDULER", line 2609
ORA-06512: at "GSMADMIN_INTERNAL.DBMS_GSM_POOLADMIN", line 14284
ORA-06512: at line 1

解決策: $ORACLE_HOME/data/pendingjobsで正確なエラーを確認します。ウォレットに問題がある場合は、ORA-1017がスローされます。

  1. 問題のあるシャード・ホスト上で、リモート・スケジューラ・エージェントを停止します。

    schagent -stop
  2. データベース・ホーム上のウォレット・ディレクトリの名前を変更します。

    mv $ORACLE_HOME/data/wallet $ORACLE_HOME/data/wallet.old
  3. リモート・スケジューラ・エージェントを起動すると、新しいウォレット・ディレクトリが作成されます。

    schagent -start 
    schagent -status 
    echo welcome | schagent -registerdatabase 10.10.10.10 8080