Proteção contra eliminação de objetos de esquema

Esta página descreve como proteger objetos de esquemas, como tabelas, índices e colunas, contra a eliminação acidental.

Compreenda a segurança da eliminação de objetos de esquema

A proteção contra eliminação de objetos de esquema do Spanner baseia-se nas estatísticas de acesso a objetos de esquema para determinar se um objeto é seguro para eliminação. Se o sistema determinar que o objeto não é seguro, rejeita o pedido do utilizador para eliminar o objeto de esquema. A eliminação de um objeto deste tipo pode fazer com que as tarefas do cliente que ainda acedem ao objeto falhem. Além disso, restaurar um objeto eliminado sem incorrer em perda de dados é muito difícil ou impossível.

Para este efeito, o Spanner monitoriza as estatísticas de acesso para cada objeto de esquema. Este acesso inclui inserções, atualizações ou eliminações de DML, consultas SQL, gravações de API e leituras de API. Com estas estatísticas de acesso, o Spanner determina se um objeto de esquema ainda pode estar em utilização. Se um objeto tiver sido acedido recentemente, é provável que ainda esteja a ser usado.

Ative a proteção contra eliminação de objetos de esquemas

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

Se definir a duração da inatividade como "24 h", só pode eliminar um objeto de esquema se não tiver sido acedido 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 o seguinte:

  • DATABASE_NAME: o nome da sua base de dados.
  • INSTANCE_ID: o identificador da sua instância da base 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 o seguinte:

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

Desative a proteção contra eliminação de objetos de esquema

Para desativar a proteção contra quedas, defina a duração da inatividade como um valor de duração 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 o seguinte:

  • DATABASE_NAME: o nome da sua base de dados.
  • INSTANCE_ID: o identificador da sua instância da base 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 o seguinte:

  • DATABASE_NAME: o nome da sua base de dados.
  • INSTANCE_ID: o identificador da sua instância da base de dados.

Advertências

A proteção contra eliminação de objetos de esquemas não está ativada nos seguintes cenários:

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

O limite de acesso de leitura predefinido é de 10 por hora, mas pode substituir o predefinido através da seguinte opção de base 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 recolhidas nos seguintes casos:

  1. Os acessos falhados (consultas, DML, etc.) não são contabilizados para o acesso do utilizador.
  2. Os acessos do sistema não são contabilizados.
  3. Os acessos de escrita (incluindo inserções e atualizações de DML) são ignorados para os índices.
  4. Os acessos de escrita são ignorados para colunas geradas armazenadas.

Resolução de problemas

Se um objeto de esquema não for eliminado e não conseguir identificar o que lhe está a aceder, consulte o seguinte:

O que se segue?

Saiba como impedir a eliminação da base de dados.