Questa pagina descrive come proteggere gli oggetti schema, come tabelle, indici e colonne, dall'eliminazione accidentale.
Informazioni sulla sicurezza dell'eliminazione degli oggetti 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 una 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 è stato eseguito l'accesso a un oggetto di recente, è probabile che sia ancora in uso.
Attivare la protezione dall'eliminazione degli oggetti schema
Per attivare la protezione dall'eliminazione, imposta la durata di inattività per la protezione dall'eliminazione su un valore di durata diverso da zero, ad esempio "24h" o "2d". La durata minima è "0s" e la durata massima è "7d". Ti consigliamo di impostare la durata di inattività su "24h" o un valore più lungo.
Se imposti la durata di inattività su "24h", puoi eliminare un oggetto schema solo se non è stato eseguito l'accesso all'oggetto nelle ultime 24 ore.
GoogleSQL
Per ulteriori informazioni, consulta 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" (inclusivo) e "7d" (inclusivo). Consigliato: "24h".
PostgreSQL
Per ulteriori informazioni, consulta 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" (inclusivo) e "7d" (inclusivo). Consigliato: "24h".
Disattivare la protezione dall'eliminazione degli oggetti schema
Per disattivare la protezione dall'eliminazione, imposta la durata di inattività su un valore di durata pari a zero, "0s", o imposta il valore dell'opzione su null.
GoogleSQL
Per ulteriori informazioni, consulta 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, consulta 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 dall'eliminazione degli oggetti schema non viene attivata nei seguenti scenari:
- Hai creato il database nell'ultima ora.
- L'oggetto ha accessi in lettura a bassa frequenza (meno di 10 all'ora).
Hai creato l'oggetto schema durante la durata 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, seschema_drop_protection_inactivity_periodè7d, qualsiasi tabella creata negli ultimi 7 giorni può essere eliminata anche se è stato eseguito l'accesso di recente.Questo comportamento facilita i test: se la protezione fosse 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 prima di poter eseguire la pulizia.
La soglia predefinita per l'accesso in lettura è di 10 all'ora, ma puoi sostituire il valore predefinito utilizzando la seguente opzione del database:
GoogleSQL
Per ulteriori informazioni, consulta 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, consulta 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:
- Gli accessi non riusciti (query, DML e così via) non vengono conteggiati per l'accesso utente.
- Gli accessi di sistema non vengono conteggiati.
- Gli accessi in scrittura (inclusi gli inserimenti e gli aggiornamenti DML) vengono ignorati per gli indici.
- 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.