ob_error は、OceanBaseデータベースのエラーコード解析ツールです。入力されたエラーコードに対して、対応する原因と解決策を返します。ob_error を利用すれば、ドキュメントを検索することなく基本的なエラー情報を取得できます。
ob_errorのインストール
YUMコマンドによるインストール
YUMコマンドを使用してツール統合パッケージ(OceanBase Utils)を直接インストールし、ob_errorを使用できます。
yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
yum install oceanbase-ce-utils
OceanBase Utilsインストールパッケージ
ツール統合パッケージ(OceanBase Utils)をインストールすることで、ob_errorを使用できます。
OceanBaseソフトウェアダウンロードセンター ページにアクセスし、
OceanBase Utilsで検索して、必要なバージョンをローカルにダウンロードします。ファイルディレクトリで以下のコマンドを実行してOceanBase Utilsをインストールします。
rpm -ivh oceanbase-ce-utils-<version>ob_errorのみが必要な場合は、rpm2cpioコマンドを使用してob_errorを取得できます。rpm2cpio oceanbase-ce-utils-<version> | cpio -idmv ./usr/bin/ob_error cp usr/bin/ob_error /usr/local/bin
ソースコードからのコンパイル
OceanBaseデータベースのソースコードから自らコンパイルできます。
OceanBaseデータベース のオープンソースコードをローカルにクローンします。
git clone https://github.com/oceanbase/oceanbase二つのモードでob_errorをコンパイルします。
Debugモード
bash build.sh debug --init cd build_debug make ob_error cp tools/ob_error/src/ob_error /usr/local/binob_errorのコンパイル生成物は、デフォルトでDEBUG_BUILD_DIR/tools/ob_error/src/ob_errorに保存されます。ここで、DEBUG_BUILD_DIRはコンパイルディレクトリを表し、この例ではbuild_debugです。Releaseモード
bash build.sh release --init cd build_release make ob_error cp tools/ob_error/src/ob_error /usr/local/binob_errorのコンパイル生成物は、デフォルトでRELEASE_BUILD_DIR/tools/ob_error/src/ob_errorに保存されます。ここで、RELEASE_BUILD_DIRはコンパイルディレクトリを表し、この例ではbuild_releaseです。
使用方法
汎用クエリ形式
エラーコードを入力するだけで、OS、Oracleモード、MySQLモード、およびOceanBaseデータベースに存在するエラーに対応するエラーメッセージを取得できます。例:
$ob_error 4001
OceanBase:
OceanBase Error Code: OB_OBJ_TYPE_ERROR(-4001)
Message: Object type error
Cause: Internal Error
Solution: Contact OceanBase Support
Oracle:
Oracle Error Code: OBE-04001
Message: sequence parameter must be an integer
Related OceanBase Error Code:
OB_ERR_SEQ_OPTION_MUST_BE_INTEGER(-4317)
パターン指定クエリ
プレフィックス(エラーカテゴリとも呼ばれる)を追加することで、特定のパターンのエラーコード情報を検索することもできます。
説明
Oracleモードのエラーコードを検索する場合、指定できるエラーカテゴリはoerrツールのfacility nameと一致します。
エラーカテゴリが
myの場合、エラーコードがMySQLモードのエラーでない場合、OceanBaseデータベースのエラーメッセージが返されます(入力したエラーコードがOceanBaseデータベースに存在する場合)。そうでない場合は、MySQLモードのエラーメッセージが返されます。$ob_error my 4000 OceanBase: OceanBase Error Code: OB_ERROR(-4000) Message: Common error Cause: Internal Error Solution: Contact OceanBase Support $ob_error my 1210 MySQL: MySQL Error Code: 1210 (HY000) Message: Invalid argument Message: Miss argument Message: Incorrect arguments to ESCAPE Related OceanBase Error Code: OB_INVALID_ARGUMENT(-4002) OB_MISS_ARGUMENT(-4277) INCORRECT_ARGUMENTS_TO_ESCAPE(-5832)エラーカテゴリが
oraまたはplsの場合、入力したエラーコードがOracleモードに存在する場合、Oracleモードのエラーメッセージが返されます。$ob_error ora 51 Oracle: Oracle Error Code: OBE-00051 Message: timeout occurred while waiting for a resource Related OceanBase Error Code: OB_ERR_TIMEOUT_ON_RESOURCE(-5848)もう一つの特殊なケースとして、
-aオプションを使用し、入力したエラーコードが対応するモードに存在する場合、OceanBaseデータベースのエラーメッセージとOracleモードのエラーメッセージが返されます。$ob_error ora 600 -a 5727 OceanBase: OceanBase Error Code: OB_ERR_PROXY_REROUTE(-5727) Message: SQL request should be rerouted Cause: Internal Error Solution: Contact OceanBase Support Oracle: Oracle Error Code: OBE-00600 Message: internal error code, arguments: -5727, SQL request should be rerouted Related OceanBase Error Code: OB_ERR_PROXY_REROUTE(-5727)説明
-aオプションは、変数を含むOBE-00600エラーを特定するために使用されます。OBE-00600はOracleの内部エラーです。
詳細な例
より詳細なテストケースについては、expect_resultを参照してください。
さらに、--help コマンドを使用して、完全なユーザーマニュアルを入手することもできます。
ob_error --help
エラー原因と解決策の追加方法
説明
このセクションは開発者の参考用です。
このセクションでは、エラー原因と解決策を追加する方法を例を用いて説明します。
例
src/oberror_errno.def のエラーコード 4000 は次のように定義されています:
DEFINE_ERROR(OB_ERROR, -4000, -1, "HY000", "Common error");
原因と解決策の情報を追加したい場合、定義を次のように変更できます:
DEFINE_ERROR(OB_ERROR, -4000, -1, "HY000", "Common error", "CAUSE", "SOLUTION");
コマンドを実行して src/lib/ob_errno.h、src/share/ob_errno.h、src/share/ob_errno.cpp を再生成します:
cd src/share
./gen_errno.pl
その後、BUILD_DIR 内で ob_error を再コンパイルすることで、追加が完了します。