TB/TB-2007-03-PGCHARS

出典: ScalixWikiJP

Scalix Wiki -> TB -> TB/TB-2007-03-PGCHARS

このページは[Scalix Wiki - TB/TB-2007-03-PGCHARS (米国サイト)]の翻訳です。

問題

PlatformデータベースにUnicode文字を挿入しようとするときに生じる既知の問題があります。 UTF-8の文字がメッセージで使われているときにこのエラーが生じます。 しかし、使用しているデータベースの文字エンコーディングがその文字を含んでいなかったり、適切な文字コードの変換を提供していなかったりします。 このエラーが生じるとき、scalix-api.logファイルに次のようなエントリを生成します。

WARN [RestServlet.sendError:28] Sending error
M00005 full folder sync failed
Message:java.sql.BatchUpdateException: Batch entry 1,198 insert into message
values ...

PostgreSQLサーバでロギングが有効であれば(Linuxディストリビューションによってはデフォルトではロギングが無効になっています)、そのログには次の行に似たエントリを含みます。

ERROR: character 0xe28099 of encoding "UTF8" has no equivalent in "LATIN1"

この問題はSWAのクライアントで読み込みの時間が遅くなるという結果をもたらします。 また、ユーザがSWAやMobileクライアントにログインできなくなることもあります。 より詳しい情報はbug 14282に書いてあります。

解決

この問題を修正するために、文字エンコーディングをUnicodeにしてデータベースを作り直す必要があります。 これを行うために次の二つのスクリプトを提供しています。

両方のスクリプトをディレクトリ /opt/scalix-postgres/bin/ に置き、rootとして実行します。 このスクリプトは引数を付ける必要はありません。 sxpsql-checkencodingはScalixデータベースで使われている現在の文字エンコーディングを報告します。

[root@test9]# /opt/scalix-postgres/bin/sxpsql-checkencoding
SQL_ASCII

これが'UNICODE'であれば問題なく、sxpsql-recreatedbを実行する必要はありません。 他の文字エンコーディング(例えば SQL_ASCIIやLATIN1)であればsxpsql-recreatedbを次に実行する必要があります。 Unicode文字エンコーディングでデータベースを再作成するためにsxpsql-recreatedbを実行します。 このスクリプトはScalix Tomcatサービスが実行中であればサービスを停止させ、正しいエンコーディングでScalixデータベースを再作成し、Tomcatを再起動させます。

[root@test9]# /opt/scalix-postgres/bin/sxpsql-recreatedb
Stopping Tomcat service (test9): [ OK ] DROP DATABASE CREATE DATABASE Starting Tomcat service (test9): [ OK ]

スクリプトの実行後に、データベースの内容は新しいエンコーディングで再構築され始めます。