ヘッダーをスキップ
Oracle® Databaseアドバンスト・レプリケーション
11g リリース2 (11.2)
B72089-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

B 列長セマンティクスとUnicode

この付録には、列長セマンティクスおよびUnicodeに対するレプリケーション・サポートに関する情報が含まれています。

この付録には、次の項が含まれます。


関連項目:

長さセマンティクスおよびUnicodeの詳細は、次のマニュアルを参照してください。
  • 『Oracle Databaseグローバリゼーション・サポート・ガイド』

  • 『Oracle Database SQL言語リファレンス』


レプリケーション・サイトおよび表の列に関する列長セマンティクス

列長セマンティクスにより、列の長さをバイト単位に指定するか文字単位に指定するかが決まります。列の長さをバイト単位に指定する場合はBYTEを、文字単位に指定する場合はCHARを使用します。CHAR列セマンティクスは、コードポイント長セマンティクスとも呼ばれます。

キャラクタ・セットによっては1文字に複数バイトを必要とするものがあるため、列に10 BYTEと指定すると、実際に格納される文字数が10文字より少ないことがありますが、10 CHARと指定すると、どのキャラクタ・セットでも列に10文字が格納されます。CHAR列セマンティクスを指定できるのは、Oracle9i Database以上のデータベースです。

Oracle Databaseの長さセマンティクスはNLS_LENGTH_SEMANTICS初期化パラメータを使用して設定し、すべてのVARCHAR2列およびCHAR列で、この初期化パラメータにデフォルトとして指定された値が使用されます。この初期化パラメータを設定しない場合、デフォルト設定はBYTEです。

それぞれの列で、データベースの列長セマンティクスを上書きできます。たとえば、サイトの列長セマンティクスがCHARの場合でも、CREATE TABLE文またはALTER TABLE文を使用して、個々の列の長さのセマンティクスにBYTEを指定できます。

次の文では表を作成し、列長をバイト単位に指定します。

CREATE TABLE byte_col (a VARCHAR2(10 BYTE));

次の文では表を作成し、列長を文字単位に指定します。

CREATE TABLE char_col (a VARCHAR2(10 CHAR));

マルチマスター環境での列長セマンティクス・サポート

マスター・グループ内のすべてのマスター・サイトの列長セマンティクスは同じにする必要があり、マスター表内の個々の列長セマンティクスはすべてのマスター・サイトで同じにする必要があります。マスター定義サイトのマスター・グループに表があり、その表を新規マスター・サイトにレプリケートする場合は、次のいずれかの方法で新規サイトに表を作成できます。

  • 新規マスター・サイトをマスター・グループに追加するときに、アドバンスト・レプリケーションによって新規マスター・サイトにその表を生成することを指定します。

  • 新規マスター・サイトをマスター・グループに追加する前に、そのマスター・サイトで表を事前に手動で作成します。

以降の項では、この2つの表の作成方法のそれぞれに対する列長セマンティクス・サポートを説明します。

アドバンスト・レプリケーションによって生成された表に対する列長セマンティクス・サポート

アドバンスト・レプリケーションで新規マスター・サイトに表を生成するように指定し、CHAR列セマンティクスを使用している場合は、マスター定義サイトと新規マスター・サイトの両方でOracle9i Database以上が稼働している必要があります。BYTE列セマンティクスを指定する場合は、これらのサイトで以前のリリースのOracleが稼働していてもかまいません。

このサポートについて、表B-1に要約します。

表B-1 生成された表に対する列長セマンティクス・サポート

マスター定義サイトのリリース マスター定義サイトの列セマンティクス 新規マスター・サイトのリリース 新規マスター・サイトの列セマンティクス

9.2以上

CHAR

9.2以上

CHAR

9.2以上

CHAR

9.2未満

サポートされていません

任意のリリース

BYTE

任意のリリース

BYTE


事前作成された表に対する列長セマンティクス・サポート

新規マスター・サイトに表を事前作成するときに、CHAR列セマンティクスを使用する場合は、マスター定義サイトと新規マスター・サイトの両方でOracle9i Database以上が稼働している必要があります。BYTE列セマンティクスを指定する場合は、これらのサイトで以前のリリースのOracleが稼働していてもかまいません。

また、表を手動で事前に作成しているため、新規マスター表内の列には、マスター定義サイトでの表の列とは異なる列長セマンティクスを指定している可能性があります。マスター表内の列は各マスター・サイトで同じ列セマンティクスを使用する必要があるため、その場合はエラーが発生します。

このサポートについて、表B-2に要約します。

表B-2 事前作成された表に対する列長セマンティクス・サポート

マスター定義サイトのリリース マスター定義サイトの列セマンティクス 新規マスター・サイトのリリース 新規マスター・サイトの列セマンティクス サポート

9.2以上

CHAR

9.2以上

CHAR

あり

9.2以上

CHAR

9.2以上

BYTE

なし

9.2以上

BYTE

9.2以上

CHAR

なし

9.2以上

(マルチバイト・キャラクタ・セット)

CHAR

9.2未満

BYTE

なし

9.2以上

(シングルバイト・キャラクタ・セット)

CHAR

9.2未満

BYTE

あり

9.2未満

BYTE

9.2以上

(マルチバイト・キャラクタ・セット)

CHAR

なし

9.2未満

BYTE

9.2以上

(シングルバイト・キャラクタ・セット)

CHAR

あり

任意のリリース

BYTE

任意のリリース

BYTE

あり


マテリアライズド・ビューでの列長セマンティクス・サポート

マテリアライズド・ビューを作成するとき、マテリアライズド・ビュー内の列長セマンティクスは次のように決定されます。

  • マスター列がBYTEまたはCHARとして明示的に指定されている場合は、マテリアライズド・ビュー内の列はその明示的な指定を保持します。次の例では、a列に対してCHAR列セマンティクスが明示的に指定されています。

    CREATE TABLE char_col (a VARCHAR2(10 CHAR));
    
  • マスター表内の列が明示的に指定されない場合は、マテリアライズド・ビュー内の列はマテリアライズド・ビュー・サイトのデフォルトの列長セマンティクスを使用します。次の例では、a列の列長セマンティクスが明示的に指定されていません。

    CREATE TABLE char_col (a VARCHAR2(10));
    

Oracle9i Database以上のマスターに明示的なCHAR指定の列があり、Oracle9i Databaseより前のリリースを稼働しているマテリアライズド・ビュー・サイトがこのマスターに基づいてマテリアライズド・ビューを作成しようとすると、マテリアライズド・ビューの作成は失敗します。

ビルトインのコンテナ表を含むマテリアライズド・ビュー

マテリアライズド・ビュー・サイトでマテリアライズド・ビューを作成する前にコンテナ表を事前に作成した場合、コンテナ表の列長セマンティクスはマスターの列長セマンティクスと一致する必要があります。列長セマンティクスが一致しない場合は、マテリアライズド・ビューの作成中にORA-12060エラーが返されます。マテリアライズド・ビューの表を事前に作成するには、CREATE MATERIALIZED VIEW文のON PREBUILT TABLE句を使用します。


関連項目:

CREATE MATERIALIZED VIEW文のON PREBUILT TABLE句の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

更新可能マテリアライズド・ビューに対する列長セマンティクス・サポート

更新可能マテリアライズド・ビューの列長セマンティクスがマテリアライズド・ビューのマスターの列長セマンティクスに一致する場合は、次の操作が常にサポートされます。

  • 更新可能マテリアライズド・ビューのリフレッシュ

  • マテリアライズド・ビューに加えられたDML変更のマスターへのプッシュ

ただし、列長セマンティクスが一致せず、マスターがOracle9i Database以上の場合は、マテリアライズド・ビューをマテリアライズド・ビュー・グループに追加しようとしたときにエラーが発生します。マテリアライズド・ビューが更新可能マテリアライズド・ビューになるには、マテリアライズド・ビュー・グループに属している必要があります。レプリケーション・マネージメントAPIを使用する場合は、DBMS_REPCATパッケージ内のCREATE_MVIEW_REPOBJECTプロシージャを実行して、マテリアライズド・ビューをマテリアライズド・ビュー・グループに追加します。

表B-3に、更新可能マテリアライズド・ビューに対する列長セマンティクスのサポートについて要約します。

表B-3 更新可能マテリアライズド・ビューに対する列長セマンティクス・サポート

マスター・サイトのリリース マスター・サイトの列セマンティクス マテリアライズド・ビュー・サイトのリリース マテリアライズド・ビュー・サイトの列セマンティクス 更新可能マテリアライズド・ビューのサポート

9.2以上

CHAR

9.2以上

CHAR

あり

9.2以上

CHAR

9.2以上

BYTE

なし

9.2以上

BYTE

9.2以上

CHAR

なし

9.2以上

(マルチバイト・キャラクタ・セット)

CHAR

9.2未満

BYTE

なし

9.2以上

(シングルバイト・キャラクタ・セット)

CHAR

9.2未満

BYTE

あり

9.2未満

BYTE

9.2以上

CHAR

あり

任意のリリース

BYTE

任意のリリース

BYTE

あり



注意:

表B-3に示されているマスター・サイトは、マルチマスター・レプリケーション環境のマスター・サイトか、マスター・マテリアライズド・ビュー・サイトのいずれかです。

DDL伝播と列長セマンティクス

DBMS_REPCATパッケージを使用すると、新規レプリケート表を作成するデータ定義言語(DDL)文、あるいは既存のレプリケート表に列を追加するDDL文を伝播できます。このようなDDL文により作成された新規列でCHAR列セマンティクスを使用する場合は、CHAR列セマンティクスを明示的に指定するようにします。指定しない場合、レプリケーション・サイト自体でデフォルトとしてCHAR列セマンティクスを設定していても、列は常にBYTE列セマンティクスになります。

DDL文を伝播するには、DBMS_REPCATパッケージ内の次のプロシージャを使用します。

  • ALTER_MASTER_REPOBJECT

  • CREATE_MASTER_REPOBJECT

  • EXECUTE_DDL


関連項目:

CHAR列セマンティクスの明示的な指定方法の詳細は、「レプリケーション・サイトおよび表の列に関する列長セマンティクス」を参照してください。

Unicodeに対するレプリケーション・サポート

Unicodeは、任意の言語からの情報を1つのキャラクタ・セットを使用して格納できる汎用のエンコードされたキャラクタ・セットです。Unicodeは使用されるプラットフォーム、プログラムまたは言語に関係なく、すべてのキャラクタにそれぞれ一意のコード値を提供します。Unicodeはマルチマスター・レプリケーション環境およびマテリアライズド・ビュー・レプリケーション環境の両方でサポートされます。Oracle9i Database以上では、NCHARまたはNVARCHAR2データ型として指定される列は、すべてUnicode形式で格納されます。

マスター・サイトとマテリアライズド・ビュー・サイトの両方で、NCHARまたはNVARCHAR2データ型を使用すると、異なるリリースのOracleが稼働する環境でのレプリケーションが可能になります。ただし、レプリケーション・サイトの一方がOracle9i Databaseより前のリリースで、可変幅キャラクタ・セットを使用している場合は、レプリケーションをお薦めしません(データが失われる可能性があります)。

表B-4に、レプリケーションが推奨される場合について要約します。

表B-4 グローバリゼーション・サポート・キャラクタ・セットに対するレプリケーション・サポート

NCHAR列またはNVARCHAR2列を含むローカル・データベースのリリース NCHAR列およびNVARCHAR2列を含むリモート・データベースのリリース レプリケーションの推奨

9.2以上

(Unicode形式の格納)

9.2以上

(Unicode形式の格納)

あり

9.2未満

(固定幅または可変幅の各国語キャラクタ・セット形式)

9.2未満

(固定幅または可変幅の各国語キャラクタ・セット形式)

あり

9.2以上

(Unicode形式の格納)

9.2未満

(可変幅の各国語キャラクタ・セット形式)

推奨しません

9.2以上

(Unicode形式の格納)

9.2未満

(固定幅の各国語キャラクタ・セット形式)

あり

9.2未満

(可変幅の各国語キャラクタ・セット形式)

9.2以上

(Unicode形式の格納)

推奨しません

9.2未満

(固定幅の各国語キャラクタ・セット形式)

9.2以上

(Unicode形式の格納)

あり



注意:

表B-4でレプリケーションを推奨しないと示されている場合、2つのサイト間でレプリケーションを設定してもエラーは検出されませんが、後でデータが失われる可能性があります。データが失われた場合は、エラーが発生します。

NCLOBデータ型列のレプリケーション

NCLOBデータ型は常に固定幅です。したがって、NCLOBデータ型の列のレプリケーションは制限なしでサポートされます。