重要
此功能在以下区域中为公共预览版:westus、westus2、eastus、eastus2、centralus、southcentralus、northeurope、westeurope、australiaeast、brazilsouth、canadacentral、centralindia、southeastasia、uksouth。
本页介绍如何使用子实例还原数据,并在 Lakebase 数据库实例上执行时间旅行。
何时应创建子实例?
在以下方案中,创建子实例非常有用:
- 意外数据丢失恢复: 如果一个关键表在昨天上午 10:23 被删除,你可以生成一个设置为上午 10:22 的子实例,只提取缺失的数据并将其合并回来。
- 测试和 QA 环境: 从过去 X 天内的任何点(由还原窗口定义)克隆类似生产的环境,以验证架构更改或运行集成测试。
- 合规性和审核: 为内部审计、财务对账或取证分析,提供一个反映过去日期数据库状态的子实例。
什么是子实例?
子实例是原始数据库实例的复制/写入克隆。 它可以从当前时间点创建,也可以从 还原窗口中的历史时间点创建。 还原窗口指定可用于执行时间点恢复的时间范围(2-35 天)。 创建数据库实例时定义还原窗口。 可以在此还原窗口中的任何时间点创建子实例,而无需等待手动快照或完整数据库导出。
创建子实例后,它可用于查询,直到删除它。 与父还原窗口无关的自动过期时间不存在。 这可确保即使父节点的还原窗口已过期,您也始终可以访问创建子实例时的时点数据。
子实例与父实例隔离。 对子实例执行的任何读取或写入都不会影响源实例。 对子实例进行的修改使用写入时复制,以便更改存储为“delta”。 这会保持未修改的数据共享,并最大程度地减少额外的存储。
创建子实例来时间回溯和恢复数据
在以下方案中,创建子实例非常有用:
- 意外数据丢失恢复: 如果一个关键表在昨天上午 10:23 被删除,你可以生成一个设置为上午 10:22 的子实例,只提取缺失的数据并将其合并回来。
- 测试和 QA 环境: 从过去 X 天内的任何点(由还原窗口定义)克隆类似生产的环境,以验证架构更改或运行集成测试。
- 合规性和审核: 为内部审计、财务对账或取证分析,提供一个反映过去日期数据库状态的子实例。
分步说明
步骤 1:(可选)在父数据库实例上配置还原窗口
还原窗口的有效值为 2 到 35 天(含)。 默认窗口为 7 天。 创建实例时,可以在数据库实例上指定还原窗口。 请参阅 “创建数据库实例”。
使用 UI 或 API 修改数据库实例的还原窗口:
UI
- 在工作区边栏中单击 “计算 ”。
- 单击 Lakebase Postgres 选项卡。
- 选择要更新的数据库实例。
- 单击右上角的 “编辑 ”。
- 在 “还原”窗口(天)下,设置还原窗口的天数。
- 单击“ 保存”。
curl
curl -s -X PATCH --header "Authorization: Bearer ${DATABRICKS_TOKEN}" $DBR_URL/database/instances/my-instance -d '{"retention_window_in_days": 14}'
步骤 2:创建子实例
在选定的还原点,子实例的角色和权限与父实例的角色和权限相同。 这可能会导致用户具有与父实例中授予的权限不匹配的权限。 查看 Azure Databricks 标识角色 并撤销对子实例的任何过时特权。
在创建常规数据库实例时,启用从父级创建以创建子实例。 请参阅 “创建和管理数据库实例”。
UI
启用 “从父级创建 ”后,还需要指定两个参数:
- 父实例名称: 要从中创建子数据库的父实例的名称。
- 包含来自父级的数据直到: 你希望从中获取数据的具体历史时间点。
curl
使用数据库实例的最新数据创建子实例。
curl -s -X POST --header "Authorization: Bearer ${DATABRICKS_TOKEN}" $DBR_URL/database/instances -d '{"name": "test", "capacity": "CU_2", "parent_instance_ref": {"name": "test-child"}}'
使用 UTC 指定的特定日期和时间创建包含数据的子实例。
curl -s -X POST --header "Authorization: Bearer ${DATABRICKS_TOKEN}" $DBR_URL/database/instances -d '{"name": "test", "capacity": "CU_2", "parent_instance_ref": {"name": "test-child", "branch_timestamp":"2025-05-23T17:21:00Z"}}'
使用数据库实例的特定 WAL LSN 中的数据创建子实例。
curl -s -X POST --header "Authorization: Bearer ${DATABRICKS_TOKEN}" $DBR_URL/database/instances -d '{"name": "test", "capacity": "CU_2", "parent_instance_ref": {"name": "test-child", "lsn":"0/2A156E"}}'
Python SDK
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.database import DatabaseInstance
# Initialize the Workspace client
w = WorkspaceClient()
parent_instance_name = "test-child"
instance_name = "test"
# Create a child instance using the most recent data from a database instance.
instance = w.database.create_database_instance(
DatabaseInstance(
name="my-database-instance",
capacity="CU_1",
parent_instance_ref={
"name": parent_instance_name
}
)
)
# Create a child instance with data from a specific date and time, specified in UTC.
instance = w.database.create_database_instance(
DatabaseInstance(
name=instance_name,
capacity="CU_1",
parent_instance_ref={
"name": parent_instance_name,
"branch_timestamp": "2025-05-23T17:21:00Z"
}
)
)
# Create a child instance with data from a specific WAL LSN of a database instance.
instance = w.database.create_database_instance(
DatabaseInstance(
name=instance_name,
capacity="CU_1",
parent_instance_ref={
"name": parent_instance_name,
"lsn": "0/2A156E"
}
)
)
CLI
# Create a database instance from the most recent data of a parent instance
databricks database create-database-instance my-database-instance \
--capacity CU_1 \
--parent-instance-ref '{"name": "my-parent-instance"}'
# Create a database instance from a specific date and time, specified in UTC
databricks database create-database-instance \
--json '{
"name": "my-database-instance",
"capacity": "CU_2",
"parent_instance_ref": {
"name": "my-parent-instance",
"branch_timestamp": "2025-05-23T17:21:00Z"
}
}'
# Create a database instance from a specific WAL LSN of a parent instance
databricks database create-database-instance \
--json '{
"name": "my-database-instance",
"capacity": "CU_2",
"parent_instance_ref": {
"name": "my-parent-instance",
"lsn": "0/2A156E"
}
}'
步骤 3(可选):还原数据
在特定时间点创建子实例后,可以将子实例中的数据还原回生产实例。 这对于从意外数据丢失或损坏中恢复非常有用。
还原数据:
- 使用首选 PostgreSQL 客户端或连接方法连接到子实例。 请参阅 “连接”和“查询”。
- 编写脚本,将所需数据从子实例复制到生产实例。 该脚本应执行以下作:
- 从子实例中查询所需的特定表或数据
- 在生产实例中插入或更新数据
- 根据需要处理任何冲突或数据转换
- 首先测试一小部分数据的还原作,以确保正确性。
- 运行完整还原脚本,将所有必需的数据复制回生产环境。
- 成功还原数据并验证生产实例是否正确后,请删除子实例。 若要删除实例,请参阅 “删除实例”。
局限性
- 一次只能为数据库实例创建一个子实例。
- 除非删除子实例,否则无法删除父实例。
- 子实例专为短期测试或恢复用途而设计。 对子级或父级进行大量修改可能会导致系统削弱数据共享能力,并为子级维持一个完整的副本。 存储使用量和成本可能会增加,以匹配独立数据库实例的使用量。