Protezione da eliminazione degli oggetti di schema

Questa pagina descrive come proteggere gli oggetti schema come tabelle, indici e colonne dall'eliminazione accidentale.

Informazioni sulla sicurezza dell'eliminazione degli oggetti dello schema

La protezione dall'eliminazione degli oggetti schema di Spanner si basa sulle statistiche di accesso agli oggetti schema per determinare se è sicuro eliminare un oggetto. Se il sistema determina che l'oggetto non è sicuro, rifiuta la richiesta dell'utente di eliminare l'oggetto schema. L'eliminazione di un oggetto di questo tipo potrebbe causare l'errore dei job client che accedono ancora all'oggetto. Inoltre, il ripristino di un oggetto eliminato senza incorrere in perdita di dati è molto difficile o impossibile.

A questo scopo, Spanner tiene traccia delle statistiche di accesso per ogni oggetto schema. Questo accesso include inserimenti, aggiornamenti o eliminazioni DML, query SQL, scritture API e letture API. Utilizzando queste statistiche di accesso, Spanner determina se un oggetto schema potrebbe essere ancora in uso. Se un oggetto è stato accessibile di recente, è probabile che sia ancora in uso.

Abilita la protezione da eliminazione degli oggetti dello schema

Per attivare la protezione da caduta, imposta la durata dell'inattività per la protezione da caduta su un valore di durata diverso da zero, ad esempio "24 ore" o "2 giorni". La durata minima è "0s" e quella massima è "7d". Devi impostare la durata dell'inattività su "24 ore" o un periodo più lungo.

Se imposti la durata dell'inattività su "24 ore", puoi eliminare un oggetto schema solo se non è stato eseguito l'accesso all'oggetto nelle ultime 24 ore.

GoogleSQL

Per ulteriori informazioni, vedi 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" )'

Sostituisci quanto segue:

  • DATABASE_NAME: il nome del database.
  • INSTANCE_ID: l'identificatore dell'istanza del database.
  • DURATION: tra "0s" (incluso) e "7d" (incluso). Consigliato: "24 ore".

PostgreSQL

Per ulteriori informazioni, vedi 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" '

Sostituisci quanto segue:

  • DATABASE_NAME: il nome del database.
  • INSTANCE_ID: l'identificatore dell'istanza del database.
  • DURATION: tra "0s" (incluso) e "7d" (incluso). Consigliato: "24 ore".

Disattiva la protezione da eliminazione degli oggetti dello schema

Per disattivare la protezione dalle cadute, imposta la durata dell'inattività su un valore di durata pari a zero, "0s", o imposta il valore dell'opzione su null.

GoogleSQL

Per ulteriori informazioni, vedi 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 )'

Sostituisci quanto segue:

  • DATABASE_NAME: il nome del database.
  • INSTANCE_ID: l'identificatore dell'istanza del database.

PostgreSQL

Per ulteriori informazioni, vedi 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'

Sostituisci quanto segue:

  • DATABASE_NAME: il nome del database.
  • INSTANCE_ID: l'identificatore dell'istanza del database.

Precisazioni

La protezione da eliminazione degli oggetti dello schema non è attivata nei seguenti scenari:

  1. Hai creato il database nell'ultima ora.
  2. L'oggetto ha accessi in lettura a bassa frequenza (meno di 10 all'ora).
  3. Hai creato l'oggetto schema nel periodo di inattività. Ciò significa che se un oggetto schema è stato creato più di recente rispetto alla durata specificata in schema_drop_protection_inactivity_period, non è protetto dall'eliminazione. Ad esempio, se schema_drop_protection_inactivity_period è 7d, qualsiasi tabella creata negli ultimi 7 giorni può essere eliminata anche se è stata consultata di recente.

    Questo comportamento facilita i test: se la protezione venisse applicata agli oggetti creati di recente, non potresti creare, testare ed eliminare immediatamente una tabella temporanea, ma dovresti attendere 7 giorni prima che il periodo di inattività trascorra e sia possibile eseguire la pulizia.

La soglia predefinita di accesso in lettura è 10 all'ora, ma puoi sostituirla utilizzando la seguente opzione di database:

GoogleSQL

Per ulteriori informazioni, vedi 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

Per ulteriori informazioni, vedi 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> '

Le statistiche di accesso non vengono raccolte nei seguenti casi:

  1. Gli accessi non riusciti (query, DML e così via) non vengono conteggiati per l'accesso utente.
  2. Gli accessi di sistema non vengono conteggiati.
  3. Gli accessi in scrittura (inclusi inserimenti e aggiornamenti DML) vengono ignorati per gli indici.
  4. Gli accessi in scrittura vengono ignorati per le colonne generate archiviate.

Risoluzione dei problemi

Se l'eliminazione di un oggetto schema non riesce e non riesci a identificare chi vi accede, consulta quanto segue:

Passaggi successivi

Scopri come impedire l'eliminazione del database.