ob_error はOceanBaseデータベースのエラーコード解析ツールであり、ob_error は入力したエラーコードに基づいて対応する原因と解決策を返します。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/oceanbase2つのモードで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_DIRRはコンパイルディレクトリを表し、この例では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 を再コンパイルすることで、追加が完了します。