Oracle Fusion Middleware Oracle Internet Directory管理者ガイド 11g リリース1(11.1.1) B55919-02 |
|
前 |
次 |
Oracle Internet Directoryでは、グローバリゼーション・サポートを使用して、ネイティブ言語でデータを格納、処理および取得できます。これにより、Oracle Internet Directoryのユーティリティおよびエラー・メッセージが、自動的にネイティブ言語とロケールに適応されます。
この付録では、Oracle Internet Directoryで使用されるグローバリゼーション・サポートと、Oracle Internet Directory環境における様々なコンポーネントとツールに必要な環境変数NLS_LANG
について説明します。
この章の項目は次のとおりです。
コンピュータ・システムで文字を処理する場合、文字のグラフィカルな表現のかわりに数値コードを使用します。たとえば、データベースにAという文字を格納する場合、実際にはソフトウェアによって文字として解釈される数値コードが格納されます。
文字グループ(アルファベット文字、表意文字、記号、句読点および制御文字など)は、キャラクタ・セットとしてエンコードできます。エンコードされた各キャラクタ・セットでは、セット内の各文字に一意のコードを割り当てます。たとえば、ASCIIコード体系では、英語の大文字アルファベットの最初の文字の文字コードはOx4ですが、EBCDICコード体系ではOxc1です。
コンピュータ業界では多くのエンコードされたキャラクタ・セットが使用されています。これらのキャラクタ・セットは、利用可能な文字の数やタイプおよび様々な面で異なります。
データベースの作成時には、エンコードされたキャラクタ・セットを指定します。キャラクタ・セットを選択すると、特に、データベース内で表示される言語が決定されます。
ほとんどの各国語キャラクタ・セット、国際キャラクタ・セットおよびベンダー固有キャラクタ・セットの標準がサポートされています。
この項の項目は次のとおりです。
日々の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バイトで表示されます。 |
Oracleがデータベース・キャラクタ・セットとしてUnicodeのサポートを開始したのは、Oracleデータベース・バージョン7からです。Oracle9iでは、AL32UTF8と呼ばれる新しいUTF-8キャラクタ・セットを追加しました。このデータベース・キャラクタ・セットは、最新の補助文字を含む最新バージョンのUnicode(3.2)をサポートしています。オラクル社では、Unicode標準の将来のバージョンをサポートするため、必要に応じてAL32UTF8を拡張する予定です。
Oracle Internet Directoryでは、AL32UTF8をサポートするようになりました。Oracle Internet Directoryを10g(10.1.4.0.1)より前のバージョンからアップグレードする場合は、パフォーマンスの向上のため、ディレクトリ・データベースのキャラクタ・セットをUTF8からAL32UTF8へ変更することをお薦めします。この手順は、次のとおりです。
Character Set Scanner(CSSCAN)を実行して、現在のデータベースに無効なUTF8文字が含まれていないことを確認します。
CSALTERスクリプトを実行して、データベースをAL32UTF8に更新します。
関連項目: Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』のキャラクタ・セットの移行に関する章 |
NLS_LANG
パラメータには、language
、territory
およびcharset
の3つのコンポーネントがあります。形式は次のとおりです。
NLS_LANG = language_territory.charset
各コンポーネントは、グローバリゼーション・サポート機能のサブセットの作用を制御します。
NLS_LANGパラメータのコンポーネントは、表I-2に示すとおりです。
表I-2 NLS_LANGパラメータのコンポーネント
コンポーネント | 説明 |
---|---|
|
Oracleメッセージ、曜日および月の名前に使用する言語などの規則を指定します。サポートしているそれぞれの言語には、American English(米語)、French(フランス語)またはGerman(ドイツ語)などの固有の名前があります。 languageを指定しない場合、デフォルトではAmerican English(米語)になります。 関連項目: 言語の全一覧は、Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
|
デフォルトのカレンダ、照合、日付、通貨単位および数値書式などの規則を指定します。サポートしているそれぞれの地域には、America(アメリカ)、France(フランス)またはCanada(カナダ)などの固有の名前があります。 territoryを指定しない場合、デフォルト値ではAmericaになります。 関連項目: 地域の全一覧は、Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
|
クライアント・アプリケーションが使用するキャラクタ・セット(通常はユーザー端末で使用するキャラクタ・セット)を指定します。サポートしているそれぞれのキャラクタ・セットには、WE8MSWIN1252、JA16SJISまたはAL32UTF8などの一意の頭字語があります。 関連項目: キャラクタ・セットの全一覧は、Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
コマンドラインで、NLS_LANG
を環境変数として設定できます。次は、NLS_LANG
の適切な値の例です。
AMERICAN_AMERICA.AL32UTF8
JAPANESE_JAPAN.AL32UTF8
Oracleディレクトリ・サーバーとデータベース・ツールは、非AL32UTF8データベース上で実行できますが、クライアント・キャラクタ・セットにある文字がすべて、文字コードが同じかどうかにかかわらず、データベース・キャラクタ・セットに含まれているかどうかを確認してください。そうでない場合、ldapadd、ldapdelete、ldapmodifyまたはldapmodifydn操作中にデータが消失する可能性があります。たとえば、シングルバイト文字のみを使用する基礎となるデータベース上で、マルチバイト・キャラクタ・セットを使用してldapadd操作を実行すると仮定します。入力するバイトのすべてがデータベースで受け入れられるわけではないため、データが消失します。
関連項目: Oracle Fusion Middleware Oracle Identity ManagementリファレンスのLDIFファイル形式の規則と例に関する説明 |
属性タイプの名前は必ずASCII文字列で、マルチバイト文字は使用できません。Oracle Internet Directoryは、属性の型名にマルチバイト文字をサポートしていません。ただし、Oracle Internet Directoryでは、属性値におけるマルチバイト文字(簡体字中国語(ZHS16GBK)のキャラクタ・セットなど)の使用をサポートしています。
属性値は、異なる方法でエンコードでき、この方法でエンコードされた値は、Oracle Internet Directoryのツールで正しく解釈できます。2つのシナリオがあります:
この例では、属性値の文字列もASCII文字列です。
すべてのツールがデフォルトでUTF-8キャラクタ・セットを使用しており、ASCIIはUTF-8の正しいサブセットであるため、いずれのツールもこのファイルを解釈できます。キーボードでASCII文字列のみの値を入力する場合も同様です。
この例では、属性値の文字列もUTF-8文字列です。
デフォルトでは、すべてのツールでUTF8キャラクタ・セットが使用されるため、これらのファイルはどのツールでも解析できます。キーボードでUTF-8文字列の値を入力する場合も同様です。
このようなファイルでは、一部の文字がマルチバイトの可能性があります。マルチバイト・キャラクタ文字列は、属性値としてLDIFファイルで使用することも、キーボードで入力することもできます。それらの文字列は、ネイティブ・キャラクタ・セットまたはUTF-8でエンコードできます。さらに、ネイティブ文字列またはUTF-8文字列のBASE64エンコーディング形式も可能です。
次のケースを説明します。
ディレクトリ・サーバーはUTF-8エンコーディング文字列のみを理解し、UTF-8エンコーディング文字列を受信することを想定しているため、ケース1、3および4は、LDAPサーバーに送信する前に、UTF-8文字列に変換しておく必要があります。
NLS_LANG
が設定されていない場合、コマンドラインLDAPツールldapadd
、ldapaddmt
、ldapbind
、ldapcompare
、ldapmoddn
、ldapmod
、ldapdelete
および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
"引数をコマンドライン・バルク・ツールbulkload
、bulkmodify
、bulkdelete
およびldifwrite
で使用します(ここで、character_set
はLDIFファイルで使用されているキャラクタ・セットです)。NLS_LANG
をディレクトリのデータベースで使用されているキャラクタ・セットに設定します。
変換は不要です。
NLS_LANG
が設定されていない場合でも、LDAPツールで-E
character_set
引数を使用する必要はありません。
コマンドライン・ツールでencode=
character_set
引数を使用する必要はありません。Oracle Internet Directoryツールは、BASE64でエンコードされたUTF-8文字列をUTF-8文字列に自動的にデコードします。
NLS_LANG
が設定されていない場合、コマンドラインLDAPツールldapadd
、ldapaddmt
、ldapbind
、ldapcompare
、ldapmoddn
、ldapmod
、ldapdelete
およびldapsearch
で-E
character_set
引数を使用します。NLS_LANG
が設定されている場合、-E
character_set
引数を使用する必要はありません。
encode="
character_set
"引数をコマンドライン・バルク・ツールbulkload
、bulkmodify
、bulkdelete
およびldifwrite
で使用します(ここで、character_set
はLDIFファイルで使用されているキャラクタ・セットです)。NLS_LANG
をディレクトリのデータベースで使用されているキャラクタ・セットに設定します。
Oracle Internet Directoryのツールは、BASE64でエンコードされたネイティブ文字列を、単純なネイティブ文字列に自動的にデコードします。その後、ネイティブ文字列は対応するUTF-8文字列に変換されます。
注意: 1つの入力ファイルで使用できるキャラクタ・セットは1つのみです。 |
Oracle Internet Directoryのコマンドライン・ツールは、キーボード入力またはLDIFファイル入力を次の方法で読み取ります。
ASCII文字のみ
非ASCII入力(ネイティブ言語キャラクタ・セット)
UTF-8またはネイティブ文字列のBASE64でエンコードされた値(LDIFファイル入力のみ)
LDIFファイルまたはキーボードからの入力として使用されているキャラクタ・セットがUTF-8以外の場合、コマンドライン・ツールは、LDAPサーバーに送信する前に、その入力をUTF-8形式に変換する必要があります。
コマンドライン・ツールで入力をUTF-8に変換するには、-E
character_set
引数を、任意のコマンドラインLDAPツールで指定します。encode=
"character_set"引数を、bulkload
、bulkmodify
、bulkdelete
およびldifwrite
で指定します。
この項の項目は次のとおりです。
-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-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 -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
ldapsearch -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
ldapadd -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
ldapaddmt -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
ldapmodify -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
ldapmodifymt -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
ldapdelete -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
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 -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 |
クライアントで必要な出力が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 レジストリの |
Oracle Internet Directoryでは、LDIFファイルのテキスト・データの読取りや書込みが、LDAP標準で指定されているように、常にUTF-8エンコーディングで行われます。
この項では、次の各バルク・ツールに使用する引数の例を紹介します。
bulkmodifyでのグローバリゼーション・サポートの使用方法
関連項目: 各バルク・ツールの引数のリストは、Oracle Fusion Middleware Oracle Identity ManagementリファレンスのOracle Internet Directory管理ツールに関する説明を参照 |
コマンドに引数encode="
character_set"
を追加します。この入力のLDIFファイルは"character_set"でエンコードされています。
たとえば、ORACLE_INSTANCEが設定されているのを確認してから、次を入力します。
bulkload connect="connect_string" \
encode=".ZHS16GBK" check="TRUE" generate="TRUE" file="my_ldif_file"
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でエンコードされたネイティブ文字列」を参照してください。
引数encode="
character_set"
をコマンドに追加します。
次に例を示します。
bulkdelete connect="connect_string" encode=".ZHS16GBK" \
baseDN="ou=manufacturing,o=example,c=us"
この例では、-base
オプションの値に、ZHS16GBK
ネイティブ・キャラクタ・セット(簡体字中国語)を使用できます。
引数encode="
character_set"
をコマンドに追加します。
次に例を示します。
bulkmodify connect="my_service_name" \ encode=".ZHS16GBK" baseDN="ou=manufacturing,o=example,c=us" \ replace=TRUE" value=Foreman filter="objectclass=*"
この例では、basedn
、value
およびfilter
の各引数
の値を簡体字中国語GBKキャラクタ・セットを使用して指定できます。