ALTER DATABASE

既存のデータベースのプロパティを変更します。

データベースの変更には、次が含まれます。

  • データベースの名前またはTime Travelデータ保持期間(Snowflake Enterprise Edition以降を使用している場合)の変更。

  • データベースの複製とフェールオーバーの有効化と管理。

こちらもご参照ください。

CREATE DATABASEDESCRIBE DATABASEDROP DATABASESHOW DATABASESUNDROP DATABASE

構文

ALTER DATABASE [ IF EXISTS ] <name> RENAME TO <new_db_name>

ALTER DATABASE [ IF EXISTS ] <name> SWAP WITH <target_db_name>

ALTER DATABASE [ IF EXISTS ] <name> SET [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
                                        [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
                                        [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
                                        [ LOG_LEVEL = '<log_level>' ]
                                        [ TRACE_LEVEL = '<trace_level>' ]
                                        [ COMMENT = '<string_literal>' ]

ALTER DATABASE <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER DATABASE <name> UNSET TAG <tag_name> [ , <tag_name> ... ]

ALTER DATABASE [ IF EXISTS ] <name> UNSET { DATA_RETENTION_TIME_IN_DAYS         |
                                            MAX_DATA_EXTENSION_TIME_IN_DAYS     |
                                            DEFAULT_DDL_COLLATION               |
                                            COMMENT
                                          }
                                          [ , ... ]
Copy

データベースの複製とフェールオーバーの構文

データベースの複製

ALTER DATABASE <name> ENABLE REPLICATION TO ACCOUNTS <account_identifier> [ , <account_identifier> ... ] [ IGNORE EDITION CHECK ]

ALTER DATABASE <name> DISABLE REPLICATION [ TO ACCOUNTS <account_identifier> [ , <account_identifier> ... ] ]

ALTER DATABASE <name> REFRESH
Copy

データベースのフェールオーバー

ALTER DATABASE <name> ENABLE FAILOVER TO ACCOUNTS <account_identifier> [ , <account_identifier> ... ]

ALTER DATABASE <name> DISABLE FAILOVER [ TO ACCOUNTS <account_identifier> [ , <account_identifier> ... ] ]

ALTER DATABASE <name> PRIMARY
Copy

パラメーター

name

変更するデータベースの識別子を指定します。識別子にスペース、特殊文字、または大文字と小文字が混在する場合、文字列全体を二重引用符で囲む必要があります。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

RENAME TO new_db_name

データベースの新しい識別子を指定します。アカウントに対して一意である必要があります。

詳細については、 識別子の要件 をご参照ください。

オブジェクトの名前を変更すると、そのオブジェクトを参照する他のオブジェクトも新しい名前で更新する必要があります。

SWAP WITH target_db_name

指定された2つのデータベース間で、すべてのオブジェクト(スキーマ、テーブル、ビューなど)および識別子を含むメタデータを交換します。また、データベースおよびそれに含まれるオブジェクトに対して付与されたすべてのアクセス制御権限をスワップします。 SWAP WITH は、基本的に両方のデータベースの名前変更を単一の操作として実行します。

SET ...

データベースに設定する1つ(または複数)のプロパティを指定します(空白、コンマ、または改行で区切られます):

DATA_RETENTION_TIME_IN_DAYS = num

データベースでTime Travelアクション(CLONE および UNDROP)を実行できる日数を指定し、さらにデータベースで作成されたすべてのスキーマのデフォルトのTime Travel保持時間を指定します。

指定できる値は、使用しているSnowflake Editionによって異なります。

  • Standard Edition: 0 または 1

  • Enterprise Edition(またはそれ以上): 0 から 90

MAX_DATA_EXTENSION_TIME_IN_DAYS = integer

Snowflakeがデータベース内のテーブルのデータ保持期間を延長して、テーブル上のストリームが古くなるのを防ぐことができる最大日数を指定するオブジェクトパラメーター。

このパラメーターの詳細については、 MAX_DATA_EXTENSION_TIME_IN_DAYS をご参照ください。

DEFAULT_DDL_COLLATION = 'collation_specification'

次のデフォルトの 照合仕様 を指定します。

  • データベース内の既存のテーブルに追加された新しい列。

  • データベースに追加された新しいテーブルのすべての列。

パラメーターを設定しても、既存の列の照合仕様は 変更されません

パラメーターの詳細については、 DEFAULT_DDL_COLLATION をご参照ください。

LOG_LEVEL = 'log_level'

インジェストされ、アクティブなイベントテーブルで使用できるようにするメッセージの重大度レベルを指定します。指定されたレベル(およびそれよりも重大なレベル)のメッセージがインジェストされます。

レベルの詳細については、 LOG_LEVEL をご参照ください。ログレベルの設定については、 ログレベルの設定 をご参照ください。

TRACE_LEVEL = 'trace_level'

トレースイベントがイベントテーブルにインジェストされる方法を制御します。

レベルの詳細については、 TRACE_LEVEL をご参照ください。トレースレベルの設定については、 トレースレベルの設定 をご参照ください。

TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]

タグ の名前とタグ文字列の値を指定します。

タグ値は常に文字列であり、タグ値の最大文字数は256です。

ステートメントにあるタグの指定の詳細については、 オブジェクトおよび列のタグクォータ をご参照ください。

COMMENT = 'string_literal'

データベースのコメントを追加するか、既存のコメントを上書きします。

UNSET ...

データベースの設定を解除する1つ(または複数)のプロパティおよび/またはパラメーターを指定します。これにより、デフォルトにリセットします。

  • DATA_RETENTION_TIME_IN_DAYS

  • MAX_DATA_EXTENSION_TIME_IN_DAYS

  • DEFAULT_DDL_COLLATION

  • TAG tag_name [ , tag_name ... ]

  • COMMENT

単一の ALTER ステートメントで複数のプロパティ/パラメーターをリセットできます。ただし、各プロパティ/パラメーターはカンマで区切る 必要があります 。プロパティ/パラメーターをリセットするときは、名前のみを指定します。プロパティの値を指定すると、エラーが返されます。

データベースの複製とフェールオーバーのパラメーター

ENABLE REPLICATION TO ACCOUNTS account_identifier [ , account_identifier ... ]

複製のプライマリデータベースとして機能するローカルデータベースを昇格します。プライマリデータベースは1つ以上のアカウントで複製でき、これらのアカウントのユーザーは各 セカンダリ (つまり、レプリカ)データベースのオブジェクトをクエリできます。

または、既存のプライマリデータベースを変更して、データベースのレプリカを保存できるアカウントのリストに追加または削除します。

このデータベースのレプリカを保存できる組織内のアカウントのコンマ区切りリストを提供します。

account_identifier

アカウントの一意の識別子。優先識別子は organization_name.account_name です。組織で複製が有効になっているアカウントのリストを表示するには、 SHOW REPLICATION ACCOUNTS をクエリします。

従来のアカウントロケーターもアカウント識別子として使用できますが、将来的に機能しなくなる可能性があるため、使用しないことをお勧めします。アカウントロケーターをアカウント識別子として使用する方法の詳細については、 データベースの複製とフェールオーバーの使用上の注意 をご参照ください。

IGNORE EDITION CHECK

次のいずれかのシナリオで、下位エディションのアカウントにデータを複製できます。

  • プライマリデータベースは、Business Critical(またはそれ以上)のアカウントにありますが、下位エディションには、複製が承認された1つ以上のアカウントがあります。Business Critical Editionは、非常に機密性の高いデータを有するSnowflakeアカウントを対象としています。

  • プライマリデータベースは、Business Critical(またはそれ以上)のアカウントにあり、 HIPAA HITRUST 規制に従ってアカウントに PHI データを保存するために署名されたビジネスアソシエイト契約が整っています。しかし、Business Critical(またはそれ以上)のアカウントであるかどうかにかかわりなく、複製が承認された1つ以上のアカウントに対してはそのような契約がありません。

Business Critical(またはそれ以上)のアカウントのアカウント管理者が機密データを下位エディションのアカウントに誤って複製することを防ぐため、両方のシナリオともデフォルトで禁止されています。

DISABLE REPLICATION [ TO ACCOUNTS account_identifier [ , account_identifier ... ] ]

このプライマリデータベースの複製を無効にします。つまり、別のアカウントにあるこのデータベース(セカンダリデータベース)のレプリカは更新できません。セカンダリデータベースはプライマリデータベースにリンクされたままですが、セカンダリデータベースを更新する要求は拒否されます。

プライマリデータベースの複製を無効にしても、同じアカウントへの複製が妨げられることはありません。そのため、データベースは、引き続き SHOW REPLICATION DATABASES 出力にリストされます。

必要に応じて、組織内のアカウントのコンマ区切りリストを提供して、指定したアカウントでのみこのデータベースの複製を無効にします。

account_identifier

アカウントの一意の識別子。優先識別子は organization_name.account_name です。組織で複製が有効になっているアカウントのリストを表示するには、 SHOW REPLICATION ACCOUNTS をクエリします。

従来のアカウントロケーターもアカウント識別子として使用できますが、将来的に機能しなくなる可能性があるため、使用しないことをお勧めします。アカウントロケーターをアカウント識別子として使用する方法の詳細については、 データベースの複製とフェールオーバーの使用上の注意 をご参照ください。

REFRESH

プライマリデータベースのスナップショットからセカンダリデータベースを更新します。スナップショットには、オブジェクトとデータへの変更が含まれます。

ENABLE FAILOVER TO ACCOUNTS account_identifier [ , account_identifier ... ]

このプライマリデータベースのレプリカをプライマリデータベースとして機能するように昇格できる、組織内のアカウントのコンマ区切りリストを指定します。

account_identifier

アカウントの一意の識別子。優先識別子は organization_name.account_name です。組織で複製が有効になっているアカウントのリストを表示するには、 SHOW REPLICATION ACCOUNTS をクエリします。

従来のアカウントロケーターもアカウント識別子として使用できますが、将来的に機能しなくなる可能性があるため、使用しないことをお勧めします。アカウントロケーターをアカウント識別子として使用する方法の詳細については、 データベースの複製とフェールオーバーの使用上の注意 をご参照ください。

DISABLE FAILOVER [ TO ACCOUNTS account_identifier [ , account_identifier ... ] ]

このプライマリデータベースのフェールオーバーを無効にします。つまり、このデータベース(つまり、セカンダリデータベース)のレプリカをプライマリデータベースとして機能させることはできません。

必要に応じて、組織内のアカウントのコンマ区切りリストを指定して、指定したアカウントでのみこのデータベースのフェールオーバーを無効にします。

account_identifier

アカウントの一意の識別子。優先識別子は organization_name.account_name です。組織で複製が有効になっているアカウントのリストを表示するには、 SHOW REPLICATION ACCOUNTS をクエリします。

従来のアカウントロケーターもアカウント識別子として使用できますが、将来的に機能しなくなる可能性があるため、使用しないことをお勧めします。アカウントロケーターをアカウント識別子として使用する方法の詳細については、 データベースの複製とフェールオーバーの使用上の注意 をご参照ください。

PRIMARY

指定されたセカンダリ(レプリカ)データベースをプライマリデータベースとして機能するように昇格します。昇格すると、データベースは書き込み可能になります。同時に、以前のプライマリデータベースは読み取り専用のセカンダリデータベースになります。

使用上の注意

  • データベースの名前を変更するには、操作の実行に使用されるロールにはデータベースの CREATE DATABASE グローバル権限と OWNERSHIP 権限が必要です。

  • 2つのデータベースを交換するには、操作の実行に使用されるロールには両方のデータベースの OWNERSHIP 権限が必要です。

  • コメントを更新するには、操作を実行するロールに、データベースに対する MODIFY 権限が付与されているか、継承されている必要があります。

  • メタデータについて、

    注意

    Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。

データベースの複製とフェールオーバーの使用上の注意

注釈

Snowflakeは、 複数のアカウント間にわたる複製とフェールオーバーの概要 を使用してデータベースを複製することを推奨しています。 複製グループとフェールオーバーグループ を使用すると、グループ内にあるオブジェクトのポイントインタイムの一貫性を保ったまま、複数のデータベースと他のアカウントオブジェクトを複製できます。 機能の可用性サポートされているオブジェクト の完全なリストについては、 複数のアカウント間にわたる複製とフェールオーバーの概要 をご参照ください。

  • アカウントの管理者( ACCOUNTADMIN ロールを持つユーザー)のみが、データベースの複製とフェールオーバーを有効にして管理できます。

  • デフォルトの10 TB サイズ制限は、プライマリデータベースがセカンダリデータベースに最初に複製されるときに適用されます。サイズ制限を変更または削除するには、アカウントレベルで INITIAL_REPLICATION_SIZE_LIMIT_IN_TB パラメーターを設定します。

    現在、セカンダリデータベースの後続の更新に適用されるデフォルトのサイズ制限はありません。

  • アカウントを識別する方法としては、組織名とアカウント名をアカウント識別子として使用することがお勧めです。代わりに従来のアカウントロケーターを使用するときは、アカウントを一意に識別するために追加のセグメントを含めることが必要になる場合があります。以下のテーブルをご参照ください。

    アカウント識別子

    リモートアカウントの場所

    organization_name.account_name

    プライマリデータベースを格納するアカウントのリージョンまたはリージョングループに関係なく使用できる優先アカウント識別子。

    account_locator

    プライマリデータベースを格納するアカウントと同じ地域ですが、アカウントは異なります。

    snowflake_region.account_locator

    プライマリデータベースを保存するアカウントと同じリージョングループですが、リージョンは異なります。

    region_group.snowflake_region.account_locator

    プライマリデータベースを保存するアカウントと リージョングループ が異なります。

一般的な例

データベース db1 の名前を db2 に変更します。

ALTER DATABASE IF EXISTS db1 RENAME TO db2;
Copy

データベース複製の例

ローカルデータベース mydb1account1 アカウント内)を昇格してプライマリデータベースとして機能させ、 myorg 組織内の account2account3 の各アカウントが、このデータベースのレプリカを保存できるように指定します。

ALTER DATABASE mydb1 ENABLE REPLICATION TO ACCOUNTS myorg.account2, myorg.account3;
Copy

mydb1 プライマリデータベースの複製を無効にします。

ALTER DATABASE mydb1 DISABLE REPLICATION;
Copy