QUESTION(SQ0411054)
WindowsとLinuxの間でSQL Remote レプリケーションを実行すると同期に失敗する
ANSWER
WindowsやLinuxなど、文字セットの異なるプラットホーム間で SQL Remote レプリケーションを実行すると、「SQL
文が失敗しました」とのエラーが発生し、同期に失敗することがあります。
この現象は、SQL文に含まれるマルチバイト文字が文字化けを起こすために発生します。特にテーブル名やカラム名に日本語を使用している場合は注意が必要です。
この場合、Message Agentの文字セットを適切に設定することにより正常に同期ができるようになります。
データベース・サーバは、デフォルトで文字セット変換がオンになっており、データベースとクライアント間で文字セットが一致しない場合、データベース・サーバは要求された文字セットに合うように文字セットの変換を行います。
しかしMessage
Agentは、接続するデータベースの文字セット(データベース・サーバの文字セットではなく)を明示的に指定する必要があります。文字セットはCharSet
接続パラメータ [CS]を使用して設定します。
文字セットをシフトJISにする場合:
dbremote-c"dbn=remotedb;charset=cp932;uid=dba;pwd=sql"
データベース・サーバの文字セットは、SQLLOCALE環境変数(ASA8の場合)、ASCHARSET環境変数(ASA9の場合)で設定できますが、
Message Agentはこの環境変数の影響を受けません。接続パラメータで別途指定する必要があります。Message
Agentはデフォルトではプラットホームの文字セットで起動します。
以下に日本国内で一般的に使われる文字セット・ラベルを示します(マニュアルより抜粋)。
文字セット・ラベル |
IANA ラベル |
説明 |
cp932 |
windows-31j |
Microsoft CP932 = Win31J-DBCS |
sjis |
shift_jis |
シフト JIS (拡張なし) |
eucjis |
euc-jp |
Sun EUC JIS エンコード |
utf8 |
utf-8 |
文字セットとして扱われる UTF-8
|
|