ヘッダーをスキップ
Oracle® TimesTen In-Memory Databaseオペレーション・ガイド
リリース11.2.1
B56047-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

5 グローバリゼーション・サポート

次の項では、TimesTenのグローバリゼーション・サポート機能について説明します。

グローバリゼーション・サポート機能の概要

TimesTenグローバリゼーション・サポートには、次の機能があります。


注意:

このリリースのTimesTenでは、セッションの言語および地域はサポートされていません。

データベース・キャラクタ・セットの選択

TimesTenでは、データベース・キャラクタ・セットを使用して、CHARVARCHAR2などの文字データ型で格納するデータのエンコーディングを定義します。

データベースの作成時にDatabaseCharacterSetデータ・ストア属性を使用してデータベース・キャラクタ・セットを指定します。データベース・キャラクタ・セットは、作成後に変更することはできません。また、DatabaseCharacterSetにデフォルト値はありません。サポートされているキャラクタ・セットのリストについては、『Oracle TimesTen In-Memory Databaseリファレンス』のサポートされているキャラクタ・セットに関する説明を参照してください。

データベースのキャラクタ・セットを選択する場合は、次のことについて考慮してください。

Oracle In-Memory Database Cache(IMDB Cache)を使用してOracle表をキャッシュする場合は、Oracle Databaseと同じキャラクタ・セットでデータベースを作成する必要があります。

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

キャラクタ・セットおよび言語

データベース・キャラクタ・セットを選択すると、データベースで表示できる言語が決定されます。

一連の文字(アルファベット文字、表意文字、記号、句読点、制御文字など)をキャラクタ・セットとしてエンコードできます。エンコードされたキャラクタ・セットによって、文字レパートリ内の各文字に対して一意の数値コードが割り当てられます。この数値コードは、コード・ポイントまたはエンコードされた値と呼ばれます。

キャラクタ・セットは、シングルバイトにも、マルチバイトにもできます。シングルバイトの7ビットのコード体系では、最大128文字を定義し、1つの言語のみをサポートできます。シングルバイトの8ビットのコード体系では、最大256文字を定義し、関連する複数の言語のグループをサポートできる場合もあります。マルチバイトのコード体系は、中国語や日本語などのアジア言語で使用される表意文字のスクリプトをサポートする場合に必要です。 これらの言語では、何千もの文字が使用されるためです。これらのコード体系では、固定バイト数または可変バイト数のいずれかを使用してそれぞれの文字が表されます。Unicodeは、すべての言語の情報を単一のキャラクタ・セットを使用して格納できるエンコードされたユニバーサル・キャラクタ・セットです。Unicodeでは、プラットフォーム、プログラムまたは言語に関係なく、すべての文字に一意のコードが割り当てられています。

クライアント・オペレーティング・システムとアプリケーションの互換性

データベース・キャラクタ・セットは、オペレーティング・システムから独立しています。英語のオペレーティング・システムで、日本語キャラクタ・セットのデータベースを作成および実行できます。ただし、クライアントのオペレーティング・システム内のアプリケーションでデータベースにアクセスする場合は、クライアントのオペレーティング・システムによって適切なフォントおよび入力方法のキャラクタ・セットがサポートされている必要があります。たとえば、英語版Windowsでは、最初に日本語のフォントおよび入力方法をインストールせずに、日本語のデータを挿入または取得することはできません。日本語のデータを挿入および取得するもう1つの方法として、リモートで日本語オペレーティング・システムを使用してデータベース・サーバーにアクセスする方法もあります。

すべてのクライアント・アプリケーションで同じキャラクタ・セットが使用されている場合は、通常、このキャラクタ・セットを選択することをお薦めします。クライアント・アプリケーションで異なるキャラクタ・セットが使用されている場合、データベース・キャラクタ・セットをすべてのアプリケーション・キャラクタ・セットのスーパーセットにする必要があります。これによって、アプリケーション・キャラクタ・セットからデータベース・キャラクタ・セットに変換した場合、すべての文字が表示されるようになります。

パフォーマンスおよび記憶域への影響

最高のパフォーマンスを実現するには、キャラクタ・セットの変換が回避され、目的の言語に対して最も効率的なエンコーディングが使用されるキャラクタ・セットを選択します。シングルバイト・キャラクタ・セットは、マルチバイト・キャラクタ・セットより高パフォーマンスとなります。 また、必要となる領域の点からも最も効率的です。ただし、シングルバイト・キャラクタ・セットでは、サポートできる言語の数が制限されます。

キャラクタ・セットおよびレプリケーション

レプリケーション・スキーム内のすべてのデータベースのデータベース・キャラクタ・セットは同じである必要があります。レプリケーションでは、キャラクタ・セットの変換は行われません。

長さセマンティクスおよびデータ記憶域

シングルバイト・キャラクタ・セットでは、文字列のバイト数と文字数は同じです。マルチバイト・キャラクタ・セットでは、1つの文字またはコード・ポイントが1バイト以上で構成されています。可変幅キャラクタ・セットでは、バイト長に基づいて文字数を算出することが困難な場合があります。列の長さをバイトで計算することはバイト・セマンティクスと呼ばれ、列の長さを文字で計算することはキャラクタ・セマンティクスと呼ばれます。

キャラクタ・セマンティクスは、可変幅のマルチバイト文字列に必要な記憶域を定義する場合に有効です。たとえば、Unicodeのデータベース(AL32UTF8)で、5文字の英字とともに最大5文字の漢字を格納できるVARCHAR2の列を定義する必要があるとします。バイト・セマンティクスを使用すると、この列には、漢字(3バイト)用に15バイト、英字(1バイト)用に5バイトの合計20バイトが必要になります。キャラクタ・セマンティクスを使用すると、この列には10バイトが必要になります。

次のリストの式ではバイト・セマンティクスを使用しています。CHARおよびVARCHAR2式のBYTE修飾子に注意してください。

次のリストの式ではキャラクタ・セマンティクスを使用しています。VARCHAR2式のCHAR修飾子に注意してください。

デフォルトでは、CHARおよびVARCHAR2文字データ型は文字ではなくバイトで指定されます。したがって、表定義でCHAR(20)と指定されている場合は、20バイトの文字データを格納できます。

NLS_LENGTH_SEMANTICS一般接続属性によって、文字データ型の新しい列でバイト・セマンティクスを使用するか、キャラクタ・セマンティクスを使用するかが決定されます。この属性を使用すると、明示的な修飾子を追加する必要なく、バイト長セマンティクスまたは文字長セマンティクスを使用してCHARおよびVARCHAR2の列を作成できます。NCHARおよびNVARCHAR2列は常に文字ベースです。既存の列は影響を受けません。

NLS_LENGTH_SEMANTICSのデフォルト値はBYTEです。BYTEまたはCHAR修飾子をデータ型式に指定すると、この値がNLS_LENGTH_SEMANTICSの値より優先されます。

接続キャラクタ・セット

データベース・キャラクタ・セットによって、CHARおよびVARCHAR2文字データ型のエンコーディングが決定されます。TimesTenでアプリケーションとデータベース間で必要なキャラクタ・セット変換を実行できるように、送受信されるアプリケーション・データのエンコーディングを記述する場合は、接続キャラクタ・セットが使用されます。たとえば、これによって、Unicode以外のアプリケーションでUnicode(AL32UTF8)のデータベースと通信できます。

ConnectionCharacterSet一般接続属性で、接続のための文字コードを設定します。この文字コードには、データベース・キャラクタ・セットと異なるものを指定できます。接続では、接続を介して渡される情報(パラメータ、SQLの問合せテキスト、結果、エラー・メッセージなど)用に接続キャラクタ・セットが使用されます。アプリケーション環境に適合する接続キャラクタ・セットまたはデータソースのキャラクタ・セットを選択します。

接続キャラクタ・セットとデータベース・キャラクタ・セットが同じ場合は、変換が発生しないため、最高のパフォーマンスが実現されます。接続キャラクタ・セットとデータベース・キャラクタ・セットが異なる場合は、ODBCレイヤーでデータ変換が実行されます。ターゲットのキャラクタ・セットに変換できない文字は、置換文字に変換されます。

デフォルトの接続キャラクタ・セットはUS7ASCIIです。この設定は、直接接続およびクライアント接続の両方に適用されます。

言語ソート

ソートのルールは、言語ごとに異なります。従来の方法では、テキストは、文字のエンコードに使用されるバイナリ・コードに従ってデータベース内でソートされます。通常、この方法では、言語的に意味のあるソート順序は生成されません。言語ソートでは、様々な言語および文化の複雑なソート要求が処理されます。言語ソートを使用すると、CHARVARCHAR2NCHARNVARCHAR2などの文字データ型のテキストを特定の言語の慣習に従ってソートできます。

言語ソートでは、各文字を、その文字の言語的に適切な順序を反映した数値に置き換えることによって処理が行われます。TimesTenでは、単一言語ソートおよび多言語ソートの2種類の言語ソートが提供されています。

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

単一言語ソート

単一言語ソートの場合、TimesTenでは文字列を2つのステップで比較します。1つめのステップでは、文字列全体のメジャー値をメジャー値の表と比較します。通常、同じ外観の文字は、メジャー値が同じです。2つめのステップでは、文字列全体のマイナー値をマイナー値の表と比較します。メジャー値とマイナー値は、TimesTenによって定義されます。TimesTenでは、アクセントおよび大/小文字の相違のある文字は、メジャー値は同じで、マイナー値は異なると定義されます。

単一言語ソートは、シングルバイトおよびUnicodeのデータベース・キャラクタ・セットでのみ使用可能です。キャラクタ・セットがUnicode以外のマルチバイトの場合、単一言語ソートを指定すると、デフォルトのソート順はデータベース・キャラクタ・セットのバイナリ・ソート順となります。

サポートされているソートのリストについては、『Oracle TimesTen In-Memory Databaseリファレンス』のNLS_SORTに関する説明を参照してください。

多言語ソート

TimesTenでは、1回のソートで複数の言語のデータをソートできるように多言語ソートが提供されています。多言語ソートは、ISO/OEC 14651 - International String OrderingおよびUnicode照合アルゴリズム規格に基づいています。このフレームワークによって、複雑なソート・ルールを持つ言語(アジア言語など)の処理、および多言語データを持つデータベースに対する言語的なサポートの提供がデータベースで可能になります。

また、多言語ソートでは、標準等価性および補助文字を処理できます。標準等価性とは、文字または文字列間での基本的な等価性のことです。たとえば、çはcと,との組合せと等価です。

たとえば、TimesTenでは、フランス語の単一言語ソート(FRENCH)がサポートされていますが、ユーザーはフランス語の多言語ソート(FRENCH_M)を指定できます。_Mは、多言語ソートのISO 14651規格を表しています。ソート順は、GENERIC_Mソート順に基づいており、アクセントを右から左にソートできます。表に多言語データが含まれている場合は、多言語ソートを使用することをお薦めします。表にフランス語のみが含まれている場合は、フランス語の単一言語ソートを使用すると、メモリーの使用量が少なくなるため、パフォーマンスが向上する可能性があります。フランス語の単一言語ソートでは、フランス語の多言語ソートより少ない文字が定義されているため、メモリーの使用量が少なくなります。ソートの有効範囲とパフォーマンスのバランスを考慮する必要があります。

サポートされている多言語ソートのリストについては、『Oracle TimesTen In-Memory Databaseリファレンス』のNLS_SORTに関する説明を参照してください。

大/小文字およびアクセントを区別しない言語ソート

データベース内部の処理では、大/小文字およびアクセントが区別されます。大/小文字およびアクセントを区別しないソートを実行する必要がある場合もあります。

大/小文字およびアクセントを区別しない言語ソートを指定するには、次の操作を実行します。

  • TimesTenソート名の末尾に_CIを追加すると、ソートで大/小文字が区別されません。次に例を示します。

    BINARY_CI: アクセントを区別し、大/小文字を区別しないバイナリ・ソート

    GENERIC_M_CI: アクセントを区別し、大/小文字を区別しないGENERIC_Mソート

  • TimesTenソート名の末尾に_AIを追加すると、ソートでアクセントおよび大/小文字が区別されません。次に例を示します。

    BINARY_AI: アクセントおよび大/小文字を区別しないバイナリ・ソート

    FRENCH_M_AI: アクセントおよび大/小文字を区別しないFRENCH_Mソート

言語ソートの実行

NLS_SORT データ・ストア接続属性で、言語比較に使用する照合順番を指定します。NLS_SORTの値は、SQLの文字列比較演算子およびORDER BY句に影響を与えます。

ALTER SESSION文を使用すると、NLS_SORTの値を変更できます。

ALTER SESSION SET NLS_SORT=SWEDISH;
SELECT product_name
  FROM product
  ORDER BY product_name;

PRODUCT NAME
------------
aerial
Antenne
Lcd
ächzen
Ähre

また、SQL関数NLSSORTを使用して言語ソートを実行することによって、NLS_SORTの設定を無視することもできます。

SELECT * FROM test ORDER BY NLSSORT(name,'NLS_SORT=SPANISH');

NLSSORTの使用例については、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のNLSSORTに関する説明を参照してください。

言語索引の使用

言語索引を作成すると、言語比較時のパフォーマンスを向上させることができます。言語索引には、ソート・キー値用の記憶域が必要です。

言語索引を作成するには、次のような文を使用します。

CREATE INDEX german_index ON employees
(NLSSORT(employee_id, 'NLS_SORT=GERMAN'));

オプティマイザによって、NLSSORTおよびNLS_SORTの値に基づいて適切な索引が選択されます。

1つの列に対して複数の言語ソートが必要な場合は、複数の言語索引を作成する必要があります。たとえば、同じ列に対してGERMANGERMAN_CIソートの両方を使用する場合は、2つの言語索引を作成します。

詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のCREATE INDEXに関する説明を参照してください。

SQL文字列関数および文字関数

次の表に、文字列を処理するSQL関数の概要を示します。

SQL関数 説明
ASCIISTR 任意のキャラクタ・セットの文字列に解決される文字列または式のいずれかを引数として取ります。データベース・キャラクタ・セットの文字列のASCIIバージョンを戻します。非ASCII文字は、Unicodeのエスケープ文字に変換されます。
INSTR

INSTRB

INSTR4

ある文字列が他の文字列内に存在する場合、その最初の場所を指定します。INSTRBには、文字でなくバイトを使用します。INSTR4には、UCS4コード・ポイントを使用します。
LENGTH

LENGTHB

LENGTH4

式内の文字列の長さを文字の数として戻します。LENGTHBには、文字でなくバイトを使用します。LENGTH4には、UCS4コード・ポイントを使用します。
LOWERおよびUPPER LOWER関数は、CHARNCHARVARCHAR2またはNVARCHAR2型の式を小文字に変換します。UPPER関数は、CHARNCHARVARCHAR2またはNVARCHAR2型の式を大文字に変換します。CHARおよびVARCHAR2型ではキャラクタ・セマンティクスがサポートされています。結果のデータ型は式のデータ型と同じです。
RTRIM CHARVARCHAR2NCHARまたはNVARCHAR2文字列から後続の空白を削除します。
SUBSTR

SUBSTRB

SUBSTR4

CHARまたはNCHAR文字列のサブストリングを表すVARCHAR2またはNVARCHAR2文字列を戻します。戻されるサブストリングは、指定した開始位置から始まる指定した数の文字です。SUBSTRBには、文字でなくバイトを使用します。SUBSTR4には、UCS4コード・ポイントを使用します。
UNISTR NVARCHAR2型のデータに解決される文字列を引数として取ります。UTF-16形式の値を戻します。Unicodeエスケープ文字がサポートされています。

次の関数は文字を戻します。

例を含む詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の式に関する説明を参照してください。

グローバリゼーション・サポート属性の設定

次の表に、グローバリゼーション・サポート属性の概要を示します。

パラメータ 説明
DatabaseCharacterSet データベースで使用される文字コードを示します。
ConnectionCharacterSet 接続用の文字コードを指定します。データベース・キャラクタ・セットとは異なる文字コードを指定することができます。
NLS_SORT 言語比較に使用する照合順序を示します。
NLS_LENGTH_SEMANTICS デフォルトの長さセマンティクスを設定します。
NLS_NCHAR_CONV_EXCP NCHAR/NVARCHAR2データとCHAR/VARCHAR2データ間の暗黙的または明示的なデータ型変換時にデータが失われた場合にエラーをレポートするかどうかを指定します。

DatabaseCharacterSetは、データベースの作成時に設定する必要があります。デフォルトはありません。「データベース・キャラクタ・セットの選択」を参照してください。

残りの属性は、データベースとの接続時に設定されます。ConnectionCharacterSetの詳細は、「接続キャラクタ・セット」を参照してください。

ALTER SESSION文を使用すると、セッション中に次の属性を変更できます。

詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のALTER SESSIONに関する説明および『Oracle TimesTen In-Memory Databaseリファレンス』の接続属性に関する説明を参照してください。

TIMESTEN8を使用した後方互換性

TIMESTEN8は、7.0より前のリリースのTimesTenの動作を指定する制限付きデータベース・キャラクタ・セットです。後方互換性のためにのみサポートされています。

TIMESTEN8には、次の制限があります。

  • すべての種類のキャラクタ・セット変換がサポートされていません。これには、次が含まれます。

    • アプリケーションとデータベースの間の変換。DatabaseCharacterSetがTIMESTEN8の場合は、ConnectionCharacterSetもTIMESTEN8である必要があります。

    • CHAR/VARCHAR2データとNCHAR/NVARCHAR2データ間の変換。

  • CHARおよびVARCHARデータ型のソートはバイナリ順にのみ制限されています。使用できるソートは、NLS_SORT=BINARYのみです。

  • TIMESTEN8は、IMDB Cacheではサポートされていません。

ユーザーは、データベース作成時、可能な場合常に、CHARおよびVARCHAR2列に格納されるデータの実際のエンコーディングと一致するデータベース・キャラクタ・セットを選択する必要があります。TIMESTEN8は、既存のTimesTenデータに対する後方互換性が必要な場合にのみ選択します。

移行時のグローバリゼーション・サポート

ttMigrateユーティリティを使用すると、1つ以上の移行オブジェクトをTimesTenデータベースからバイナリ・データ・ファイルに保存したり、それらのオブジェクトをバイナリ・データ・ファイルからTimesTenデータベースにリストアすることができます。移行オブジェクトには、表、キャッシュ・グループ定義、ビュー、順序などがあります。

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

このマニュアルの「データベースの移行、バックアップおよびリストア」および『Oracle TimesTen In-Memory Databaseリファレンス』ttMigrateに関する説明も参照してください。

オブジェクトの移行とキャラクタ・セット

ttMigrateユーティリティによって、オブジェクトのキャラクタ・セットで保存する各オブジェクトにタグが付けられます。デフォルトでは、ttMigrateによって、オブジェクトのデータがデータベース・キャラクタ・セットで格納されますが、-saveAsCharsetオプションを使用して異なるキャラクタ・セットを選択することもできます。このオプションは、作成モード(-c)または追加モード(-a)で指定できます。

ttMigrateを使用してオブジェクトをリストアすると、そのデータは必要に応じて暗黙的にターゲット・データベースのデータベース・キャラクタ・セットに変換されます。受信したデータの一部をターゲット・データベースのデータベース・キャラクタ・セットで表現できない場合は、キャラクタ・セット変換の結果、データが失われる可能性があります。

データがターゲット・データベースのデータベース・キャラクタ・セットでエンコードされているとわかっている場合は、-noCharsetConversionオプションを使用できます。このオプションは、リストア・モード(-r)でのみ指定できます。-noCharsetConversionオプションを使用すると、データは、ttMigrateによってターゲット・データベースのデータベース・キャラクタ・セットと同様に処理されます。

リリース7.0より前に作成されたタグ付けされていない文字データをリリース7.0以上のデータベースにリストアする場合、そのデータは、ttMigrateによってターゲット・データベースのデータベース・キャラクタ・セットと同様に処理されます。

データの保存中またはリストア中に暗黙的または明示的なキャラクタ・セット変換が発生した場合は、常に、ttMigrateユーティリティによって警告が発行されます。

移行と長さセマンティクス

ttMigrateユーティリティによって、CHARおよびVARCHAR2列の長さセマンティクス情報が保存されます。TimesTenリリース7.0以上で作成されたデータベースにオブジェクトをリストアする場合は、長さセマンティクス情報がリストアされます。

リリース7.0より前のTimesTenにオブジェクトをリストアすると、キャラクタ・セマンティクスを持つ列はバイト・セマンティクスに変換され、列長は元の列のバイト長と同じになるように調整されます。

7.0より前のオブジェクトをリリース7.0以上に移行する場合は、バイト・セマンティクスが使用されます。

言語索引の移行

ttMigrateユーティリティでは、言語索引をサポートするTimesTenリリースへの言語索引の移行がサポートされています。リリース7.0より前のTimesTenに移行する場合は、ttMigrateによって、言語索引をリストアできないことを示す警告が発行されます。言語索引なしでも、表の移行は実行されます。

キャッシュ・グループ表の移行

NCHAR/NVARCHAR2列を含むキャッシュ・グループ表は、7.0より前のリリースにはリストアできません。7.0より前のリリースでは、キャッシュ・グループ表にこれらのデータ型は使用できません。