復原到標示的交易

這個主題僅與包含標示的交易,且使用完整模式或大量記錄復原模式的資料庫有關。

如需有關還原至特定復原點之需求的詳細資訊,請參閱<將資料庫還原到備份中的時間點>。

SQL Server 支援將具名標示插入交易記錄,以允許復原至特定的標示。記錄標示是針對交易而設,並且只有在其相關的交易認可時才會插入。如此一來,標示可以結合特定工作,您也就可以復原至包含或排除此工作的某一點。

將具名標示插入交易記錄之前,請考慮以下幾點:

  • 因為交易標示須耗用記錄空間,所以除非它們在資料庫復原策略中扮演重要的角色,否則不應使用交易標示。

  • 標示的交易認可之後,會在 msdblogmarkhistory 資料表中插入一個資料列。

  • 如果標示交易跨越同一資料庫伺服器或不同伺服器上的多個資料庫,則標示會記錄在所有受影響的資料庫之記錄中。如需詳細資訊,請參閱<使用標示的交易 (完整復原模式)>。

[!附註]

如需有關如何標示交易的詳細資訊,請參閱<使用標示的交易 (完整復原模式)>。

將具名標示插入交易記錄檔中的 Transact-SQL 語法

若要將標示插入交易記錄,請使用 BEGIN TRANSACTION 陳述式和 WITH MARK [description] 子句。標示和交易的名稱相同。選擇性的 <description> 是標示的文字說明,而不是標示名稱。例如,在下列 BEGIN TRANSACTION 陳述式中建立的交易及標示名稱為 Tx1:

BEGIN TRANSACTION Tx1 WITH MARK 'not the mark name, just a description'  

交易記錄檔中會記錄標示名稱 (交易名稱)、描述、資料庫、使用者、datetime 資訊與記錄序號 (LSN)。datetime 資訊要與標示名稱一起使用,才能唯一識別標示。

如需有關如何將標示插入跨越多個資料庫的交易的詳細資訊,請參閱<使用標示的交易 (完整復原模式)>。

復原標示的 Transact-SQL 語法

針對標示的交易使用 RESTORE LOG 陳述式時,您可以使用下列其中一個子句,以在標示上或標示當前停止:

  • 使用 WITH STOPATMARK = '<mark_name>' 子句,以指定標示的交易為復原點。

    STOPATMARK 可向前復原標示,並將已標示的交易納入向前復原。

  • 使用 WITH STOPBEFOREMARK = '<mark_name>' 子句,以指定標示之前的記錄為復原點。

    STOPBEFOREMARK 可向前復原標示,並從向前復原中排除已標示的交易。

STOPATMARK 與 STOPBEFOREMARK 選項都支援選擇性的 AFTER datetime 子句。使用 datetime 時,標示名稱不必是唯一的。

若省略 AFTER datetime,向前復原會停在具有指定名稱的第一個標示。若指定 AFTER datetime,向前復原會在 datetime 上或之後,停止於具有指定名稱的第一個標示。

[!附註]

如同所有的時間點還原作業,當資料庫進行大量記錄的作業時,不允許其復原至標示。

若要還原標示的交易

如何:還原資料庫至標示的交易 (SQL Server Management Studio)

RESTORE (Transact-SQL)

準備記錄備份

就此範例而言,這些相關資料庫的適當備份策略如下:

  1. 兩個資料庫均使用完整復原模式。

  2. 建立每一個資料庫的完整備份。

    可循序或同時備份這些資料庫。

  3. 在備份交易記錄之前,先標示要在所有資料庫中執行的交易。如需有關如何建立標示的交易的詳細資訊,請參閱<使用標示的交易 (完整復原模式)>。

  4. 備份每個資料庫的交易記錄。

將資料庫復原至標示的交易

若要還原備份

  1. 盡可能建立未受損資料庫的結尾記錄備份

  2. 還原每個資料庫的最新完整資料庫備份。

  3. 識別所有交易記錄備份中可用的最新標示交易。此資訊是儲存在每一個伺服器上 msdb 資料庫的 logmarkhistory 資料表中。

  4. 識別所有包含此標示之相關資料庫的記錄備份。

  5. 還原每個記錄檔備份,停在標示的交易。

  6. 復原每個資料庫。