フェデレーテッド分散データベースのリファレンス
SYNC SCHEMAの操作
DDLの同期
DDLの同期は、フェデレーテッド分散データベース構成でシャードのデプロイ直後にSYNC SCHEMA
によって実行される操作です。
この操作の目的は、すべてのシャードからオブジェクト定義をインポートし、シャード間で定義を比較し、すべてのシャードに存在するオブジェクト(共通オブジェクト)のDDLを生成することです。DDLを実行してオブジェクトが作成されると、ユーザーはマルチシャード問合せでこれらのオブジェクトを参照できます。
ユーザーのインポート
ユーザーまたはスキーマがすべてのシャードに存在し、インポート可能なスキーマ・オブジェクトを所有している場合は、SYNC SCHEMA
によるインポートの候補となります。
-SCHEMA
パラメータにユーザーのリストを渡すことによって、インポートするユーザーのリストを絞り込むことができます。たとえば、
gdsctl> sync schema -schema scott
gdsctl> sync schema -schema scott,myschema
大/小文字が区別されるスキーマでは、引用符で囲んだ識別子を使用します。
gdsctl> sync schema -schema "O'Brien",scott
Oracle以外のすべてのスキーマを含めるには、SCHEMA
パラメータに値ALL
を使用します。
gdsctl> sync schema -schema all
ユーザーをインポートする前に、SYNC SCHEMA
によって、検出されたすべてのユーザーがすべてのシャードに存在すること、およびシャード・カタログに同じ名前のユーザーがすでに存在していないことが検証されます。その後、ユーザーはローカル・ユーザーとしてシャード・カタログに作成され、ロックされます。これらはローカル・ユーザーであるため、シャード間で共有されるのは同じ名前のみですが、各データベースの同じ名前を持つ他のユーザーと基本的に同じです。これらのユーザーはすべてのシャード・ユーザーではないため、ログインして問合せを発行できません。マルチシャード問合せを発行するには、すべてのシャード・ユーザーを作成する必要があります。
ノート:
PDBのローカルのユーザーのみがインポートされます。共通のCDBユーザーはインポートされません。ユーザーのロールおよび権限の付与
インポートされたユーザーの場合は、SYNC SCHEMA
によってユーザーの権限が比較されます。
SYNC SCHEMA
は、すべてのシャードで付与される権限のみを付与します(共通の付与)。ユーザーAがシャード1でDBAロールを持っているがシャード2では持っていない場合、シャード・カタログでDBAロールを付与されません。
オブジェクト定義のインポート
SYNC SCHEMA
によって比較されてシャード・カタログにインポートされたオブジェクトは、マルチシャード問合せで参照されるオブジェクト、またはマルチシャード問合せ処理によって使用されるオブジェクトです。
これらのオブジェクトは次のとおりです:
- 表
- ビューとマテリアライズド・ビュー(表としてエクスポート)
- CHECK制約
- オブジェクト・タイプ
- シノニム
SYNC SCHEMA
の実行では、記憶域に関連するオブジェクトまたはマルチシャード問合せ処理に影響しないオブジェクト(表領域、索引、索引タイプ、ディレクトリ、ゾーン・マップなど)はインポートされません。
スキーマ・オブジェクトの比較
あるシャードと別のシャードのオブジェクトは、異なる定義である場合があります。SYNC SCHEMA
は、異なる定義を比較して共通の定義を作成し、インポートされたオブジェクトに対してマルチシャード問合せを実行できるようにします。
SYNC SCHEMA
は、オブジェクトの数およびオブジェクト定義という2つのレベルでオブジェクトの差異を検出します。
最初に、SYNC SCHEMA
ではオブジェクトの数が考慮されます。アプリケーションのアップグレード中に、一部のオブジェクトがスキーマに追加されることがあります。シャード・カタログにインポートされるのは、すべてのシャードにあるオブジェクトのみです。
2番目に、あるシャードと別のシャードのオブジェクト定義は属性が異なる場合があります。SYNC SCHEMA
によってインポートされるオブジェクトでは、次の相違がある場合があります。
表の相違
フェデレーテッド分散データベース構成でオブジェクトを比較する場合、マルチシャード問合せに影響する表の相違と、影響しない相違があります。
列の相違
マルチシャード問合せに影響するのは、列の相違のみです。SYNC SCHEMA
は、この相違にのみ対処します。
-
列の数が異なる場合があります。
-
特定の列のデータ型が異なる場合があります。
-
特定の列のデフォルト値が異なる場合があります
-
仮想列の式が異なる場合があります
表に異なる数の列がある場合、SYNC SCHEMA
はすべての列の和集合を含む表を作成することを選択します。共通部分を取得するだけでなく、すべての列の和集合を取得すると、追加されるシャードの列がシャード・カタログに示されている列より少ない場合、増分デプロイ時にユーザーがマルチシャード問合せをリライトせずに済みます。
列のデータ型が異なる場合、SYNC SCHEMA
はそれを最上位(最大)のデータ型として定義します。
列のデータ型が異なり、いずれかの列がユーザー定義のオブジェクト型である場合、その列はシャード・カタログにインポートされません。
列のデフォルト値が異なる場合、SYNC SCHEMA
はデフォルト値としてNULL
を設定します。
ネストした表の列は、シャード・カタログにインポートされません。
例: Customer表は、次に示されているようにシャード1およびシャード2に定義されています。
シャード1:
Customer( Cust_id number, Name varchar(30),
Address varchar(50),Zip_code number)
シャード2:
Customer( Cust_id varchar(20), Name varchar(30),
Address varchar(50),Zip_code number,
Country_code number)
シャード1ではCust_id
列がnumberで、シャード2ではvarchar(20)です。また、シャード2にはCountry_code
が存在しますが、シャード1には存在しません。
SYNC SCHEMA
によってシャード・カタログに作成されるCustomer表には、Country_code
を含むすべての列があり、Cust_id
の型はvarchar(20)です。
Customer( Cust_id varchar(20), Name varchar(30),
Address varchar(50),Zip_code number,
Country_code number)
SYNC SCHEMA
は、シャード・カタログのスキーマ間のこれらの相違を追跡します。カタログ・データベースに対して発行され、これらの異種列にアクセスする問合せは、シャードに送信される前に相違に対処するようにリライトされます。シャードでは、データ型の不一致がある場合、データはカタログに作成された上位のデータ型にキャストされます。シャードに列がない場合は、カタログに設定されたデフォルト値が返されます。
パーティション・スキームの相違
この相違はマルチシャード問合せに影響せず、無視されます。
- パーティション化列が異なる場合があります。
- パーティション・タイプが異なる場合があります。
- パーティションの数が異なる場合があります。
記憶域属性の相違
この相違はマルチシャード問合せに影響せず、無視されます。
- 表が作成される表領域が異なります。
- 暗号化が異なる場合があります。
INMEMORY
属性が異なる場合があります。
フェデレーテッド分散データベースのトラブルシューティング
一般的なフェデレーテッド分散データベースの問題を解決するには、次のトラブルシューティングのヒントを参照してください。
ORA-03851: 操作は、フェデレーテッド・データベースでサポートされていません
ORA-03701: パラメータの組合せが無効です: フェデレーテッド・データベースと...
従来の分散データベースに適用される操作およびコマンド・オプションの一部は、フェデレーテッド分散データベースには適用できません。理由は次のとおりです:
-
フェデレーテッド分散データベースにはチャンクの概念がありません。
SPLIT CHUNK
、MOVE CHUNK
などのチャンク関連の操作は無効です。 -
既存のシャードは独自の高可用性構成がすでに設定されている可能性があるため、Data Guard Broker構成はフェデレーテッド分散データベースでシステムによって設定または管理されません。
SET DATAGUARD_PROPERTY
、MODIFY SHARDSPACE
などの操作はサポートされません。 -
CREATE SHARD
コマンドはサポートされません。
ORA-03885: 一部のプライマリ・シャードがアンデプロイされているか、または使用できません
SYNC SCHEMA
操作では、すべてのプライマリ・シャードが使用可能である必要があります。CONFIG SHARD
コマンドの出力をチェックし、すべてのプライマリ・シャードのステータスを確認します。問題を修正し、シャードが使用可能になったら、操作を再試行します。
ORA-03871: 一部のDDL文がカタログに適用されていません
前回の発行の一部の文がシャード・カタログに適用されていない場合、SYNC SCHEMA
操作でシャードからオブジェクト定義をインポートできません。これらの文を実行するには、-apply
オプションを指定してSYNC SCHEMA
を実行します。
マルチシャード問合せでのエラーの処理
シャードとカタログでオブジェクト定義が一致しないためにマルチシャード問合せがこのエラーで失敗した場合は、シャード・カタログに最新のスキーマ変更がインポートされていることを確認します。フェデレーテッド分散データベースにスキーマの変更がある場合は常に、SYNC SCHEMA
を実行してシャードのスキーマに変更をインポートする必要があります。
SYNC SCHEMA
の後続の実行では、オブジェクトは削除および再作成されませんが、定義の変更を組み込むためにALTER
文が生成されます。これにより、SYNC SCHEMA
の操作中にすでに実行中であった問合せがある場合、それらは無効なオブジェクト・エラーで失敗しません。
DDL処理フェーズでのエラーの処理
DDLがシャード・カタログで失敗した場合は、SYNC SCHEMA
-show
オプションを使用して、各DDLのステータスを検査できます。
gdsctl> sync schema -show
ノート: SYNC SCHEMA -show
コマンドは、SHOW DDL
コマンドとは異なります。SHOW DDL
では、最初にカタログで実行されてからシャードに伝播される、すべてのシャード・ユーザーによって実行されるDDL文がリストされます。それに対して、SYNC SCHEMA -show
のDDL文はシャードからインポートされたオブジェクトから生成されます。
デフォルトでは、SYNC SCHEMA -show
は一定の数の最新のDDLをリストします。-count
および-ddl
オプションは、特定の範囲のDDLを検査するために使用できます。たとえば、
gdsctl> sync schema -show -count 20
gdsctl> sync schema -show -count 20 -ddl 5
DDLテキスト全体とエラー・メッセージ(ある場合)を確認するには、-ddl
オプションを使用します。
gdsctl> sync schema -show -ddl 5
失敗したDDL文のみをリストするには、-failed_only
オプションを使用します。
gdsctl> sync schema –failed_only
失敗したDDLのエラー・メッセージに基づいて、エラーの原因を修正し、適用フェーズを実行します。
gdsctl> sync schema -apply
SYNC SCHEMA
コマンドには、初めて実行したときと同じように最初から完全な操作を実行するための-restart
オプションもあります。このオプションを指定すると、SYNC SCHEMA
の以前のすべての実行でインポートされた既存のすべてのスキーマ、および関連するメタデータがDROP
されます。これにより、それらのオブジェクトで実行されているすべての問合せが失敗します。
gdsctl> sync schema -restart