還原使用 BACKUP 命令所做的備份。有關(guān)數(shù)據(jù)庫(kù)備份和還原操作的更多信息,請(qǐng)參見(jiàn)備份和還原數(shù)據(jù)庫(kù)。
還原整個(gè)數(shù)據(jù)庫(kù):
RESTORE DATABASE { database_name | @database_name_var }
[ FROM < backup_device > [ ,...n ] ]
[ WITH
????[ RESTRICTED_USER ]
????[ [ , ] FILE = { file_number | @file_number } ]
????[ [ , ] PASSWORD =
{ password | @password_variable
} ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
????
????[ [ , ] MEDIAPASSWORD =
{ mediapassword | @mediapassword_variable
} ]
????[ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
????????????[ ,...n ]
????[ [ , ] KEEP_REPLICATION ]
????[ [ , ] { NORECOVERY | RECOVERY | STANDBY = undo_file_name
} ]
????[ [ , ] { NOREWIND | REWIND } ]
????[ [ , ] { NOUNLOAD | UNLOAD } ]
????[ [ , ] REPLACE ]
????[ [ , ] RESTART ]
????[ [ , ] STATS [ = percentage ] ]
]
還原數(shù)據(jù)庫(kù)的部分內(nèi)容:
RESTORE DATABASE { database_name | @database_name_var }
????< file_or_filegroup > [ ,...n ]
[ FROM < backup_device > [ ,...n ] ]
[ WITH
????{ PARTIAL }
[ [ , ] FILE = { file_number | @file_number } ]
????
????[ [ , ] PASSWORD =
{ password | @password_variable
} ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
????
????[ [ , ] MEDIAPASSWORD =
{ mediapassword | @mediapassword_variable
} ]
????[ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
????????????[ ,...n ]
????[ [ , ] NORECOVERY ]
????[ [ , ] { NOREWIND | REWIND } ]
????[ [ , ] { NOUNLOAD | UNLOAD } ]
????[ [ , ] REPLACE ]
????[ [ , ] RESTRICTED_USER ]
????[ [ , ] RESTART ]
????[ [ , ] STATS [ = percentage ] ]
]
還原特定的文件或文件組:
RESTORE DATABASE { database_name | @database_name_var }
????< file_or_filegroup > [ ,...n ]
[ FROM < backup_device > [ ,...n ] ]
[ WITH
????[ RESTRICTED_USER ]
????[ [ , ] FILE = { file_number | @file_number } ]
????[ [ , ] PASSWORD =
{ password | @password_variable
} ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
????
????[ [ , ] MEDIAPASSWORD =
{ mediapassword | @mediapassword_variable
} ]
????[ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
????????????[ ,...n ]
????[ [ , ] NORECOVERY ]
????[ [ , ] { NOREWIND | REWIND } ]
????[ [ , ] { NOUNLOAD | UNLOAD } ]
????[ [ , ] REPLACE ]
????[ [ , ] RESTART ]
????[ [ , ] STATS [ = percentage ] ]
]
還原事務(wù)日志:
RESTORE LOG { database_name | @database_name_var }
[ FROM < backup_device > [ ,...n ] ]
[ WITH
????[ RESTRICTED_USER ]
????[ [ , ] FILE = { file_number | @file_number } ]
????[ [ , ] PASSWORD =
{ password | @password_variable
} ]
????[ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ]
????????????[ ,...n ]
????[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
????[ [ , ] MEDIAPASSWORD =
{ mediapassword | @mediapassword_variable
} ]
????[ [ , ] KEEP_REPLICATION ]
????[ [ , ] { NORECOVERY | RECOVERY | STANDBY = undo_file_name } ]
????[ [ , ] { NOREWIND | REWIND } ]
????[ [ , ] { NOUNLOAD | UNLOAD } ]
????[ [ , ] RESTART ]
????[ [ , ] STATS [= percentage ] ]
????[ [ , ] STOPAT = { date_time | @date_time_var }
????????| [ , ] STOPATMARK = 'mark_name' [ AFTER datetime ]
????????| [ , ] STOPBEFOREMARK = 'mark_name' [ AFTER datetime ]
????]
]
< backup_device > ::=
????{
????????{ 'logical_backup_device_name' | @logical_backup_device_name_var
}
????????| { DISK | TAPE } =
????????????{ 'physical_backup_device_name' | @physical_backup_device_name_var }
????}
< file_or_filegroup > ::=
????{
????????FILE = { logical_file_name | @logical_file_name_var
}
????????|
????????FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var}
????}
DATABASE
指定從備份還原整個(gè)數(shù)據(jù)庫(kù)。如果指定了文件和文件組列表,則只還原那些文件和文件組。
{database_name | @database_name_var}
是將日志或整個(gè)數(shù)據(jù)庫(kù)還原到的數(shù)據(jù)庫(kù)。如果將其作為變量 (@database_name_var) 提供,則可將該名稱(chēng)指定為字符串常量 (@database_name_var = database name) 或字符串?dāng)?shù)據(jù)類(lèi)型(ntext 或 text 數(shù)據(jù)類(lèi)型除外)的變量。
FROM
指定從中還原備份的備份設(shè)備。如果沒(méi)有指定 FROM 子句,則不會(huì)發(fā)生備份還原,而是恢復(fù)數(shù)據(jù)庫(kù)。可用省略 FROM 子句的辦法嘗試恢復(fù)通過(guò) NORECOVERY 選項(xiàng)還原的數(shù)據(jù)庫(kù),或切換到一臺(tái)備用服務(wù)器上。如果省略 FROM 子句,則必須指定 NORECOVERY、RECOVERY 或 STANDBY。
< backup_device >
指定還原操作要使用的邏輯或物理備份設(shè)備??梢允窍铝幸环N或多種形式:
如果使用的是含有 UNC 名稱(chēng)的網(wǎng)絡(luò)服務(wù)器或已重新定向的驅(qū)動(dòng)器號(hào),則請(qǐng)指定磁盤(pán)的設(shè)備類(lèi)型。運(yùn)行 SQL Server 時(shí)所使用的帳戶(hù)必須具有對(duì)遠(yuǎn)程計(jì)算機(jī)或網(wǎng)絡(luò)服務(wù)器的 READ 訪問(wèn)權(quán),這樣才能執(zhí)行RESTORE 操作。
n
是表示可以指定多個(gè)備份設(shè)備和邏輯備份設(shè)備的占位符。備份設(shè)備或邏輯備份設(shè)備最多可以為 64 個(gè)。
RESTRICTED_USER
限制只有 db_owner、dbcreator 或 sysadmin 角色的成員才能訪問(wèn)新近還原的數(shù)據(jù)庫(kù)。在 SQL Server 2000 中,RESTRICTED_USER 替換了選項(xiàng) DBO_ONLY。提供 DBO_ONLY 只是為了向后兼容。
該選項(xiàng)可與 RECOVERY 選項(xiàng)一起使用。
有關(guān)更多信息,請(qǐng)參見(jiàn)設(shè)置數(shù)據(jù)庫(kù)選項(xiàng)。
FILE = { file_number | @file_number }
標(biāo)識(shí)要還原的備份集。例如,file_number 為 1 表示備份媒體上的第一個(gè)備份集,file_number 為 2 表示第二個(gè)備份集。
PASSWORD = { password | @password_variable }
提供備份集的密碼。PASSWORD 是一個(gè)字符串。如果在創(chuàng)建備份集時(shí)提供了密碼,則從備份集執(zhí)行還原操作時(shí)必須提供密碼。
有關(guān)使用密碼的更多信息,請(qǐng)參見(jiàn)"權(quán)限"。
MEDIANAME = {media_name | @media_name_variable}
指定媒體名稱(chēng)。如果提供媒體名稱(chēng),該名稱(chēng)必須與備份卷上的媒體名稱(chēng)相匹配,否則還原操作將終止。如果 RESTORE 語(yǔ)句沒(méi)有給出媒體名稱(chēng),將不對(duì)備份卷執(zhí)行媒體名稱(chēng)匹配檢查。
重要??在備份和還原操作中使用一致的媒體名稱(chēng)可以為用于還原操作的媒體提供額外的安全檢查。
MEDIAPASSWORD = { mediapassword | @mediapassword_variable}
提供媒體集的密碼。MEDIAPASSWORD 是一個(gè)字符串。
如果格式化媒體集時(shí)提供了密碼,則訪問(wèn)該媒體集上的任何備份集時(shí)都必須提供該密碼。
MOVE 'logical_file_name' TO 'operating_system_file_name'
指定應(yīng)將給定的 logical_file_name 移到 operating_system_file_name。默認(rèn)情況下,logical_file_name 將還原到其原始位置。如果使用 RESTORE 語(yǔ)句將數(shù)據(jù)庫(kù)復(fù)制到相同或不同的服務(wù)器上,則可能需要使用 MOVE 選項(xiàng)重新定位數(shù)據(jù)庫(kù)文件以避免與現(xiàn)有文件沖突。可以在不同的 MOVE 語(yǔ)句中指定數(shù)據(jù)庫(kù)內(nèi)的每個(gè)邏輯文件。
說(shuō)明??使用 RESTORE FILELISTONLY 從備份集中獲取邏輯文件列表。
有關(guān)更多信息,請(qǐng)參見(jiàn)復(fù)制數(shù)據(jù)庫(kù)。
n
占位符,表示可通過(guò)指定多個(gè) MOVE 語(yǔ)句移動(dòng)多個(gè)邏輯文件。
NORECOVERY
指示還原操作不回滾任何未提交的事務(wù)。如果需要應(yīng)用另一個(gè)事務(wù)日志,則必須指定 NORECOVERY 或 STANDBY 選項(xiàng)。如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,則默認(rèn)為 RECOVERY。
當(dāng)還原數(shù)據(jù)庫(kù)備份和多個(gè)事務(wù)日志時(shí),或在需要多個(gè) RESTORE 語(yǔ)句時(shí)(例如在完整數(shù)據(jù)庫(kù)備份后進(jìn)行差異數(shù)據(jù)庫(kù)備份),SQL Server 要求在除最后的 RESTORE 語(yǔ)句外的所有其它語(yǔ)句上使用 WITH NORECOVERY 選項(xiàng)。
說(shuō)明??如果指定 NORECOVERY 選項(xiàng),數(shù)據(jù)庫(kù)將處于這個(gè)中間的未恢復(fù)狀態(tài)而不可用。
當(dāng)用于文件或文件組還原操作時(shí),NORECOVERY 強(qiáng)制數(shù)據(jù)庫(kù)在還原操作結(jié)束后保持還原狀態(tài)。這在以下情況中很有用:
RECOVERY
指示還原操作回滾任何未提交的事務(wù)。在恢復(fù)進(jìn)程后即可隨時(shí)使用數(shù)據(jù)庫(kù)。
如果安排了后續(xù) RESTORE 操作(RESTORE LOG 或從差異數(shù)據(jù)庫(kù)備份 RESTORE DATABASE),則應(yīng)改為指定 NORECOVERY 或 STANDBY。
如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,則默認(rèn)為 RECOVERY。當(dāng)從 SQL Server 早期版本中還原備份集時(shí),可能要求將數(shù)據(jù)庫(kù)升級(jí)。如果指定了 WITH RECOVERY,升級(jí)將自動(dòng)進(jìn)行。有關(guān)更多信息,請(qǐng)參見(jiàn)事務(wù)日志備份。
STANDBY = undo_file_name
指定撤消文件名以便可以取消恢復(fù)效果。撤消文件的大小取決于因未提交的事務(wù)所導(dǎo)致的撤消操作量。如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,則默認(rèn)為 RECOVERY。
STANDBY 允許將數(shù)據(jù)庫(kù)設(shè)定為在事務(wù)日志還原期間只能讀取,并且可用于備用服務(wù)器情形,或用于需要在日志還原操作之間檢查數(shù)據(jù)庫(kù)的特殊恢復(fù)情形。
如果指定的撤消文件名不存在,SQL Server 將創(chuàng)建該文件。如果該文件已存在,則 SQL Server 將重寫(xiě)它。
對(duì)同一數(shù)據(jù)庫(kù)的連續(xù)還原可以使用相同的撤消文件。有關(guān)更多信息,請(qǐng)參見(jiàn)使用備用服務(wù)器。
重要??如果指定的撤消文件所在的驅(qū)動(dòng)器上沒(méi)有可用的磁盤(pán)空間,還原操作將停止。
如果必須升級(jí)數(shù)據(jù)庫(kù),則不允許 STANDBY。
KEEP_REPLICATION
指示還原操作在將發(fā)布的數(shù)據(jù)庫(kù)還原到創(chuàng)建它的服務(wù)器以外的服務(wù)器上時(shí)保留復(fù)制設(shè)置。當(dāng)設(shè)置復(fù)制與日志傳送一同使用時(shí),需使用 KEEP_REPLICATION。這樣,當(dāng)在備用服務(wù)器上還原數(shù)據(jù)庫(kù)或日志備份并且恢復(fù)數(shù)據(jù)庫(kù)時(shí),可防止刪除復(fù)制設(shè)置。還原備份時(shí)若指定了該選項(xiàng),則不能選擇 NORECOVERY 選項(xiàng)。
NOUNLOAD
指定不在 RESTORE 后從磁帶機(jī)中自動(dòng)卸載磁帶。設(shè)置始終為 NOUNLOAD,直到指定 UNLOAD 為止。該選項(xiàng)只用于磁帶設(shè)備。如果對(duì) RESTORE 使用非磁帶設(shè)備,將忽略該選項(xiàng)。
NOREWIND
指定 SQL Server 在備份操作完成后使磁帶保持打開(kāi)。磁帶保持打開(kāi)將防止其它過(guò)程訪問(wèn)磁帶。直到頒發(fā) REWIND 或 UNLOAD 語(yǔ)句,或直到服務(wù)器關(guān)閉時(shí),才釋放該磁帶。通過(guò)查詢(xún) master 數(shù)據(jù)庫(kù)中的 sysopentapes 表可查找當(dāng)前打開(kāi)的一系列磁帶。
NOREWIND 意即 NOUNLOAD。該選項(xiàng)只用于磁帶設(shè)備。如果對(duì) RESTORE 使用非磁帶設(shè)備,將忽略該選項(xiàng)。
REWIND
指定 SQL Server 將釋放磁帶和倒帶。如果 NOREWIND 和 REWIND 均未指定,則默認(rèn)設(shè)置為 REWIND。該選項(xiàng)只用于磁帶設(shè)備。如果對(duì) RESTORE 使用非磁帶設(shè)備,將忽略該選項(xiàng)。
UNLOAD
指定在還原完成后自動(dòng)倒帶并卸載磁帶。啟動(dòng)新用戶(hù)會(huì)話(huà)時(shí)其默認(rèn)設(shè)置為 UNLOAD。設(shè)置始終為 UNLOAD,直到指定 NOUNLOAD 為止。該選項(xiàng)只用于磁帶設(shè)備。如果對(duì) RESTORE 使用非磁帶設(shè)備,將忽略該選項(xiàng)。
REPLACE
指定即使存在另一個(gè)具有相同名稱(chēng)的數(shù)據(jù)庫(kù),SQL Server 也應(yīng)該創(chuàng)建指定的數(shù)據(jù)庫(kù)及其相關(guān)文件。在這種情況下將刪除現(xiàn)有的數(shù)據(jù)庫(kù)。如果沒(méi)有指定 REPLACE 選項(xiàng),則將進(jìn)行安全檢查以防止意外重寫(xiě)其它數(shù)據(jù)庫(kù)。安全檢查可確保在以下情況中,RESTORE DATABASE 語(yǔ)句不會(huì)將數(shù)據(jù)庫(kù)還原到當(dāng)前服務(wù)器:
若無(wú)法驗(yàn)證現(xiàn)有文件是否屬于正在還原的數(shù)據(jù)庫(kù),則 REPLACE 也允許 RESTORE 重寫(xiě)該文件。RESTORE通常拒絕重寫(xiě)已存在的文件。
RESTART
指定 SQL Server 應(yīng)重新啟動(dòng)被中斷的還原操作。RESTART 從中斷點(diǎn)重新啟動(dòng)還原操作。
重要??只有當(dāng)直接從磁帶媒體還原以及跨越多個(gè)磁帶卷還原時(shí)才能使用該選項(xiàng)。
STATS [= percentage]
每當(dāng)另一個(gè) percentage 結(jié)束時(shí)顯示一條消息,并用于測(cè)量進(jìn)度。如果省略 percentage,則 SQL Server 每完成 10 個(gè)百分比顯示一條消息。
PARTIAL
指定部分還原操作。應(yīng)用程序或用戶(hù)錯(cuò)誤經(jīng)常影響到數(shù)據(jù)庫(kù)的某個(gè)孤立部分(如表)。這類(lèi)錯(cuò)誤的例子包括無(wú)效更新或錯(cuò)誤地除去表。為支持從這些事件恢復(fù),SQL Server 提供可將數(shù)據(jù)庫(kù)的部分內(nèi)容還原到另一個(gè)位置的機(jī)制,以使損壞或丟失的數(shù)據(jù)可復(fù)制回原始數(shù)據(jù)庫(kù)。
部分還原操作的粒度是數(shù)據(jù)庫(kù)文件組。主要文件和文件組始終同指定的文件及其相應(yīng)的文件組一起還原。還原結(jié)果是數(shù)據(jù)庫(kù)的一個(gè)子集。沒(méi)有還原的文件組被標(biāo)記為脫機(jī),不能對(duì)其進(jìn)行訪問(wèn)。
有關(guān)更多信息,請(qǐng)參見(jiàn)部分?jǐn)?shù)據(jù)庫(kù)還原操作。
指定包括在數(shù)據(jù)庫(kù)還原中的邏輯文件或文件組的名稱(chēng)??梢灾付ǘ鄠€(gè)文件或文件組。
當(dāng)使用此選項(xiàng)時(shí),最后一個(gè)文件或文件組還原操作完成后,必須將事務(wù)日志應(yīng)用于數(shù)據(jù)庫(kù)文件,以便前滾文件使之與數(shù)據(jù)庫(kù)的其余部分保持一致。如果被還原的文件自上次備份后沒(méi)有一個(gè)做過(guò)修改,則不必應(yīng)用事務(wù)日志。RESTORE 語(yǔ)句向用戶(hù)通告這一情況。
n
是一個(gè)占位符,表示可以指定多個(gè)文件和文件組。對(duì)文件或文件組的最大個(gè)數(shù)沒(méi)有限制。
LOG
指定對(duì)該數(shù)據(jù)庫(kù)應(yīng)用事務(wù)日志備份。必須按有序順序應(yīng)用事務(wù)日志。SQL Server 檢查已備份的事務(wù)日志,以確保按正確的序列將事務(wù)裝載到正確的數(shù)據(jù)庫(kù)。若要應(yīng)用多個(gè)事務(wù)日志,請(qǐng)?jiān)诔詈笠粋€(gè)外的所有還原操作中使用 NORECOVERY 選項(xiàng)。有關(guān)更多信息,請(qǐng)參見(jiàn)事務(wù)日志備份。
STOPAT = date_time | @date_time_var
指定將數(shù)據(jù)庫(kù)還原到其在指定的日期和時(shí)間時(shí)的狀態(tài)。如果對(duì) STOPAT 使用變量,則該變量必須是 varchar、char、smalldatetime 或 datetime 數(shù)據(jù)類(lèi)型。只有在指定的日期和時(shí)間前寫(xiě)入的事務(wù)日志記錄才能應(yīng)用于數(shù)據(jù)庫(kù)。
說(shuō)明??如果指定的 STOPAT 時(shí)間超出 RESTORE LOG 操作的結(jié)束范圍,數(shù)據(jù)庫(kù)將處于不可恢復(fù)的狀態(tài),其效果與在 RESTORE LOG 中使用 NORECOVERY 一樣。
STOPATMARK = 'mark_name' [ AFTER datetime ]
指定恢復(fù)到指定的標(biāo)記,包括包含該標(biāo)記的事務(wù)。如果省略 AFTER datetime,恢復(fù)操作將在含有指定名稱(chēng)的第一個(gè)標(biāo)記處停止。如果指定 AFTER datetime,恢復(fù)操作將在含有在 datetime 時(shí)或 datetime 時(shí)之后的指定名稱(chēng)的第一個(gè)標(biāo)記處停止。
STOPBEFOREMARK = 'mark_name' [ AFTER datetime ]
指定恢復(fù)到指定的標(biāo)記,但不包括包含該標(biāo)記的事務(wù)。如果省略 AFTER datetime,恢復(fù)操作將在含有指定名稱(chēng)的第一個(gè)標(biāo)記處停止。如果指定 AFTER datetime,恢復(fù)操作將在含有在 datetime 時(shí)或 datetime 時(shí)之后的指定名稱(chēng)的第一個(gè)標(biāo)記處停止。
在還原過(guò)程中,指定的數(shù)據(jù)庫(kù)必須不處于使用狀態(tài)。指定數(shù)據(jù)庫(kù)中的任何數(shù)據(jù)將由還原的數(shù)據(jù)替換。
有關(guān)數(shù)據(jù)庫(kù)恢復(fù)的更多信息,請(qǐng)參見(jiàn)備份和還原數(shù)據(jù)庫(kù)。
只要操作系統(tǒng)支持?jǐn)?shù)據(jù)庫(kù)排序規(guī)則,就可以跨平臺(tái)執(zhí)行還原操作,即使這些平臺(tái)使用不同的處理器類(lèi)型。有關(guān)更多信息,請(qǐng)參見(jiàn) SQL Server 排序規(guī)則基礎(chǔ)知識(shí)。
下面是 SQL Server支持的還原類(lèi)型:
有關(guān)更多信息,請(qǐng)參見(jiàn)事務(wù)日志備份。
若要維護(hù)向后兼容性,可以在 RESTORE 語(yǔ)句語(yǔ)法中使用以下關(guān)鍵字:
當(dāng)使用 RESTORE DATABASE 語(yǔ)句時(shí),可還原的數(shù)據(jù)庫(kù)選項(xiàng)(除 offline 外的所有其它 ALTER DATABASE 可設(shè)置選項(xiàng),以及 merge publish、published 和 subscribed 復(fù)制選項(xiàng))將在 BACKUP 操作結(jié)束時(shí)大規(guī)模地重置為設(shè)置值。
說(shuō)明??該行為與 Microsoft SQL Server 的早期版本不同。
但是,使用選項(xiàng) WITH RESTRICTED_USER 將替代用戶(hù)訪問(wèn)選項(xiàng)設(shè)置的行為。該設(shè)置總是通過(guò)在 RESTORE 語(yǔ)句后加上 WITH RESTRICTED_USER 選項(xiàng)來(lái)設(shè)置。
有關(guān)更多信息,請(qǐng)參見(jiàn)備份和還原復(fù)制數(shù)據(jù)庫(kù)。
SQL Server 包含下列還原歷史記錄表,這些表跟蹤每個(gè)計(jì)算機(jī)系統(tǒng)的 RESTORE 活動(dòng):
說(shuō)明??執(zhí)行 RESTORE 時(shí),將修改備份歷史記錄表。
還原已損壞的 master 數(shù)據(jù)庫(kù)需要特殊的過(guò)程。有關(guān)更多信息,請(qǐng)參見(jiàn)還原 master 數(shù)據(jù)庫(kù)。
通過(guò) Microsoft? SQL Server? 2000 創(chuàng)建的備份無(wú)法還原為 SQL Server 的早期版本。
如果不存在要還原的數(shù)據(jù)庫(kù),則用戶(hù)必須有 CREATE DATABASE 權(quán)限才能執(zhí)行 RESTORE。如果存在該數(shù)據(jù)庫(kù),則 RESTORE 權(quán)限默認(rèn)授予 sysadmin 和 dbcreator 固定服務(wù)器角色成員以及該數(shù)據(jù)庫(kù)的所有者 (dbo)。
RESTORE 權(quán)限被授予那些成員資格信息始終可由服務(wù)器使用的角色。因?yàn)橹挥性诠潭〝?shù)據(jù)庫(kù)可以訪問(wèn)且沒(méi)有損壞時(shí)(在執(zhí)行 RESTORE 時(shí)并不會(huì)總是這樣)才能檢查固定數(shù)據(jù)庫(kù)角色成員資格,所以 db_owner 固定數(shù)據(jù)庫(kù)角色成員沒(méi)有 RESTORE 權(quán)限。
此外,用戶(hù)可以為媒體集、備份集或兩者指定密碼。如果為媒體集指定了密碼,則用戶(hù)若只是適當(dāng)?shù)墓潭ǚ?wù)器和數(shù)據(jù)庫(kù)角色成員還不足以執(zhí)行備份。用戶(hù)還必須提供媒體密碼才能執(zhí)行這些操作。同樣,除非在還原命令中指定正確的媒體集密碼和備份集密碼,否則不能執(zhí)行還原操作。
在 BACKUP 語(yǔ)句中,定義備份集密碼和媒體集密碼為可選功能。使用密碼可防止利用 SQL Server 2000 工具未經(jīng)授權(quán)地執(zhí)行還原操作和在媒體中添加備份集,但是,密碼不能防止通過(guò) FORMAT 選項(xiàng)重寫(xiě)媒體。
因此,盡管使用密碼對(duì)防止利用 SQL Server 工具未經(jīng)授權(quán)地訪問(wèn)媒體內(nèi)容有幫助,但密碼不能防止媒體內(nèi)容被破壞。密碼不能完全防止未經(jīng)授權(quán)地訪問(wèn)媒體內(nèi)容,原因在于備份集中的數(shù)據(jù)沒(méi)有加密,理論上可以被專(zhuān)為此目的創(chuàng)建的程序所檢查。對(duì)于安全性至關(guān)重要的場(chǎng)合,防止未經(jīng)授權(quán)的個(gè)人訪問(wèn)媒體非常重要。
指定密碼時(shí)不限定使用者的做法是錯(cuò)誤的。
說(shuō)明??所有的示例均假定已執(zhí)行了完整數(shù)據(jù)庫(kù)備份。
說(shuō)明??MyNwind 數(shù)據(jù)庫(kù)僅供舉例說(shuō)明。
下例顯示還原完整數(shù)據(jù)庫(kù)備份。
RESTORE DATABASE MyNwind
FROM MyNwind_1
下例還原完整數(shù)據(jù)庫(kù)備份后還原差異備份。另外,下例還說(shuō)明如何還原媒體上的另一個(gè)備份集。差異備份追加到包含完整數(shù)據(jù)庫(kù)備份的備份設(shè)備上。
RESTORE DATABASE MyNwind
FROM MyNwind_1
WITH NORECOVERY
RESTORE DATABASE MyNwind
FROM MyNwind_1
WITH FILE = 2
下例使用 RESTART 選項(xiàng)重新啟動(dòng)因服務(wù)器電源故障而中斷的 RESTORE 操作。
-- This database RESTORE halted prematurely due to power failure.
RESTORE DATABASE MyNwind
FROM MyNwind_1
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE MyNwind
FROM MyNwind_1 WITH RESTART
下例還原完整數(shù)據(jù)庫(kù)和事務(wù)日志,并將已還原的數(shù)據(jù)庫(kù)移動(dòng)到 C:\Program Files\Microsoft SQL Server\MSSQL\Data 目錄下。
RESTORE DATABASE MyNwind
FROM MyNwind_1
WITH NORECOVERY,
MOVE 'MyNwind' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.mdf',
MOVE 'MyNwindLog1' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.ldf'
RESTORE LOG MyNwind
FROM MyNwindLog1
WITH RECOVERY
下例顯示使用 BACKUP 和 RESTORE 語(yǔ)句創(chuàng)建 Northwind 數(shù)據(jù)庫(kù)的復(fù)本。MOVE 語(yǔ)句使數(shù)據(jù)和日志文件還原到指定的位置。RESTORE FILELISTONLY 語(yǔ)句用于確定待還原數(shù)據(jù)庫(kù)內(nèi)的文件數(shù)及名稱(chēng)。該數(shù)據(jù)庫(kù)的新復(fù)本稱(chēng)為 TestDB。有關(guān)更多信息,請(qǐng)參見(jiàn) RESTORE FILELISTONLY。
BACKUP DATABASE Northwind
TO DISK = 'c:\Northwind.bak'
RESTORE FILELISTONLY
FROM DISK = 'c:\Northwind.bak'
RESTORE DATABASE TestDB
FROM DISK = 'c:\Northwind.bak'WITH MOVE 'Northwind' TO 'c:\test\testdb.mdf',
MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'
GO
下例將數(shù)據(jù)庫(kù)還原到其在 1998 年 4 月 15 日中午 12 點(diǎn)時(shí)的狀態(tài),并顯示涉及多個(gè)日志和多個(gè)備份設(shè)備的還原操作。
RESTORE DATABASE MyNwind
FROM MyNwind_1, MyNwind_2
WITH NORECOVERY
RESTORE LOG MyNwind
FROM MyNwindLog1
WITH NORECOVERY
RESTORE LOG MyNwind
FROM MyNwindLog2
WITH RECOVERY, STOPAT = 'Apr 15, 1998 12:00 AM'
下例顯示從 TAPE 備份設(shè)備還原完整數(shù)據(jù)庫(kù)備份。
RESTORE DATABASE MyNwind
\\
FROM TAPE = '.\tape0'
下例還原一個(gè)包含兩個(gè)文件、一個(gè)文件組和一個(gè)事務(wù)日志的數(shù)據(jù)庫(kù)。
RESTORE DATABASE MyNwind
FILE = 'MyNwind_data_1',
FILE = 'MyNwind_data_2',
FILEGROUP = 'new_customers'
FROM MyNwind_1
WITH NORECOVERY
-- Restore the log backup.
RESTORE LOG MyNwind
FROM MyNwindLog1
下例顯示將事務(wù)日志還原到名為"RoyaltyUpdate"的標(biāo)記處。
BEGIN TRANSACTION RoyaltyUpdate
WITH MARK 'Update royalty values'
GO
USE pubs
GO
UPDATE roysched
SET royalty = royalty * 1.10
WHERE title_id LIKE 'PC%'
GO
COMMIT TRANSACTION RoyaltyUpdate
GO
--Time passes. Regular database
--and log backups are taken.
--An error occurs.
USE master
GO
RESTORE DATABASE pubs
FROM Pubs1
WITH FILE = 3, NORECOVERY
GO
RESTORE LOG pubs
FROM Pubs1
WITH FILE = 4,
STOPATMARK = 'RoyaltyUpdate'
相關(guān)文章