스키마 객체 삭제 보호

이 페이지에서는 테이블, 색인, 열과 같은 스키마 객체가 실수로 삭제되지 않도록 보호하는 방법을 설명합니다.

스키마 객체 삭제 안전성 이해

Spanner의 스키마 객체 삭제 보호 기능은 스키마 객체의 액세스 통계를 기반으로 객체를 삭제해도 안전한지를 판단합니다. 시스템이 해당 객체를 안전하지 않다고 판단하면, 사용자의 스키마 객체 삭제 요청을 거부합니다. 이러한 객체를 삭제하면 여전히 해당 객체에 액세스하는 클라이언트 작업이 실패할 수 있습니다. 또한 삭제된 객체를 데이터 손실 없이 복원하는 것은 매우 어렵거나 불가능합니다.

이를 위해 Spanner는 각 스키마 객체에 대한 액세스 통계를 추적합니다. 이 액세스에는 DML 삽입, 업데이트, 삭제 작업뿐 아니라 SQL 쿼리, API 쓰기 및 읽기가 포함됩니다. Spanner는 이러한 액세스 통계를 사용하여 스키마 객체가 여전히 사용 중인지 여부를 판단합니다. 객체에 최근에 액세스된 경우, 해당 객체는 여전히 사용 중일 가능성이 높습니다.

스키마 객체 삭제 보호 기능 사용 설정

삭제 보호 기능을 사용 설정하려면 "24h" 또는 "2d"와 같이 0이 아닌 기간 값으로 비활성 기간 설정합니다. 최소 기간은 "0s"이고 최대 기간은 "7d"입니다. 비활성 기간은 "24h" 이상으로 설정하는 것이 좋습니다.

비활성 기간을 "24h"로 설정한 경우, 지난 24시간 동안 액세스되지 않은 스키마 객체만 삭제할 수 있습니다.

GoogleSQL

자세한 내용은 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" )'

다음을 바꿉니다.

  • DATABASE_NAME: 데이터베이스 이름입니다.
  • INSTANCE_ID: 데이터베이스 인스턴스의 식별자입니다.
  • DURATION: "0s"(포함)~"7d"(포함) 사이의 값입니다. 권장: "24h"

PostgreSQL

자세한 내용은 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" '

다음을 바꿉니다.

  • DATABASE_NAME: 데이터베이스 이름입니다.
  • INSTANCE_ID: 데이터베이스 인스턴스의 식별자입니다.
  • DURATION: "0s"(포함)~"7d"(포함) 사이의 값입니다. 권장: "24h"

스키마 객체 삭제 보호 기능 사용 중지

삭제 보호 기능을 사용 중지하려면 비활성 기간을 0초("0s")로 설정하거나 옵션 값을 null로 설정합니다.

GoogleSQL

자세한 내용은 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 )'

다음을 바꿉니다.

  • DATABASE_NAME: 데이터베이스 이름입니다.
  • INSTANCE_ID: 데이터베이스 인스턴스의 식별자입니다.

PostgreSQL

자세한 내용은 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'

다음을 바꿉니다.

  • DATABASE_NAME: 데이터베이스 이름입니다.
  • INSTANCE_ID: 데이터베이스 인스턴스의 식별자입니다.

주의사항

다음과 같은 경우에는 스키마 객체 삭제 보호 기능이 활성화되지 않습니다.

  1. 데이터베이스를 최근 1시간 이내에 만들었습니다.
  2. 스키마 객체를 비활성 기간 내에 만들었습니다.
  3. 객체의 읽기 액세스 빈도가 낮습니다(시간당 10회 미만).

기본 읽기 액세스 임계값은 시간당 10회이지만, 다음 데이터베이스 옵션을 사용하여 기본값을 재정의할 수 있습니다.

GoogleSQL

자세한 내용은 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

자세한 내용은 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> '

다음과 같은 경우에는 액세스 통계가 수집되지 않습니다.

  1. 쿼리나 DML 등 실패한 액세스는 사용자 액세스로 집계되지 않습니다.
  2. 시스템 액세스는 집계되지 않습니다.
  3. 색인에 대해서는 쓰기 액세스(DML 삽입 및 업데이트 포함)가 무시됩니다.
  4. 저장된 생성 열에 대한 쓰기 액세스도 무시됩니다.

문제 해결

스키마 객체 삭제에 실패했는데 어떤 작업이 해당 객체에 액세스 중인지 식별할 수 없는 경우, 다음 항목을 참조하세요.

다음 단계

데이터베이스 삭제 방지 방법 알아보기