Protection contre la suppression d'objets de schéma

Cette page explique comment protéger les objets de schéma tels que les tables, les index et les colonnes contre toute suppression accidentelle.

Comprendre la sécurité de suppression des objets de schéma

La protection contre la suppression des objets de schéma de Spanner s'appuie sur les statistiques d'accès aux objets de schéma pour déterminer si un objet peut être supprimé sans risque. Si le système détermine que l'objet n'est pas sûr, il refuse la demande de l'utilisateur visant à supprimer l'objet de schéma. La suppression d'un tel objet peut entraîner l'échec des tâches client qui y accèdent encore. De plus, il est très difficile, voire impossible, de restaurer un objet supprimé sans perdre de données.

Pour ce faire, Spanner suit les statistiques d'accès pour chaque objet de schéma. Cet accès inclut les insertions, mises à jour ou suppressions LMD, les requêtes SQL, les écritures d'API et les lectures d'API. À l'aide de ces statistiques d'accès, Spanner détermine si un objet de schéma peut encore être utilisé. Si un objet a été consulté récemment, il est probablement encore utilisé.

Activer la protection contre la suppression des objets de schéma

Pour activer la protection contre les abandons, définissez une durée d'inactivité non nulle pour la protection contre les abandons, par exemple "24h" ou "2d". La durée minimale est de "0s" et la durée maximale est de "7d". Vous devez définir la durée d'inactivité sur "24 h" ou plus.

Si vous définissez la durée d'inactivité sur "24 h", vous ne pouvez supprimer un objet de schéma que s'il n'a pas été consulté au cours des dernières 24 heures.

GoogleSQL

Pour en savoir plus, consultez ALTER DATABASE.

gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_inactivity_period="DURATION" )'

Remplacez les éléments suivants :

  • DATABASE_NAME : nom de votre base de données.
  • INSTANCE_ID : identifiant de votre instance de base de données.
  • DURATION : entre "0s" (inclus) et "7d" (inclus). Recommandation : "24h".

PostgreSQL

Pour en savoir plus, consultez ALTER DATABASE.

gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME" SET spanner.schema_drop_protection_inactivity_period="DURATION" '

Remplacez les éléments suivants :

  • DATABASE_NAME : nom de votre base de données.
  • INSTANCE_ID : identifiant de votre instance de base de données.
  • DURATION : entre "0s" (inclus) et "7d" (inclus). Recommandation : "24h".

Désactiver la protection contre la suppression des objets de schéma

Pour désactiver la protection contre les pertes, définissez la durée d'inactivité sur zéro ("0s") ou définissez la valeur de l'option sur "null".

GoogleSQL

Pour en savoir plus, consultez ALTER DATABASE.

gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_inactivity_period=null )'

Remplacez les éléments suivants :

  • DATABASE_NAME : nom de votre base de données.
  • INSTANCE_ID : identifiant de votre instance de base de données.

PostgreSQL

Pour en savoir plus, consultez ALTER DATABASE.

gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET spanner.schema_drop_protection_inactivity_period=null'

Remplacez les éléments suivants :

  • DATABASE_NAME : nom de votre base de données.
  • INSTANCE_ID : identifiant de votre instance de base de données.

Mises en garde

La protection contre la suppression d'objets de schéma n'est pas activée dans les cas suivants :

  1. Vous avez créé la base de données au cours de la dernière heure.
  2. Vous avez créé l'objet de schéma pendant la durée d'inactivité.
  3. L'objet a des accès en lecture à basse fréquence (moins de 10 par heure).

Le seuil d'accès en lecture par défaut est de 10 par heure, mais vous pouvez le remplacer à l'aide de l'option de base de données suivante :

GoogleSQL

Pour en savoir plus, consultez ALTER DATABASE.

gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_usage_lowerbound=<threshold> )'

PostgreSQL

Pour en savoir plus, consultez ALTER DATABASE.

gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET spanner.schema_drop_protection_usage_lowerbound=<threshold> '

Les statistiques d'accès ne sont pas collectées dans les cas suivants :

  1. Les accès ayant échoué (requêtes, DML, etc.) ne sont pas comptabilisés dans l'accès utilisateur.
  2. Les accès système ne sont pas comptabilisés.
  3. Les accès en écriture (y compris les insertions et les mises à jour LMD) sont ignorés pour les index.
  4. Les accès en écriture sont ignorés pour les colonnes générées stockées.

Dépannage

Si un objet de schéma ne peut pas être supprimé et que vous ne parvenez pas à identifier ce qui y accède, consultez les informations suivantes :

Étapes suivantes

Découvrez comment empêcher la suppression d'une base de données.