ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Internet Directory管理者ガイド
11g リリース1(11.1.1)
B55919-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

I ディレクトリにおけるグローバリゼーション・サポート

Oracle Internet Directoryでは、グローバリゼーション・サポートを使用して、ネイティブ言語でデータを格納、処理および取得できます。これにより、Oracle Internet Directoryのユーティリティおよびエラー・メッセージが、自動的にネイティブ言語とロケールに適応されます。

この付録では、Oracle Internet Directoryで使用されるグローバリゼーション・サポートと、Oracle Internet Directory環境における様々なコンポーネントとツールに必要な環境変数NLS_LANGについて説明します。


関連項目:

グローバリゼーション・サポートを構成する前に、第3.8項「グローバリゼーション・サポート」を参照してください。


この章の項目は次のとおりです。

I.1 キャラクタ・セットおよびディレクトリの概要

コンピュータ・システムで文字を処理する場合、文字のグラフィカルな表現のかわりに数値コードを使用します。たとえば、データベースにAという文字を格納する場合、実際にはソフトウェアによって文字として解釈される数値コードが格納されます。

文字グループ(アルファベット文字、表意文字、記号、句読点および制御文字など)は、キャラクタ・セットとしてエンコードできます。エンコードされた各キャラクタ・セットでは、セット内の各文字に一意のコードを割り当てます。たとえば、ASCIIコード体系では、英語の大文字アルファベットの最初の文字の文字コードはOx4ですが、EBCDICコード体系ではOxc1です。

コンピュータ業界では多くのエンコードされたキャラクタ・セットが使用されています。これらのキャラクタ・セットは、利用可能な文字の数やタイプおよび様々な面で異なります。

データベースの作成時には、エンコードされたキャラクタ・セットを指定します。キャラクタ・セットを選択すると、特に、データベース内で表示される言語が決定されます。

ほとんどの各国語キャラクタ・セット、国際キャラクタ・セットおよびベンダー固有キャラクタ・セットの標準がサポートされています。

この項の内容は次のとおりです。

I.1.1 Unicodeの概要

日々のE-Businessの要件を満たすために必要な文字が十分に含まれている単一のキャラクタ・セットはありません。たとえば、欧州連合内のすべての言語を表すことのできる各国語キャラクタ・セットはありません。さらに、異なるキャラクタ・セットでは同じ文字が異なるコードで表されている場合もあるため、キャラクタ・セット間で競合が起きる可能性もあります。

これらの問題に対処するために、Unicodeと呼ばれるグローバルなキャラクタ・セットが開発されました。これは、句読点、発音区別符号、数学記号、技術記号、音楽記号などを含むあらゆる言語の情報を格納できる、汎用のエンコードされたキャラクタ・セットです。Unicode標準のバージョン3.2以降では、世界中のアルファベット、表意文字セットおよび記号のコレクションから、95,000を超える文字がサポートされています。これには45,000の補助文字が含まれており、そのほとんどは、まれにしか使用されないものの電子ドキュメントで表示するために必要な中国語、日本語および韓国語の文字です。

Unicodeには複数の実装標準があります。これを表I-1に示します。

表I-1 Unicodeの実装

実装 説明

UTF-8

Unicodeの可変幅8ビット・エンコーディング。1つのUnicode文字は1、2、3または4バイトになります。ヨーロッパ言語の記述に含まれる文字は、1バイトまたは2バイトで表示されます。アジア言語の記述に含まれる文字は3バイトで表示され、補助文字は4バイトで表示されます。

UCS-2

Unicodeの固定幅16ビット・エンコーディング。記述に関係なく、各文字は2バイトです。

UTF-16

Unicodeの16ビット・エンコーディング。Unicode 3.1で追加された補助文字をサポートするためのUCS-2の拡張方式です。

1つの文字は2バイトまたは4バイトです。ヨーロッパ言語およびアジア言語の記述に含まれる文字は2バイトで表示され、補助文字は4バイトで表示されます。


I.1.2 OracleとUTF-8の概要

Oracleがデータベース・キャラクタ・セットとしてUnicodeのサポートを開始したのは、Oracleデータベース・バージョン7からです。Oracle9iでは、AL32UTF8と呼ばれる新しいUTF-8キャラクタ・セットを追加しました。このデータベース・キャラクタ・セットは、最新の補助文字を含む最新バージョンのUnicode(3.2)をサポートしています。オラクル社では、Unicode標準の将来のバージョンをサポートするため、必要に応じてAL32UTF8を拡張する予定です。

I.1.3 Oracle Internet Directoryのアップグレード時のUTF8からAL32UTF8への移行

Oracle Internet Directoryでは、AL32UTF8をサポートするようになりました。Oracle Internet Directoryを10g(10.1.4.0.1)より前のバージョンからアップグレードする場合は、パフォーマンスの向上のため、ディレクトリ・データベースのキャラクタ・セットをUTF8からAL32UTF8へ変更することをお薦めします。この手順は、次のとおりです。

  1. Character Set Scanner(CSSCAN)を実行して、現在のデータベースに無効なUTF8文字が含まれていないことを確認します。

  2. CSALTERスクリプトを実行して、データベースをAL32UTF8に更新します。


関連項目:

Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』のキャラクタ・セットの移行に関する章


I.2 環境変数NLS_LANG

NLS_LANGパラメータには、languageterritoryおよびcharsetの3つのコンポーネントがあります。形式は次のとおりです。

NLS_LANG = language_territory.charset

各コンポーネントは、グローバリゼーション・サポート機能のサブセットの作用を制御します。

NLS_LANGパラメータのコンポーネントは、表I-2に示すとおりです。

表I-2 NLS_LANGパラメータのコンポーネント

コンポーネント 説明

language

Oracleメッセージ、曜日および月の名前に使用する言語などの規則を指定します。サポートしているそれぞれの言語には、American English(米語)、French(フランス語)またはGerman(ドイツ語)などの固有の名前があります。

languageを指定しない場合、デフォルトではAmerican English(米語)になります。

関連項目: 言語の全一覧は、Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

territory

デフォルトのカレンダ、照合、日付、通貨単位および数値書式などの規則を指定します。サポートしているそれぞれの地域には、America(アメリカ)、France(フランス)またはCanada(カナダ)などの固有の名前があります。

territoryを指定しない場合、デフォルト値ではAmericaになります。

関連項目: 地域の全一覧は、Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

charset

クライアント・アプリケーションが使用するキャラクタ・セット(通常はユーザー端末で使用するキャラクタ・セット)を指定します。サポートしているそれぞれのキャラクタ・セットには、WE8MSWIN1252、JA16SJISまたはAL32UTF8などの一意の頭字語があります。

関連項目: キャラクタ・セットの全一覧は、Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。


コマンドラインで、NLS_LANGを環境変数として設定できます。次は、NLS_LANGの適切な値の例です。

I.3 非AL32UTF8データベースの使用方法

Oracleディレクトリ・サーバーとデータベース・ツールは、非AL32UTF8データベース上で実行できますが、クライアント・キャラクタ・セットにある文字がすべて、文字コードが同じかどうかにかかわらず、データベース・キャラクタ・セットに含まれているかどうかを確認してください。そうでない場合、ldapadd、ldapdelete、ldapmodifyまたはldapmodifydn操作中にデータが消失する可能性があります。たとえば、シングルバイト文字のみを使用する基礎となるデータベース上で、マルチバイト・キャラクタ・セットを使用してldapadd操作を実行すると仮定します。入力するバイトのすべてがデータベースで受け入れられるわけではないため、データが消失します。

I.4 LDIFファイルでのグローバリゼーション・サポートの使用方法


関連項目:

『Oracle Fusion Middleware Oracle Identity Managementリファレンス』のLDIFファイル形式の規則と例に関する説明


属性タイプの名前は必ずASCII文字列で、マルチバイト文字は使用できません。Oracle Internet Directoryは、属性の型名にマルチバイト文字をサポートしていません。ただし、Oracle Internet Directoryでは、属性におけるマルチバイト文字(簡体字中国語(ZHS16GBK)のキャラクタ・セットなど)の使用をサポートしています。

属性値は、異なる方法でエンコードでき、この方法でエンコードされた値は、Oracle Internet Directoryのツールで正しく解釈できます。次の項で説明する2つのシナリオがあります。

I.4.1 ASCII文字列のみを含むLDIFファイル

この例では、属性値の文字列もASCII文字列です。

すべてのツールがデフォルトでUTF-8キャラクタ・セットを使用しており、ASCIIはUTF-8の正しいサブセットであるため、いずれのツールもこのファイルを解釈できます。キーボードでASCII文字列のみの値を入力する場合も同様です。

I.4.2 UTF-8エンコーディング文字列を含むLDIFファイル

この例では、属性値の文字列もUTF-8文字列です。

デフォルトでは、すべてのツールでUTF8キャラクタ・セットが使用されるため、これらのファイルはどのツールでも解析できます。キーボードでUTF-8文字列の値を入力する場合も同様です。

このようなファイルでは、一部の文字がマルチバイトの可能性があります。マルチバイト・キャラクタ文字列は、属性値としてLDIFファイルで使用することも、キーボードで入力することもできます。それらの文字列は、ネイティブ・キャラクタ・セットまたはUTF-8でエンコードできます。さらに、ネイティブ文字列またはUTF-8文字列のBASE64エンコーディング形式も可能です。

次のケースを説明します。

ディレクトリ・サーバーはUTF-8エンコーディング文字列のみを理解し、UTF-8エンコーディング文字列を受信することを想定しているため、ケース1、3および4は、LDAPサーバーに送信する前に、UTF-8文字列に変換しておく必要があります。

I.4.2.1 ケース1: ネイティブ文字列(非UTF-8)

NLS_LANGが設定されていない場合、コマンドラインLDAPツールldapaddldapaddmtldapbindldapcompareldapmoddnldapmodldapdeleteおよびldapsearch-E character_set引数を使用します。NLS_LANGが設定されている場合、-E character_set引数を使用する必要はありません。

この例では、簡体字中国語のネイティブ文字列をUTF-8に変換しています。ベース識別名は、簡体字中国語で記述できます。

ldapsearch -h my_host -D "cn=orcladmin" -q -p 3060 -E ".ZHS16GBK" -b base_DN \
   -s base  "objectclass=*"

encode="character_set"引数をコマンドライン・バルク・ツールbulkloadbulkmodifybulkdeleteおよびldifwriteで使用します(ここで、character_setはLDIFファイルで使用されているキャラクタ・セットです)。NLS_LANGをディレクトリのデータベースで使用されているキャラクタ・セットに設定します。

I.4.2.2 ケース2: UTF-8文字列

変換は不要です。

I.4.2.3 ケース3: BASE64でエンコードされたUTF-8文字列

NLS_LANGが設定されていない場合でも、LDAPツールで-E character_set引数を使用する必要はありません。

コマンドライン・ツールでencode=character_set引数を使用する必要はありません。Oracle Internet Directoryツールは、BASE64でエンコードされたUTF-8文字列をUTF-8文字列に自動的にデコードします。

I.4.2.4 ケース4: BASE64でエンコードされたネイティブ文字列

NLS_LANGが設定されていない場合、コマンドラインLDAPツールldapaddldapaddmtldapbindldapcompareldapmoddnldapmodldapdeleteおよびldapsearch-E character_set引数を使用します。NLS_LANGが設定されている場合、-E character_set引数を使用する必要はありません。

encode="character_set"引数をコマンドライン・バルク・ツールbulkloadbulkmodifybulkdeleteおよびldifwriteで使用します(ここで、character_setはLDIFファイルで使用されているキャラクタ・セットです)。NLS_LANGをディレクトリのデータベースで使用されているキャラクタ・セットに設定します。

Oracle Internet Directoryのツールは、BASE64でエンコードされたネイティブ文字列を、単純なネイティブ文字列に自動的にデコードします。その後、ネイティブ文字列は対応するUTF-8文字列に変換されます。


注意:

1つの入力ファイルで使用できるキャラクタ・セットは1つのみです。


I.5 コマンドラインLDAPツールでのグローバリゼーション・サポートの使用方法

Oracle Internet Directoryのコマンドライン・ツールは、キーボード入力またはLDIFファイル入力を次の方法で読み取ります。

LDIFファイルまたはキーボードからの入力として使用されているキャラクタ・セットがUTF-8以外の場合、コマンドライン・ツールは、LDAPサーバーに送信する前に、その入力をUTF-8形式に変換する必要があります。

コマンドライン・ツールで入力をUTF-8に変換するには、-E character_set引数を、任意のコマンドラインLDAPツールで指定します。encode="character_set"引数を、bulkloadbulkmodifybulkdeleteおよびldifwriteで指定します。

この項の項目は次のとおりです。

I.5.1 各ツールを使用するときの-E引数の指定

-E引数で指定しないかぎり、クライアント・ツールでは常にキャラクタ・セットがUTF-8(Oracleキャラクタ・セット名はAL32UTF8)であるとみなされます。-E引数が指定されていると、BASE64でエンコードされた値はデコードされ、次にデコードされたバッファがUTF-8に変換されます。たとえば、-E ".ZHS16GBK"と指定すると、デコードされたバッファは、ディレクトリ・サーバーに送信される前に、簡体字中国語(GBK)からUnicode UTF-8に変換されます。

-E引数を指定すると、-E引数で指定したキャラクタ・セット(-E ".character_set")がAL32UTF8キャラクタ・セットに正しく変換されます。

コマンドライン・ツールは、-E引数を使用して、-E引数に指定されたキャラクタ・セットで入力を処理します。出力は、環境変数NLS_LANGで指定されたキャラクタ・セットで表示します。

たとえば、簡体字中国語のキャラクタ・セット(ZHS16GBK)でエンコードされたLDIFファイルのエントリを、ldapaddを使用して追加するには、次のように入力します。

ldapadd -h myhost -p 3060 -E ".ZHS16GBK" -D cn=orcladmin -q -f my_ldif_file

この例では、ディレクトリ・サーバーに送信される前に、文字がldapaddツールによって".ZHS16GBK"(簡体字中国語のキャラクタ・セット)から".AL32UTF8"に変換されます。

I.5.2 例: コマンドラインLDAPツールでの-E引数の使用方法

表I-3に、-E引数を各コマンドライン・ツールで正しく使用する方法の追加例を示します。各例のコマンドにより、値".ZHS16GBK"で指定されている簡体字中国語からAL32UTF8にデータが変換されます。たとえば、各コマンドで、-Dオプションの値、および-qが指定された場合にプロンプトで入力するパスワードはGBKです。-E引数を指定すると、これらがUTF-8に変換されます。

表I-3の例には、.ZHS16GBKキャラクタ・セットに属している実際の文字は含まれていないことに注意してください。したがって、これらの例は-E引数の指定なしで動作します。ただし、引数の値に.ZHS16GBKキャラクタ・セット内の実際の文字が含まれる場合は、-E引数を使用する必要があります。


関連項目:

各コマンドライン・ツールの構文と使用方法は、『Oracle Fusion Middleware Oracle Identity Managementリファレンス』のOracle Internet Directory管理ツールに関する説明を参照


表I-3 例: コマンドライン・ツールでの-E引数の使用方法

ツール

ldapbind

ldapbind -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q

ldapsearch

ldapsearch -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q

ldapadd

ldapadd -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q

ldapaddmt

ldapaddmt -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q

ldapmodify

ldapmodify -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q

ldapmodifymt

ldapmodifymt -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q

ldapdelete

ldapdelete -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q

ldapcompare

ldapcompare -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" \
   -b "ou=Construction,ou=Manufacturing,o=example,c=us" \
   -a title -v manager -q

ldapmoddn

ldapmoddn -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" \
   -b "cn=Frank Smith,ou=Construction,ou=Manufacturing,c=us, o=example"\
   -N "ou=Contracting,ou=Manufacturing,o=example,c=us" -r -q

I.6 クライアント環境におけるNLS_LANGの設定

クライアントで必要な出力がUTF-8の場合は、環境変数NLS_LANGを設定する必要はありません。この場合、環境変数NLS_LANGのキャラクタ・セット・コンポーネントはデフォルトでAL32UTF8に設定され、クライアントからサーバーへの入力の過程およびサーバーからクライアントへの出力の過程で、キャラクタ・セット変換の必要はありません。

クライアントで必要な出力がUTF-8以外の場合は、環境変数NLS_LANGを設定する必要があります。この設定によって、AL32UTF8キャラクタ・セットからクライアントが要求したキャラクタ・セットに正しく変換されます。

たとえば、環境変数NLS_LANGが簡体字中国語のキャラクタ・セットに設定されている場合、コマンドライン・ツールは、そのキャラクタ・セットで出力を表示します。そうでない場合、出力にはデフォルトでAL32UTF8キャラクタ・セットが使用されます。


注意:

Microsoft Windowsを使用している場合、サーバーの起動後にコマンドライン・ツールを使用するには、MS-DOSウィンドウでNLS_LANGをリセットする必要があります。MS-DOSセッションのコード・ページに一致するキャラクタ・セットを設定してください。AL32UTF8は使用できません。MS-DOSセッションでコマンドライン・ツールに使用するキャラクタ・セットの詳細は、Oracle Databaseインストレーション・ガイドfor Microsoft Windowsを参照してください。

Oracle Internet Directoryとともに、事前にインストールされたOracle Databaseを使用している場合、データベース・キャラクタ・セットもAL32UTF8に設定する必要があります。

関連項目: Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』、およびOracle Databaseインストレーション・ガイドfor Microsoft Windows

レジストリのNLS_LANGパラメータの値を変更しないように注意してください。


I.7 バルク・ツールでのグローバリゼーション・サポートの使用方法

Oracle Internet Directoryでは、LDIFファイルのテキスト・データの読取りや書込みが、LDAP標準で指定されているように、常にUTF-8エンコーディングで行われます。

この項では、各バルク・ツールで使用する引数の例を示します。内容は次のとおりです。

I.7.1 bulkloadでのグローバリゼーション・サポートの使用方法

コマンドに引数encode="character_set"を追加します。この入力のLDIFファイルは"character_set"でエンコードされています。

たとえば、ORACLE_INSTANCEが設定されているのを確認してから、次を入力します。

bulkload connect="connect_string" \ 
   encode=".ZHS16GBK" check="TRUE" generate="TRUE" file="my_ldif_file"

I.7.2 ldifwriteでのグローバリゼーション・サポートの使用方法

ldifwriteユーティリティは常に、マルチバイト文字列に対してBASE64でエンコードされた値を書き出します。

BASE64エンコーディングは、ディレクトリ・サーバーに格納されているUTF-8文字列に対して行うか、ldifwriteの実行時に環境変数NLS_LANGの設定で指定されたネイティブ文字列に対して行うことができます。

次に例を示します。

ldifwrite connect="connect_string" baseDN="baseDN" ldiffile="output_file"    

環境変数NLS_LANGが未設定の場合またはlanguage_territory.AL32UTF8に設定されている場合、この例では、出力のLDIFファイルにマルチバイト文字のBASE64でエンコードされたUTF-8文字列が含まれます。

このLDIFファイルのディレクトリへのロードの詳細は、「ケース3: BASE64でエンコードされたUTF-8文字列」を参照してください。

環境変数NLS_LANGがAL32UTF8以外のキャラクタ・セット(たとえば、".ZHS16GBK")に設定されている場合は、出力のLDIFファイルには、簡体字中国語(GBK)文字列のBASE64でエンコードされた値が含まれます。

このLDIFファイルのディレクトリへのロードの詳細は、「ケース4: BASE64でエンコードされたネイティブ文字列」を参照してください。

I.7.3 bulkdeleteでのグローバリゼーション・サポートの使用方法

引数encode="character_set"をコマンドに追加します。

次に例を示します。

bulkdelete connect="connect_string"  encode=".ZHS16GBK" \
    baseDN="ou=manufacturing,o=example,c=us"

この例では、-baseオプションの値に、ZHS16GBKネイティブ・キャラクタ・セット(簡体字中国語)を使用できます。

I.7.4 bulkmodifyでのグローバリゼーション・サポートの使用方法

引数encode="character_set"をコマンドに追加します。

次に例を示します。

bulkmodify connect="my_service_name" \  
            encode=".ZHS16GBK" baseDN="ou=manufacturing,o=example,c=us" \
            replace=TRUE" value=Foreman filter="objectclass=*"

この例では、basednvalueおよびfilterの各引数の値を簡体字中国語GBKキャラクタ・セットを使用して指定できます。