この付録には、列長セマンティクスおよびUnicodeに対するレプリケーション・サポートに関する情報が含まれています。
この付録の内容は、次のとおりです。
関連項目: 長さセマンティクスおよびUnicodeの詳細は、次のマニュアルを参照してください。
|
列長セマンティクスにより、列の長さをバイト単位に指定するか文字単位に指定するかが決まります。列の長さをバイト単位に指定する場合は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リリース2(9.2)以上が稼働している必要があります。BYTE
列セマンティクスを指定する場合は、これらのサイトで以前のリリースのOracleが稼働していてもかまいません。
このサポートについて、表B-1に要約します。
新規マスター・サイトに表を事前作成するときに、CHAR
列セマンティクスを使用する場合は、マスター定義サイトと新規マスター・サイトの両方でOracle9i Database以上が稼働している必要があります。BYTE
列セマンティクスを指定する場合は、これらのサイトで以前のリリースのOracleが稼働していてもかまいません。
また、表を手動で事前に作成しているため、新規マスター表内の列には、マスター定義サイトでの表の列とは異なる列長セマンティクスを指定している可能性があります。マスター表内の列は各マスター・サイトで同じ列セマンティクスを使用する必要があるため、その場合はエラーが発生します。
このサポートについて、表B-2に要約します。
表B-2 事前作成された表に対する列長セマンティクス・サポート
マスター定義サイトのリリース | マスター定義サイトの列セマンティクス | 新規マスター・サイトのリリース | 新規マスター・サイトの列セマンティクス | サポート |
---|---|---|---|---|
9.2以上 |
|
9.2以上 |
|
あり |
9.2以上 |
|
9.2以上 |
|
なし |
9.2以上 |
|
9.2以上 |
|
なし |
9.2以上 (マルチバイト・キャラクタ・セット) |
|
9.2未満 |
|
なし |
9.2以上 (シングルバイト・キャラクタ・セット) |
|
9.2未満 |
|
あり |
9.2未満 |
|
9.2以上 (マルチバイト・キャラクタ・セット) |
|
なし |
9.2未満 |
|
9.2以上 (シングルバイト・キャラクタ・セット) |
|
あり |
任意のリリース |
|
任意のリリース |
|
あり |
マテリアライズド・ビューを作成するとき、マテリアライズド・ビュー内の列長セマンティクスは次のように決定されます。
マスター列が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以上 |
|
9.2以上 |
|
あり |
9.2以上 |
|
9.2以上 |
|
なし |
9.2以上 |
|
9.2以上 |
|
なし |
9.2以上 (マルチバイト・キャラクタ・セット) |
|
9.2未満 |
|
なし |
9.2以上 (シングルバイト・キャラクタ・セット) |
|
9.2未満 |
|
あり |
9.2未満 |
|
9.2以上 |
|
あり |
任意のリリース |
|
任意のリリース |
|
あり |
DBMS_REPCAT
パッケージを使用すると、新規レプリケート表を作成するデータ定義言語(DDL)文、あるいは既存のレプリケート表に列を追加するDDL文を伝播できます。このようなDDL文により作成された新規列でCHAR
列セマンティクスを使用する場合は、CHAR
列セマンティクスを明示的に指定するようにします。指定しない場合、レプリケーション・サイト自体でデフォルトとしてCHAR
列セマンティクスを設定していても、列は常にBYTE
列セマンティクスになります。
DDL文を伝播するには、DBMS_REPCAT
パッケージ内の次のプロシージャを使用します。
ALTER_MASTER_REPOBJECT
CREATE_MASTER_REPOBJECT
EXECUTE_DDL
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つのサイト間でレプリケーションを設定してもエラーは検出されません。ただし、後でデータが失われる可能性があります。データが失われた場合は、エラーが発生します。 |