共用方式為


還原資料與時間回溯

這很重要

這項功能在下列區域中處於公開預覽狀態:westus、、westus2eastuseastus2centralussouthcentralusnortheuropewesteuropeaustraliaeastbrazilsouthcanadacentralcentralindia、、 southeastasiauksouth

本頁說明如何利用子實例還原資料並在 Lakebase 資料庫實例上進行時間旅行。

何時應該建立子實例?

在下列案例中,建立子實例很有用:

  • 意外數據遺失復原: 如果昨天上午 10:23 刪除關鍵數據表,您可以建立設置為上午 10:22 的子實例,以便只擷取遺失的數據並合併回去。
  • 測試和 QA 環境: 從過去 X 天內的任何時間點複製類似生產環境(如還原視窗所定義),以驗證架構變更或執行整合測試。
  • 合規性和稽核: 布建子實例,以反映過去日期的資料庫狀態,以進行內部稽核、財務對帳或鑑識分析。

什麼是子實例?

子實例是原始資料庫實例的寫入複製。 它可以從目前的時間點或 還原視窗中的歷史時間點建立。 還原時間範圍會指定時間範圍(2-35 天),您可以從中執行時間點復原。 建立資料庫實例時會定義還原視窗。 您可以在此還原視窗內的任何時間點建立子實例,而不需要等待手動快照集或完整資料庫導出。

建立子實例之後,就可以進行查詢,直到刪除為止。 沒有自動到期的機制綁定在父機的還原視窗上。 這確保您即使在父實例的還原時間範圍已過期的情況下,也能隨時存取子實例建立時的時間點資料。

子實例會與父系隔離。 您在子實例上執行的任何讀取或寫入,都不會影響來源實例。 子實例所做的修改使用寫入時複製(copy-on-write),因此變更會以「delta」形式儲存。 這會保持未修改的數據共用,並將額外的記憶體降到最低。

建立一個子實例來進行時間旅行並還原資料

在下列案例中,建立子實例很有用:

  • 意外數據遺失復原: 如果昨天上午 10:23 刪除關鍵數據表,您可以建立設置為上午 10:22 的子實例,以便只擷取遺失的數據並合併回去。
  • 測試和 QA 環境: 從過去 X 天內的任何時間點複製類似生產環境(如還原視窗所定義),以驗證架構變更或執行整合測試。
  • 合規性和稽核: 布建子實例,以反映過去日期的資料庫狀態,以進行內部稽核、財務對帳或鑑識分析。

逐步教學

步驟 1:(可選)設定父資料庫實例的還原視窗

還原視窗的有效值介於 2 到 35 天之間,內含。 默認視窗為 7 天。 您可以在建立 實體時指定資料庫實例上的還原視窗。 請參閱 建立資料庫實例

使用 UI 或 API 修改資料庫實例的回復視窗:

UI

  1. 在工作區側邊欄中按下 [計算]
  2. 點擊 Lakebase Provisioned 標籤。
  3. 選取您要更新的資料庫實例。
  4. 按兩下右上角的 [編輯 ]。
  5. [還原] 視窗 (days)底下,設定還原視窗的天數。
  6. 點選 [儲存]。

curl (Unix指令)

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

啟用 [從父系建立 ] 時,還有兩個額外的參數可指定:

  • 父實例名稱: 您要從中建立子資料庫之父實例的名稱。
  • 包含父系的數據,最多可達: 您想要從中取得資料的特定歷史時間點。
    • 目前的時間點: 這會建立子實例,其中包含來自資料庫實例的最新數據。
    • 特定日期和時間: 這會在資料庫實例的還原視窗中,在特定時間點建立子實例。 子實例包含該特定時間點的所有數據。
    • 特定記錄序號: 從還原視窗中的特定預先寫入記錄檔 (WAL) 記錄序號 (LSN) 建立子實例。 PostgreSQL 使用 WAL 來支持復原,並將 LSN 指派給每個 WAL 記錄。 子實例包含該 WAL LSN 的所有數據。 如需有關 WAL 的詳細資訊,請參閱 WAL 內部。 若要取得目前的 LSN 值,請參閱 備份控制函式

curl (Unix指令)

使用資料庫實例的最新數據建立子實例。

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(可選):還原資料

在特定時間點建立子實例後,你可以將子實例的資料還原回你的生產實例。 這對於從意外遺失或資料損毀中恢復非常有用。

要還原資料:

  1. 使用你偏好的 PostgreSQL 用戶端或連線方式連接到子實例。 請參閱 連線和查詢
  2. 寫一個腳本,將所需資料從子實例複製到你的生產實例。 腳本應該會做以下操作:
    • 查詢子實例所需的特定資料表或資料
    • 在你的生產實例中插入或更新資料
    • 必要時處理任何衝突或資料轉換
  3. 先對一小部分資料測試還原操作以確保正確。
  4. 執行完整的還原腳本,將所有所需資料複製回生產環境。
  5. 在成功還原資料並確認生產實例正確後,刪除子實例。 要刪除你的實例,請參見 「刪除實例」。

局限性

  • 一次只能為資料庫實例建立一個子實例。
  • 除非刪除子實例,否則無法刪除父實例。
  • 子實例是專為短期測試或復原所設計。 子系或父系的大量修改可能會導致系統減少數據共用,並維護子系的完整複本。 記憶體使用量和成本可能會成長,以符合獨立資料庫實例的使用量。