用T-SQL語言還原資料庫

來源:互聯網
上載者:User
用T-SQL語言還原資料庫

T-SQL語言裡提供了RESTORE DATABASE語句來恢複Database Backup,用該語句可以恢複完整備份、差異備份、檔案和檔案組備份。如果要還原交易記錄備份則還可以用RESTORE LOG語句。雖然RESTORE DATABASE語句可以恢複完整備份、差異備份、檔案和檔案組備份,但是在恢複完整備份、差異備份與檔案和檔案組備份的文法上有一點點出入,下面分別介紹幾種類型備份的還原方法。

18.6.1  還原完整備份

還原完整備份的文法如下:

RESTORE DATABASE { database_name | @database_name_var }                  --資料庫名

[ FROM <backup_device> [ ,...n ] ]                                                --備份裝置

[ WITH

   [ { CHECKSUM | NO_CHECKSUM } ]                                        --是否校檢和

   [ [ , ] { CONTINUE_AFTER_ERROR | STOP_ON_ERROR } ]             --還原失敗是否繼續

   [ [ , ] ENABLE_BROKER ]                                           --啟動Service Broker

   [ [ , ] ERROR_BROKER_CONVERSATIONS ]                              --對束所有會話

   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ]        --用於還原的檔案

   [ [ , ] KEEP_REPLICATION ]                            --將複製設定為與記錄傳送一同使用

   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ]                    --媒體名

   [ [ , ] MEDIAPASSWORD = { mediapassword |                                  --媒體密碼

                    @mediapassword_variable } ]

   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ]     --資料還原為

                [ ,...n ]

   [ [ , ] NEW_BROKER ]                                  --建立新的service_broker_guid值

   [ [ , ] PASSWORD = { password | @password_variable } ]                     --備份組的密碼

   [ [ , ] { RECOVERY | NORECOVERY | STANDBY =                              --復原模式

          {standby_file_name | @standby_file_name_var }

   } ]

   [ [ , ] REPLACE ]                                                      --覆蓋現有資料庫

   [ [ , ] RESTART ]                                            --重新啟動被中斷的還原作業

   [ [ , ] RESTRICTED_USER ]                                      --限制訪問還原的資料庫

   [ [ , ] { REWIND | NOREWIND } ]                                    --是否釋放和重繞磁帶

   [ [ , ] { UNLOAD | NOUNLOAD } ]                                    --是否重繞並卸載磁帶

   [ [ , ] STATS [ = percentage ] ]                       --還原到其在指定的日期和時間時的狀態

   [ [ , ] { STOPAT = { date_time | @date_time_var }                  --還原到指定的日期和時間

    |  STOPATMARK = { 'mark_name' | 'lsn:lsn_number' }    --恢複為已標記的事務或記錄序號

              [ AFTER datetime ]

    |  STOPBEFOREMARK = { 'mark_name' | 'lsn:lsn_number' }

             [ AFTER datetime ]

   } ]

]

[;]

<backup_device> ::=

{

   { logical_backup_device_name |

            @logical_backup_device_name_var }

   | { DISK | TAPE } = { 'physical_backup_device_name' |

              @physical_backup_device_name_var }

}

其中大多參數在備份資料時已經介紹過了,下面介紹一些沒有介紹過的參數:

l  ENABLE_BROKER:啟動Service Broker以便訊息可以立即發送。

l  ERROR_BROKER_CONVERSATIONS:發生錯誤時結束所有會話,併產生一個錯誤指出資料庫已附加或還原。此時Service Broke將一直處于禁用狀態直到此操作完成,然後再將其啟用。

l  KEEP_REPLICATION:將複製設定為與記錄傳送一同使用。設定該參數後,在待命伺服器上還原資料庫時,可防止刪除複製設定。該參數不能與NORECOVERY參數同時使用。

l  MOVE:將邏輯名指定的資料檔案或記錄檔還原到所指定的位置,相當於圖18.14中所示的【將資料庫檔案還原為】功能。

l  NEW_BROKER:使用該參數在會在databases資料庫和還原資料庫中都建立一個新的service_broker_guid值,並通過清除結束所有交談端點。Service Broker已啟用,但未向遠端工作階段端點發送訊息。

l  RECOVERY:復原未提交的事務,使資料庫處於可以使用狀態。無法還原其他交易記錄

l  NORECOVERY:不對資料庫執行任何操作,不復原未提交的事務。可以還原其他交易記錄。

l  STANDBY:使資料庫處於唯讀模式。撤消未提交的事務,但將撤消操作儲存在待命資料庫檔案中,以便可以復原逆轉。

l  standby_file_name | @standby_file_name_var:指定一個允許撤消復原的待命資料庫檔案或變數。

l  REPLACE:會覆蓋所有現有資料庫以及相關檔案,包括已存在的同名的其他資料庫或檔案。

l  RESTART:指定SQL Serve 應重新啟動被中斷的還原作業。RESTAR從中斷點重新啟動還原作業。

l  RESTRICTED_USER:還原後的資料庫僅供db_owner、dbcreator或sysadmin的成員才能使用。

l  STOPAT:將資料庫還原到其在指定的日期和時間時的狀態。

l  STOPATMARK:恢複為已標記的事務或記錄序號。恢複中包括帶有已命名標記或 LSN 的事務,僅當該事務最初於實際產生事務時已獲得提交,才可進行本次提交。

l  TOPBEFOREMARK:恢複為已標記的事務或記錄序號。恢複中不包括帶有已命名標記或LSN的事務,在使用WITH RECOVERY時,事務將復原。

例十二、用名為“Northwind備份”的備份裝置來還原Northwind資料庫,其代碼如下:

USE master

RESTORE DATABASE Northwind

         FROM Northwind備份

在本例中,沒有使用指定備份裝置裡的哪一個備份組來還原資料庫備份,那麼預設使用備份裝置裡的第一個備份組還原資料庫。如果要指定用哪個備份組來還原資料庫,則要使用file參數指定。

例十三、用名為“Northwind備份”的備份裝置的第六個備份組來還原Northwind資料庫,其代碼如下:

USE master

RESTORE DATABASE Northwind

         FROM Northwind備份

         WITH FILE = 6

例十四、用名為“backup.bak”的備份檔案來還原Northwind資料庫,其代碼如下:

USE master

RESTORE DATABASE Northwind

FROM DISK='D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\

Backup\backup.bak'

18.6.2  還原差異備份

還原差異備份的文法與還原完整備份的文法是一樣的,只是在還原差異備份時,必須要先還原完整備份再還原差異備份,因此還原差異備份必須要分為兩步完成。完整備份與差異備份資料在同一個備份檔案或備份裝置中,也有可能是在不同的備份檔案或備份裝置中。如果在同一個備份檔案或備份裝置中,則必須要用file參數來指定備份組。無論是備份組是不是在同一個備份檔案(備份裝置)中,除了最後一個還原作業,其他所有還原作業都必須要加上NORECOVERY或STANDBY參數。

例十五、用名為“Northwind備份”的備份裝置的第一個備份組來還原Northwind資料庫的完整備份,再用第三個備份組來還原差異備份,其代碼如下:

USE master

RESTORE DATABASE Northwind

         FROM Northwind備份

         WITH FILE = 1,NORECOVERY

GO

RESTORE DATABASE Northwind

         FROM Northwind備份

         WITH FILE = 3

GO

如果單獨還原差異備份或在本例中完整備份代碼裡沒有加上NORECOVERY參數,都會出現18.16所示的無法還原差異備份資訊。

圖18.16 無法還原差異備份

18.6.3  還原交易記錄備份

SQL Server 2005中已經將交易記錄備份看成和完整備份、差異備份一樣的備份組,因此,還原交易記錄備份也可以和還原差異備份一樣,只要知道它在備份檔案或備份裝置裡是第幾個檔案集即可。

與還原差異備份相同,還原交易記錄備份必須要先還原在其之前的完整備份,除了最後一個還原作業,其他所有還原作業都必須要加上NORECOVERY或STANDBY參數。

例十六、用名為“Northwind備份”的備份裝置的第一個備份組來還原Northwind資料庫的完整備份,再用第二個備份組來還原交易記錄備份,其代碼如下:

USE master

RESTORE DATABASE Northwind

         FROM Northwind備份

         WITH FILE = 1,NORECOVERY

GO

RESTORE DATABASE Northwind

         FROM Northwind備份

         WITH FILE = 2

GO

使用RESTORE LOG語句也可以用來還原交易記錄備份,例十六的代碼也可以改為以下代碼:

USE master

RESTORE DATABASE Northwind

         FROM Northwind備份

         WITH FILE = 1,NORECOVERY

GO

RESTORE LOG Northwind

         FROM Northwind備份

         WITH FILE = 2

GO

18.6.4  還原檔案和檔案組備份

還原檔案和檔案組備份也可以使用RESTORE DATABASE語句,但是必須要在資料庫名與FROM之間加上“FILE”或“FILEGROUP”參數來指定要還原的檔案或檔案組。通常來說,在還原檔案和檔案組備份之後,還要再還原其他備份來獲得最近的資料庫狀態。

例十七、用名為“Northwind備份”的備份裝置的還原檔案和檔案組,再用第十五個備份組來還原交易記錄備份,其代碼如下:

USE master

RESTORE DATABASE Northwind

         FILEGROUP = 'PRIMARY'

         FROM Northwind備份

GO

RESTORE LOG Northwind

         FROM Northwind備份

         WITH FILE = 15

GO

18.6.5  將資料庫還原到某個時間點

有關“時間點”在上面章節裡提到過一點點,下面舉例詳細地介紹怎麼將資料庫還原到某個時間點。

假設一個資料庫,在上午8點做過一次完整備份、10點做過一次交易記錄備份,現在發現在9點15分時的一次資料更新是錯誤的,那麼能不能將資料恢複到9點14分時的資料庫狀態,還是只能恢複到10點所做的交易記錄備份時的狀態呢?

交易記錄的作用就是記錄每一次資料的修改記錄,所以從理論上來說,是可以恢複到任何一次操作之前的狀態。9點15分時的資料是錯誤的,那就將其恢複到9點14分的資料吧。

例十八、用名為“Northwind備份”的備份裝置的第17個備份組來還原Northwind資料庫的完整備份,再用第18個交易記錄備份集來將資料庫還原到9點14分,其代碼如下:

USE master

RESTORE DATABASE Northwind

         FROM Northwind備份

         WITH FILE = 17,NORECOVERY

GO

RESTORE LOG Northwind

         FROM Northwind備份

         WITH FILE = 18,STOPAT = '2006-9-21 9:14:00'

GO

技巧:在SQL Server Management Studio裡也可以完成同樣的操作,只要將圖18.12所示對話方塊裡設定好【目標時間點】即可。

18.6.6  將檔案還原到新位置上

使用RESTORE DATABASE語句也可以利用備份檔案建立一個新的資料庫。

例十九、用名為“Northwind備份”的備份裝置的第17個備份組來建立一個名為“Northwind_test”的新資料庫,其代碼如下:

USE master

RESTORE DATABASE Northwind_test

         FROM Northwind備份

         WITH FILE = 17,

         MOVE 'Northwind_Data' TO 'D:\Northwind_Data.MDF',

         MOVE 'Northwind_Log' TO 'D:\Northwind_Log.LDF',

         MOVE 'Northwind自訂資料檔案' TO 'D:\Northwind自訂資料檔案.NDF',

         MOVE 'Northwind自訂記錄檔' TO 'D:\Northwind自訂記錄檔.LDF'

GO

說明:

在使用RESTORE DATABASE還原資料庫時多次用到了file參數來指定備份組,那麼如何查看這個備份組的編號呢?在“查看備份裝置的內容”小節裡曾經介紹過怎麼查看備份裝置裡的備份組,18.9中所表示格的“Postition”列裡顯示的就是file參數所指定的數字。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.