この付録では、Oracle Internet Directoryで使用されるグローバリゼーション・サポートについて説明し、Oracle Internet Directory環境における様々なコンポーネントとツールに必要な環境変数NLS_LANG
について説明します。
Oracle Internet Directoryでは、グローバリゼーション・サポートを使用して、ネイティブ言語でデータを格納、処理および取得できます。これにより、Oracle Internet Directoryのユーティリティおよびエラー・メッセージが、自動的にネイティブ言語とロケールに適応されます。
この付録の内容は次のとおりです。
コンピュータ・システムで文字を処理する場合、文字のグラフィカルな表現のかわりに数値コードを使用します。たとえば、データベースに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エンコーディングで行われます。
この項では、各バルク・ツールで使用する引数の例を示します。内容は次のとおりです。
第I.7.4項「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文字セットを使用して指定できます。