ヘッダーをスキップ
Oracle® TimesTen In-Memory Databaseオペレーション・ガイド
11gリリース2 (11.2.2)
B66441-07
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

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

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

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

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

  • キャラクタ・セットのサポート

    データベースを作成する場合は、データベース・キャラクタ・セットを選択する必要があります。サポートされているすべてのキャラクタ・セットについては、このマニュアルの「データベース・キャラクタ・セットの選択」および『Oracle TimesTen In-Memory Databaseリファレンス』のサポートされているキャラクタ・セットに関する説明を参照してください。また、セッションの接続キャラクタ・セットも選択する必要があります。「接続キャラクタ・セット」を参照してください。

  • 言語ソートおよび言語索引。言語ルールに基づいてデータをソートできます。「言語ソート」を参照してください。言語索引を使用して、言語ソートのパフォーマンスを向上させることができます。「言語索引の使用」を参照してください。

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

    TimesTenでは、文字列に関する情報を戻すSQL関数が提供されています。また、エンコードされた値から文字を戻すSQL関数も提供されています。「SQL文字列および文字関数」を参照してください。


注意:

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

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

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

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

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

  • 現在および将来、データベースでサポートする必要がある言語であるか。

  • キャラクタ・セットはオペレーティング・システムで使用可能かどうか。

  • クライアントで使用されているキャラクタ・セット。

  • アプリケーションでのキャラクタ・セットの処理状況。

  • パフォーマンスへのキャラクタ・セットの影響。

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

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

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

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

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

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

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

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

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

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

最適なパフォーマンスのためには、変換が不要なキャラクタ・セットを選択し、使用言語にとって最も効率的なエンコーディングを使用してください。シングルバイト・キャラクタ・セットは、パフォーマンスの点でマルチバイト・キャラクタ・セットよりも優れており、領域要件に関してもより効率的です。ただし、シングルバイト・キャラクタ・セットには、サポートできる言語の種類に制限があります。

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

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

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

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

文字長およびバイト長セマンティクスは、列長および記憶域サイズについて発生する可能性がある問題を解決するためにサポートされています。UTF-8またはAL32UTF8などのマルチバイト・エンコードのキャラクタ・セットがサポートされています。マルチバイト・エンコードでは、1文字に必要な記憶域量が文字によって異なります。たとえば、UTF-8の文字では1から4バイトが必要です。たとえば、CHAR (10)と定義された列の場合、キャラクタ・セットのエンコードに関係なく、この列には10文字すべてが収まります。しかし、キャラクタ・セットのエンコードがUTF-8の場合は、最大40バイトが必要になります。

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

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

  • CHAR (5 BYTE)

  • VARCHAR2(20 BYTE)

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

  • VARCHAR2(20 CHAR)

  • SUBSTR(string, 1, 20)

デフォルトでは、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です。この設定は、直接接続およびクライアント接続の両方に適用されます。

言語ソート

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

言語ソートでは、各文字を、その文字の言語的に適切な順序を反映した数値に置き換えることによって処理が行われます。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');

注意:

TimesTenでは、マテリアライズド・ビューおよびキャッシュ・グループに対して、この属性を接続文字列またはDSN定義で使用するのではなく、SQL関数のNLSSORT()を使用して照合順番を明示的に指定することをお薦めします。

詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のNLS_SORTに関する説明を参照してください。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関数がありますが、詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス』の次の各説明を参照してください。

  • 文字値を戻す文字関数に関する説明。

  • 数値を戻す文字関数に関する説明。

  • 文字列関数に関する説明。

  • LOB関数に関する説明。

  • 変換関数(文字列に対して操作する一部の関数)に関する説明。

  • 一般的な比較関数(LOBデータ型以外の文字列に対して操作する一部の関数)に関する説明。

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

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

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

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

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

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

  • NLS_SORT

  • NLS_LENGTH_SEMANTICS

  • NLS_NCHAR_CONV_EXCP

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

TIMESTEN8を使用した後方互換性

TIMESTEN8は、7.0より前のリリースのTimesTenの動作を指定する制限付きデータベース・キャラクタ・セットです。これは、下位互換性を維持する目的のみでサポートされています。

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

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

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

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

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

  • CHARセマンティクスは無視されます。文字はシングルバイトです。

  • UPPERおよびLOWER関数でサポートされるのはASCII文字のみです。ASCII以外の文字に対する結果は定義されていません。エラーは返されません。

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

  • TIMESTEN8では、LOBデータ型はサポートしていません。

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


注意:

TIMESTEN8キャラクタ・セットを使用するTimesTenデータベースを別のキャラクタ・セットを使用するデータベースに移行する場合の潜在的な問題の詳細は、『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』の移行、バックアップおよびリストアに関する説明を参照してください。

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

移行時、グローバリゼーション・サポートによって問題が発生する場合があります。詳細は、『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』の移行、バックアップおよびリストアに関する説明および『Oracle TimesTen In-Memory Databaseリファレンス』のttMigrateに関する説明を参照してください。