データベース複製の考慮事項¶
このトピックでは、 データベース複製 を使用する場合の、セカンダリデータベースにおける特定のSnowflake機能の動作について説明します。複製されたオブジェクトとデータを操作するための追加のガイダンスについては、 複製に関する考慮事項 をご参照ください。
注釈
Snowflakeは、 アカウント複製機能 を使用してデータベースを複製することを推奨しています。 複製グループとフェールオーバーグループ を使用すると、グループ内にあるオブジェクトのポイントインタイムの一貫性を保ったまま、複数のデータベースと他のアカウントオブジェクトを複製できます。 機能の可用性 と サポートされているオブジェクト の完全なリストについては、 複数のアカウント間にわたる複製とフェールオーバーの概要 をご参照ください。
このトピックの内容:
データベース複製とセキュリティオブジェクト¶
このセクションでは、セキュリティポリシーとシークレットのデータベース複製動作について説明します。
- マスキングポリシーおよび行アクセスポリシー:
次のいずれかの条件が当てはまる場合は、複製操作に失敗します。
プライマリデータベースはEnterprise(またはそれ以上)のアカウントにあり、ポリシーを含んでいるが、複製を承認された1つ以上のアカウントが下位エディションにある。
プライマリデータベースに含まれるオブジェクトには、別のデータベースにあるタグへの ダングリングリファレンス がある。
複製またはフェールオーバーグループ で複数のデータベースを複製すると、データベース複製のダングリングリファレンス動作を回避できます。
- タグベースのマスキングポリシー:
次のいずれかの条件が当てはまる場合は、複製操作に失敗します。
プライマリデータベースはEnterprise(またはそれ以上)のアカウントにあり、ポリシーを含んでいるが、複製を承認された1つ以上のアカウントが下位エディションにある。
プライマリデータベースに含まれるオブジェクトには、別のデータベースにあるタグへの ダングリングリファレンス がある。
タグベースのマスキングポリシーの詳細については、 タグベースのマスキングポリシー をご参照ください。
- パスワード、セッション、認証ポリシー:
次のいずれかの条件が当てはまる場合は、複製操作に失敗します。
プライマリデータベースはEnterprise(またはそれ以上)のアカウントにあり、ポリシーを含んでいるが、下位エディションには、複製の承認されたアカウントが1つ以上ある。
プライマリデータベースに含まれるこれらのオブジェクトのいずれかが、同じアカウントのユーザーに関連付けられている。この場合、Snowflakeは複製操作に失敗します。
ユーザーへの参照が原因でデータベースの複製操作に失敗するのを避けるには、代わりに 複製またhフェールオーバーグループ を使用します。
詳細については、 複製とセキュリティポリシー をご参照ください。
- シークレット:
データベース複製を使用してシークレットを複製することはできません。シークレットを複製するには、複製グループまたはフェールオーバーグループを使用します。詳細については、 複製とシークレット をご参照ください。
ダングリングリファレンス¶
別のデータベース内のオブジェクトへの参照¶
プライマリデータベースのビューまたはテーブル制約が別のデータベースを参照しているかどうかを慎重に分析します。データベースオブジェクトの場合は、Account Usage OBJECT_DEPENDENCIES ビュー で オブジェクトの依存関係 を表示できます。
次のテーブルでは、データベース内のオブジェクト(参照元オブジェクト)が別のデータベース内のオブジェクト(参照先オブジェクト)を参照する場合のデータベース複製の動作について説明します。
参照しているオブジェクト |
参照されるオブジェクト |
複製動作 |
---|---|---|
オブジェクト |
成功 |
|
オブジェクト |
失敗 |
|
マテリアライズドビュー |
失敗 |
|
主キー |
失敗 |
|
テーブル |
失敗 |
|
オブジェクトポリシー/タグの割り当て先 |
失敗 |
|
オブジェクト |
失敗 |
非マテリアライズドビュー¶
このタイプの参照は名前ベースであるため、別のデータベース内のオブジェクトを参照する非マテリアライズドビュー(例:テーブル列、他のビュー、 UDFs、またはステージ)を複製できます。名前ベースの参照によって複製が失敗することはありません。ただし、他のデータベースが同じリージョンに複製されていない場合、セカンダリデータベースのビューに対するクエリは失敗します。
たとえば、データベース d1
のビュー v1
が、データベース d1
と d2
のテーブル t1
と t2
をそれぞれ参照するとします。セカンダリデータベース d1
の v1
ビューを正常にクエリするには、セカンダリデータベース d2
もアカウントに存在する必要があります(例: 別のセカンダリデータベースとして)。さらに、プライマリデータベースとの一貫したクエリ結果を得るには、セカンダリデータベース d1
と d2
を同時に更新する必要があります。
マテリアライズドビュー¶
マテリアライズドビューでダングリング参照があると、複製に失敗し、次のエラーメッセージが表示される場合があります。
Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing (referred entity <- [referring entities])
このようなダングリング参照は、次の場合に発生する可能性があります。
マテリアライズドビューが別のデータベース内にある任意のオブジェクトを参照する。
マテリアライズドビューは、オブジェクトを名前ではなく ID で参照します。データベーススナップショットは、データベース外部のオブジェクトへの ID ベースの参照を解決できません。
この制限を回避するには、同じ 複製またはフェールオーバーグループ で両方のデータベースを一緒に複製します。または、マテリアライズドビューとそれらが参照するオブジェクトを同じデータベースに格納することもできます。
マテリアライズドビューが無効である(つまり、 ドロップされたオブジェクト を参照している)。
無効なマテリアライズドビューのダングリング参照エラーを回避するには、マテリアライズドビューの問題を特定して修正します。マテリアライズドビューのトピック内の トラブルシューティング セクションをご参照ください。
制約¶
現在、外部キーをダングリングすると複製に失敗し、次のエラーメッセージが表示されます。
Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referredentity <- [referring entities])
この状況は、プライマリデータベースの外部キーが別のデータベースの主キーを参照する場合、またはその逆の場合に発生します。これは、制約参照が ID ベースであるためです。データベーススナップショットは、独自のデータベース外にあるオブジェクトへの ID ベースの参照を解決できません。
アカウントの外部キー参照を表示するには、Information Schema TABLE_CONSTRAINTS ビュー またはAccount Usage TABLE_CONSTRAINTS ビュー をクエリします。
この制限を回避するには、同じ 複製またはフェールオーバーグループ で両方のデータベースを一緒に複製します。または、リンクされたテーブルを同じデータベースに格納することもできます。
シーケンス¶
現在、シーケンスをダングリングすると複製に失敗し、次のエラーメッセージが表示されます。
Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referred entity <- [referring entities])
この状況は、プライマリデータベースのテーブルが別のデータベースのシーケンスを参照している場合に発生します。これは、シーケンス参照が ID ベースであるためです。データベーススナップショットは、独自のデータベース外にあるオブジェクトへの ID ベースの参照を解決できません。
この制限を回避するには、同じ 複製またはフェールオーバーグループ で両方のデータベースを一緒に複製します。または、同じデータベース内のシーケンスを参照できます。
ドロップされたオブジェクトへの参照¶
同じデータベースまたは別のデータベース内の別のオブジェクトによって参照されているオブジェクトを削除すると、ダングリングリファレンスを引き起こします。プライマリデータベース内のオブジェクトが削除されたオブジェクトを参照すると、レプリケーション操作が失敗し、次のエラーメッセージが表示されます。
Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referred entity <- [referring entities])
この制限を回避するには、次のステップのいずれか 1つ を完了することをお勧めします。
削除された参照されているオブジェクトを復元します。
参照するオブジェクトを変更します(例: ALTER MATERIALIZED VIEW を使用してマテリアライズドビューを変更)。別のオブジェクトを参照するか、ドロップされたオブジェクトへの参照を削除します。
ドロップされたオブジェクトを参照するオブジェクトをプライマリデータベースでドロップします。
複数のデータベースの複製¶
複数のデータベースが複製される場合、データベース間でのポイントインタイムの一貫性は利用できません。各プライマリデータベースのスナップショットは個別に作成され、セカンダリデータベースへの変更は個別にコミットされます。これは、異なるデータベースのテーブル間で結合するビューがある場合、またはデータベース間のトランザクションに依存する場合に問題になる可能性があります。たとえば、2つのプライマリデータベースをアトミックに更新するトランザクションは、セカンダリデータベースに同時に反映されない可能性があります。
複数のデータベースを特定の時点での整合性で複製するには、 複製またはフェールオーバーグループ を使用します。