
Debian Linux に Oracle XE をインストールし、文字セットを AL32UTF8 に設定しました。Windows からデータベースに接続するクライアント アプリケーションは複数あり、ロケールは英語ではなくフランス語などです。これらのアプリケーションがデータベースに入力するすべてのクライアント データは問題なく、何も変換されず、フランス語のテキスト データも正しく表示されます。
しかし、監査テーブル内のテキストに英語以外の文字が含まれている場合、テキストは「??????」のように見えます。これは、監査レコードが異なるロケールのデータベースに保存され、クライアントのグローバリゼーション/ロケール設定に依存しないためだと考えられます。
このグローバル化の問題はどのように解決できるでしょうか? よろしくお願いします!
答え1
おそらく、監査データはフランス語で正しく保存されているが、クライアントがそれをサポートしていないため、Oracle クライアントがフランス語の文字を ???? に翻訳しているということになります。
- クライアント/環境の NLS_LANG は何ですか? (たとえば、自分の環境から)
- データが sys.aud$ テーブルに正しく保存されているかどうかを確認するには、次のコマンドを実行します。
SELECT username, ascii(username) from DBA_AUDIT_TRAIL;
--オプションでWHERE句を使用して、疑わしい行をいくつかに制限する
すべての ??? 文字が同じ ASCII コードを持つ場合、Oracle は ??? を保存します。すべての ??? が異なる ASCII コードを持つ場合、Oracle はフランス語の文字を保存しますが、クライアントの NLS_LANG 構成ではフランス語の文字がサポートされません。
トラブルシューティングに役立つことを願っています...