Proteção contra soltar objetos de esquema

Nesta página, descrevemos como proteger objetos de esquema, como tabelas, índices e colunas, contra exclusão acidental.

Entender a segurança de queda de objetos de esquema

A proteção contra exclusão de objetos de esquema do Spanner depende das estatísticas de acesso a objetos de esquema para determinar se um objeto pode ser excluído com segurança. Se o sistema determinar que o objeto não é seguro, ele vai rejeitar a solicitação do usuário para descartar o objeto de esquema. A remoção de um objeto desse tipo pode causar falhas em jobs do cliente que ainda acessam o objeto. Além disso, é muito difícil ou impossível restaurar um objeto descartado sem perda de dados.

Para isso, o Spanner rastreia estatísticas de acesso para cada objeto de esquema. Esse acesso inclui inserções, atualizações ou exclusões de DML, consultas SQL, gravações e leituras de API. Com essas estatísticas de acesso, o Spanner determina se um objeto de esquema ainda pode estar em uso. Se um objeto foi acessado recentemente, é provável que ele ainda esteja em uso.

Ativar a proteção contra exclusão de objetos de esquema

Para ativar a proteção contra remoção, defina a duração da inatividade como um valor diferente de zero, como "24h" ou "2d". A duração mínima é "0s" e a máxima é "7d". Defina a duração da inatividade como "24h" ou mais.

Se você definir a duração da inatividade como "24h", só será possível descartar um objeto de esquema se ele não tiver sido acessado nas últimas 24 horas.

GoogleSQL

Para mais informações, consulte 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" )'

Substitua:

  • DATABASE_NAME: o nome do banco de dados.
  • INSTANCE_ID: o identificador da instância do banco de dados.
  • DURATION: entre "0s" (inclusive) e "7d" (inclusive). Recomendado: "24h".

PostgreSQL

Para mais informações, consulte 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" '

Substitua:

  • DATABASE_NAME: o nome do banco de dados.
  • INSTANCE_ID: o identificador da instância do banco de dados.
  • DURATION: entre "0s" (inclusive) e "7d" (inclusive). Recomendado: "24h".

Desativar a proteção contra exclusão de objetos de esquema

Para desativar a proteção contra remoção, defina a duração da inatividade como zero, "0s", ou defina o valor da opção como nulo.

GoogleSQL

Para mais informações, consulte 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 )'

Substitua:

  • DATABASE_NAME: o nome do banco de dados.
  • INSTANCE_ID: o identificador da instância do banco de dados.

PostgreSQL

Para mais informações, consulte 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'

Substitua:

  • DATABASE_NAME: o nome do banco de dados.
  • INSTANCE_ID: o identificador da instância do banco de dados.

Advertências

A proteção contra soltar objetos de esquema não é ativada nos seguintes cenários:

  1. Você criou o banco de dados na última hora.
  2. Você criou o objeto de esquema dentro da duração de inatividade.
  3. O objeto tem acessos de leitura de baixa frequência (menos de 10 por hora).

O limite padrão de acesso de leitura é de 10 por hora, mas você pode substituir o padrão usando a seguinte opção de banco de dados:

GoogleSQL

Para mais informações, consulte 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

Para mais informações, consulte 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> '

As estatísticas de acesso não são coletadas nos seguintes casos:

  1. Os acessos com falha (consultas, DML etc.) não são contabilizados para o acesso do usuário.
  2. Os acessos do sistema não são contabilizados.
  3. Os acessos de gravação (incluindo inserções e atualizações de DML) são ignorados para índices.
  4. Os acessos de gravação são ignorados para colunas geradas armazenadas.

Solução de problemas

Se um objeto de esquema não for descartado e você não conseguir identificar o que está acessando, consulte o seguinte:

A seguir

Saiba como impedir a exclusão de bancos de dados.