Asp.net 不使用SQLDMO实现数据库备份和还原
??? 數據備份:
???????
BACKUP
備份整個數據庫、事務日志,或者備份一個或多個文件或文件組。有關數據庫備份和恢復操作的更多信息,請參見備份和還原數據庫。
語法
備份整個數據庫:
BACKUP DATABASE { database_name | @database_name_var }
TO < backup_device > [ ,...n ]
[ WITH
????[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
????[ [ , ] DESCRIPTION = { 'text' | @text_variable } ]
????[ [ , ] DIFFERENTIAL ]
????[ [ , ] EXPIREDATE = { date | @date_var }
????????| RETAINDAYS = { days | @days_var } ]
????[ [ , ] PASSWORD = { password | @password_variable } ]
????[ [ , ] FORMAT | NOFORMAT ]
????[ [ , ] { INIT | NOINIT } ]
????[ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]
????[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
????[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
????[ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
????[ [ , ] { NOSKIP | SKIP } ]
????[ [ , ] { NOREWIND | REWIND } ]
????[ [ , ] { NOUNLOAD | UNLOAD } ]
????[ [ , ] RESTART ]
????[ [ , ] STATS [ = percentage ] ]
]
備份特定的文件或文件組:
BACKUP DATABASE { database_name | @database_name_var }
????< file_or_filegroup > [ ,...n ]
TO < backup_device > [ ,...n ]
[ WITH
????[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
????[ [ , ] DESCRIPTION = { 'text' | @text_variable } ]
????[ [ , ] DIFFERENTIAL ]
????[ [ , ] EXPIREDATE = { date | @date_var }
????????| RETAINDAYS = { days | @days_var } ]
????[ [ , ] PASSWORD = { password | @password_variable } ]
????[ [ , ] FORMAT | NOFORMAT ]
????[ [ , ] { INIT | NOINIT } ]
????[ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]
????[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
????[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
????[ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
????[ [ , ] { NOSKIP | SKIP } ]
????[ [ , ] { NOREWIND | REWIND } ]
????[ [ , ] { NOUNLOAD | UNLOAD } ]
????[ [ , ] RESTART ]
????[ [ , ] STATS [ = percentage ] ]
]
備份一個事務日志:
BACKUP LOG { database_name | @database_name_var }
{
????TO < backup_device > [ ,...n ]
????[ WITH
????????[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
????????[ [ , ] DESCRIPTION = { 'text' | @text_variable } ]
????????[ [ ,] EXPIREDATE = { date | @date_var }
????????????| RETAINDAYS = { days | @days_var } ]
????????[ [ , ] PASSWORD = { password | @password_variable } ]
????????[ [ , ] FORMAT | NOFORMAT ]
????????[ [ , ] { INIT | NOINIT } ]
????????[ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]
????????[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
????????[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]
????????[ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
????????[ [ , ] NO_TRUNCATE ]
????????[ [ , ] { NORECOVERY | STANDBY = undo_file_name } ]
????????[ [ , ] { NOREWIND | REWIND } ]
????????[ [ , ] { NOSKIP | SKIP } ]
????????[ [ , ] { NOUNLOAD | UNLOAD } ]
????????[ [ , ] RESTART ]
????????[ [ , ] STATS [ = percentage ] ]
????]
}
< 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 }
????}
截斷事務日志:
BACKUP LOG { database_name | @database_name_var }
{
????[ WITH
????????{ NO_LOG | TRUNCATE_ONLY } ]
}
參數
DATABASE
指定一個完整的數據庫備份。假如指定了一個文件和文件組的列表,那么僅有這些被指定的文件和文件組被備份。
說明??在進行完整數據庫備份或差異數據庫備份時,Microsoft? SQL Server? 備份足夠的事務日志,以生成一個將在還原數據庫時使用的一致的數據庫。在 master 數據庫上只能采用完整數據庫備份。
?
{ database_name | @database_name_var }
指定了一個數據庫,從該數據庫中對事務日志、部分數據庫或完整的數據庫進行備份。如果作為變量 (@database_name_var) 提供,則可將該名稱指定為字符串常量 (@database_name_var = database name) 或字符串數據類型(ntext 或 text 數據類型除外)的變量。
< backup_device >
指定備份操作時要使用的邏輯或物理備份設備。可以是下列一種或多種形式:
- { logical_backup_device_name } | { @logical_backup_device_name_var }
- 是由 sp_addumpdevice 創建的備份設備的邏輯名稱,數據庫將備份到該設備中,其名稱必須遵守標識符規則。如果將其作為變量 (@logical_backup_device_name_var) 提供,則可將該備份設備名稱指定為字符串常量 (@logical_backup_device_name_var = logical backup device name) 或字符串數據類型(ntext 或 text 數據類型除外)的變量。
- 允許在指定的磁盤或磁帶設備上創建備份。在執行 BACKUP 語句之前不必存在指定的物理設備。如果存在物理設備且 BACKUP 語句中沒有指定 INIT 選項,則備份將追加到該設備。
當指定 TO DISK 或 TO TAPE 時,請輸入完整路徑和文件名。例如,DISK = 'C:/Program Files/Microsoft SQL Server/MSSQL/BACKUP/Mybackup.dat' 或 TAPE = '//./TAPE0'。
說明??對于備份到磁盤的情況,如果輸入一個相對路徑名,備份文件將存儲到默認的備份目錄中。該目錄在安裝時被設置并且存儲在 KEY_LOCAL_MACHINE/Software/Microsoft/MSSQLServer/MSSQLServer 目錄下的 BackupDirectory 注冊表鍵值中。
如果使用的是具有統一命名規則 (UNC) 名稱的網絡服務器或已重新定向的驅動器號,則請指定磁盤的設備類型。
當指定多個文件時,可以混合邏輯文件名(或變量)和物理文件名(或變量)。但是,所有的設備都必須為同一類型(磁盤、磁帶或管道)。
Windows 98 不支持備份到磁盤。
n
是表示可以指定多個備份設備的占位符。備份設備數目的上限為 64。
BLOCKSIZE = { blocksize | @blocksize_variable }
用字節數來指定物理塊的大小。在 Windows NT 系統上,默認設置是設備的默認塊大小。一般情況下,當 SQL Server 選擇適合于設備的塊大小時不需要此參數。在基于 Windows 2000 的計算機上,默認設置是 65,536(64 KB,是 SQL Server 支持的最大大小)。
對于磁盤,BACKUP 自動決定磁盤設備合適的塊大小。
說明??如果要將結果備份集存儲到 CD-ROM 中然后從 CD-ROM 中恢復,請將 BLOCKSIZE 設為 2048。
?
磁帶的默認 BLOCKSIZE 為 65,536 (64 KB)。顯式聲明塊大小將替代 SQL Server 選擇的塊大小。
DESCRIPTION = { 'text' | @text_variable }
指定描述備份集的自由格式文本。該字符串最長可以有 255 個字符。
DIFFERENTIAL
指定數據庫備份或文件備份應該與上一次完整備份后改變的數據庫或文件部分保持一致。差異備份一般會比完整備份占用更少的空間。對于上一次完整備份時備份的全部單個日志,使用該選項可以不必再進行備份。有關更多信息,請參見差異數據庫備份和文件差異備份。
說明??在進行完整數據庫備份或差異備份時,SQL Server 備份足夠的事務日志,從而在恢復數據庫時生成一個一致的數據庫。
?
EXPIREDATE = { date | @date_var }
指定備份集到期和允許被重寫的日期。如果將該日期作為變量 (@date_var) 提供,則可以將該日期指定為字符串常量 (@date_var = date)、字符串數據類型變量(ntext 或 text 數據類型除外)、smalldatetime 或者 datetime 變量,并且該日期必須符合已配置的系統 datetime 格式。
RETAINDAYS = { days | @days_var }
指定必須經過多少天才可以重寫該備份媒體集。假如用變量 (@days_var) 指定,該變量必須為整型。
重要??假如 EXPIREDATE 或 RETAINDAYS 沒有指定,有效期將取決于 sp_configure 的 media retention 配置設置。這些選項僅僅阻止 SQL Server 重寫文件。用其它方法可擦除磁帶,而通過操作系統可以刪除磁盤文件。有關過期驗證的更多信息,請參見本主題的 SKIP 和 FORMAT。
?
PASSWORD = { password | @password_variable }
為備份集設置密碼。 PASSWORD 是一個字符串。如果為備份集定義了密碼,必須提供這個密碼才能對該備份集執行任何還原操作。
重要??備份集密碼防止未經授權即通過 SQL Server 2000 工具訪問備份集的內容,但是不能防止重寫備份集。
?
有關使用密碼的更多信息,請參見"權限"部分。
FORMAT
指定應將媒體頭寫入用于此備份操作的所有卷。任何現有的媒體頭都被重寫。FORMAT 選項使整個媒體內容無效,并且忽略任何現有的內容。
重要??使用 FORMAT 要謹慎。格式化一個備份設備或媒體將使整個媒體集不可用。例如,如果初始化現有條帶備份集中的單個磁帶,則整個備份集都將變得不可用。
?
通過指定 FORMAT,備份操作也就暗示了 SKIP 和 INIT;這些都不必顯式說明。
NOFORMAT
指定媒體頭不應寫入所有用于該備份操作的卷中,并且不要重寫該備份設備除非指定了 INIT。
INIT
指定應重寫所有備份集,但是保留媒體頭。如果指定了 INIT,將重寫那個設備上的所有現有的備份集數據。
當遇到以下幾種情況之一時不重寫備份媒體:
- 媒體上的備份設置沒有全部過期。有關更多信息,請參見 EXPIREDATE 和 RETAINDAYS 選項。
- 如果 BACKUP 語句給出了備份集名,該備份集名與備份媒體上的名稱不匹配。有關更多信息,請參見 NAME 子句。
使用 SKIP 選項替代這些檢查。有關使用 SKIP、NOSKIP、INIT 和 NOINIT 時的相互作用關系的更多信息,請參見注釋部分。
說明??如果備份媒體有密碼保護,SQL Server 將不寫入媒體,除非提供媒體密碼。SKIP 選項不替代此檢查。只有通過格式化才能重寫受密碼保護的媒體。有關更多信息,請參見 FORMAT 選項。
?
NOINIT
表示備份集將追加到指定的磁盤或磁帶設備上,以保留現有的備份集。NOINIT 是默認設置。
RESTORE 命令的 FILE 選項用于在還原時選擇適當的備份集。有關更多信息,請參見 RESTORE。
如果為媒體集定義了媒體密碼,則必須提供密碼。
MEDIADESCRIPTION = { text | @text_variable }
指明媒體集的自由格式文本描述,最多為 255 個字符。
MEDIADESCRIPTION = { text | @text_variable }
為整個備份媒體集指明媒體名,最多為 128 個字符。假如指定了 MEDIANAME,則它必須與以前指定的媒體名相匹配,該媒體名已存在于備份卷中。假如沒有指定 MEDIANAME,或指定了 SKIP 選項,將不會對媒體名進行驗證檢查。
MEDIAPASSWORD = { mediapassword | @mediapassword_variable }
為媒體集設置密碼。MEDIAPASSWORD 是一個字符串。
如果為媒體集定義了密碼,則在該媒體集上創建備份集時必須提供此密碼。另外,從該媒體集執行任何還原操作時也必須提供媒體密碼。只有通過格式化才能重寫受密碼保護的媒體。有關更多信息,請參見 FORMAT 選項。
有關使用密碼的更多信息,請參見"權限"部分。
NAME = { backup_set_name | @backup_set_var }
指定備份集的名稱。名稱最長可達 128 個字符。假如沒有指定 NAME,它將為空。
NORECOVERY
只與 BACKUP LOG 一起使用。備份日志尾部并使數據庫處于正在還原的狀態。當將故障轉移到輔助數據庫或在 RESTORE 操作前保存日志尾部時,NORECOVERY 很有用。
STANDBY = undo_file_name
只與 BACKUP LOG 一起使用。備份日志尾部并使數據庫處于只讀或備用模式。撤消文件名指定了容納回滾更改的存儲,如果隨后應用 RESTORE LOG 操作,則必須撤消這些回滾更改。
如果指定的撤消文件名不存在,SQL Server 將創建該文件。如果該文件已存在,則 SQL Server 將重寫它。有關更多信息,請參見使用備用服務器。
NOREWIND
指定 SQL Server 在備份操作完成后使磁帶保持打開。NOREWIND 意即 NOUNLOAD。SQL Server 將保留磁帶驅動器的所有權,直到 BACKUP或 RESTORE 命令使用 REWIND 為止。
如果無意中使磁帶處于打開狀態,則釋放磁帶的最快方法是使用下面的 RESTORE 命令:
RESTORE LABELONLY FROM TAPE = <name> WITH REWIND
通過查詢 master 數據庫中的 sysopentapes 表可以查找正在打開的磁帶列表。
REWIND
指定 SQL Server 將釋放磁帶和倒帶。如果 NOREWIND 和 REWIND 均未指定,則默認設置為 REWIND。
NOSKIP
指示 BACKUP 語句在可以重寫媒體上的所有備份集之前先檢查它們的過期日期。
SKIP
禁用備份集過期和名稱檢查,這些檢查一般由 BACKUP 語句執行以防重寫備份集。有關更多信息,請參見注釋部分。
NOUNLOAD
指定不在備份后從磁帶驅動器中自動卸載磁帶。設置始終為 NOUNLOAD,直到指定 UNLOAD 為止。該選項只用于磁帶設備。
UNLOAD
指定在備份完成后自動倒帶并卸載磁帶。啟動新用戶會話時其默認設置為 UNLOAD。該設置一直保持到用戶指定了 NOUNLOAD 時為止。該選項只用于磁帶設備。
RESTART
指定 SQL Server 重新啟動一個被中斷的備份操作。因為 RESTART 選項在備份操作被中斷處重新啟動該操作,所以它節省了時間。若要重新啟動一個特定的備份操作,請重復整個 BACKUP 語句并且加入 RESTART 選項。不一定非要使用 RESTART 選項,但是它可以節省時間。
重要??該選項只用于導向磁帶媒體的備份和跨越了多個磁帶卷的備份。在備份的第一卷上永遠不會有重新啟動操作。
?
STATS [= percentage]
每當另一個 percentage 結束時顯示一條消息,它被用于測量進度。如果省略 percentage,SQL Server 將每完成 10 個百分點顯示一條消息。
<file_or_filegroup>
指定包含在數據庫備份中的文件或文件組的邏輯名。可以指定多個文件或文件組。
FILE = { logical_file_name | @logical_file_name_var }
給一個或多個包含在數據庫備份中的文件命名。
FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }
給一個或多個包含在數據庫備份中的文件組命名。
說明??當數據庫的大小和性能要求使得進行完整數據庫備份不切實際時,備份一個文件。若要單獨備份事務日志,請使用 BACKUP LOG。
?
重要??必須通過使用 BACKUP LOG 提供事務日志的單獨備份,才能使用文件和文件組備份來恢復數據庫。有關文件備份的更多信息,請參見備份使用文件備份。
?
如果恢復模型為 SIMPLE,則不允許文件和文件組備份。
n
是一個占位符,表示可以指定多個文件和文件組。對文件或文件組的最大個數沒有限制。
LOG
指定只備份事務日志。該日志是從上一次成功執行了的 LOG 備份到當前日志的末尾。一旦備份日志,可能會截斷復制或活動事務不再需要的空間。
說明??假如備份日志看來并沒有截斷大部分的日志,則有可能在日志中存在一個舊的開放事務。可以使用 DBCC SQLPERF (LOGSPACE) 觀察日志空間。有關更多信息,請參見事務日志備份。
?
NO_LOG | TRUNCATE_ONLY
無須備份復制日志即刪除不活動的日志部分,并且截斷日志。該選項會釋放空間。因為并不保存日志備份,所以沒有必要指定備份設備。NO_LOG 和 TRUNCATE_ONLY 是同義的。
使用 NO_LOG 或 TRUNCATE_ONLY 備份日志后,記錄在日志中的更改不可恢復。為了恢復,請立即執行 BACKUP DATABASE。
NO_TRUNCATE
允許在數據庫損壞時備份日志。
注釋
可以將數據庫或日志備份追加到任何磁盤或磁帶設備上,從而使得數據庫和它的事務日志能存儲在一個物理位置中。
當數據庫正在使用時,SQL Server 使用一個聯機備份過程來對數據庫進行備份。下面的列表包括在數據庫或事務日志備份時無法進行的操作:
- 在備份操作時允許進行文件管理操作,如帶有 ADD FILE 或 REMOVE FILE 選項的 ALTER DATABASE 語句,以及 INSERT、UPDATE 或 DELETE 語句。
- 收縮數據庫或文件。這包括自動收縮操作。
假如在這些操作正在進行時啟動備份,備份將終止。假如正在進行備份時,試圖進行這些操作,則操作會失敗。
只要操作系統支持數據庫的排序規則,就可以在不同的平臺之間執行備份操作,即使這些平臺使用不同的處理器類型。有關更多信息,請參見 SQL Server 排序規則基礎知識。
備份文件格式
因為 SQL Server 2000 的備份格式遵從 Microsoft 磁帶格式 (MTF),該格式與 Windows NT 磁帶備份所使用的格式相同,所以 SQL Server 備份可與 Windows NT 備份共存于磁帶媒體上。若要確保相互操作性,磁帶應由 NTBackup 格式化。
備份類型
SQL Server 支持的備份類型包括:
- 完整數據庫備份,它備份包括事務日志的整個數據庫。
- 在完整數據庫備份之間執行差異數據庫備份。
- 事務日志備份。
日志備份序列提供了連續的事務信息鏈,可支持從數據庫、差異或文件備份中快速恢復。
- 文件和文件組備份。
當時間限制使得完整數據庫備份不切實際時,請使用 BACKUP 備份數據庫文件和文件組,而不是備份完整數據庫。若要備份一個文件而不是整個數據庫時,請合理安排步驟以確保數據庫中所有的文件按規則備份。同時必須進行單獨的事務日志備份。在恢復一個文件備份后,使用事務日志將文件內容前滾,使其與數據庫其余部分一致。
在條帶集中使用的備份設備必須一直在條帶集中使用(除非在某處用 FORMAT 重新初始化),而且設備數目不變。在備份設備已定義為條帶集的組成部分后,就不能用于單個設備備份,除非指定了 FORMAT。同樣,一個含有非條帶集備份的備份設備不能用于條帶集,除非指定了 FORMAT。使用 FORMAT 來分開條帶備份集。
如果寫入媒體頭時未指定 MEDIANAME 或 MEDIADESCRIPTION,則與空項對應的媒體頭字段將為空。
如果恢復模型為 SIMPLE,則無法使用 BACKUP LOG。應該使用 BACKUP DATABASE 來替代。
SKIP、NOSKIP、INIT 和 NOINIT 間的相互作用
下表說明 { INIT | NOINIT }和{ NOSKIP | SKIP } 子句間是如何相互作用的。
說明??在所有這些交互操作中,如果磁帶媒體為空或磁帶備份文件不存在,則寫入媒體頭并繼續。如果媒體頭不為空或不含有效的媒體頭,則指出這是無效的 MTF 媒體并取消備份。
?
| ? | INIT | NOINIT |
|---|---|---|
| SKIP | 如果卷中包含有效的1 媒體頭,則驗證媒體密碼并重寫媒體上的全部備份集,僅保留媒體頭。 如果卷不含有效的媒體頭,則使用給定的 MEDIANAME、MEDIAPASSWORD 和 MEDIADESCRIPTION(若有)生成媒體頭。 | 如果卷中包含有效的媒體頭,則驗證媒體密碼并添加備份集,并保留所有現有備份集。 如果卷不含有效的媒體頭,則會出錯。 |
| NOSKIP | 如果該卷包含一個有效的媒體頭,將執行以下檢查:
如果這些檢查都通過了,將重寫該媒體上一切備份集,只保留媒體頭。 如果卷不含有效的媒體頭,則使用給定的 MEDIANAME、MEDIAPASSWORD 和 MEDIADESCRIPTION(若有)生成媒體頭。 | 如果該卷包含一個有效的媒體頭,將驗證媒體密碼*并且驗證媒體是否名匹配所給的 MEDIANAME(假如有的話)。如果匹配,追加備份集,同時保留所有現有的備份集。 如果卷不含有效的媒體頭,則會出錯。 |
1. 有效性包括 MTF 版本號和其它標題信息。如果不支持指定的版本或指定的版本不是期望值,將會發生錯誤。
2. 用戶必須屬于適當的固定數據庫或服務器角色,并提供執行備份操作所需的正確媒體密碼。
說明??為保持向后兼容性,在 BACKUP 語句的語法中可使用 DUMP 關鍵字替代 BACKUP 關鍵字。另外,可使用 TRANSACTION 關鍵字替代 LOG 關鍵字。
?
備份歷史表
SQL Server 使用以下的備份歷史表來跟蹤備份活動:
- backupfile
- backupmediafamily
- backupmediaset
- backupset
執行 RESTORE 時,將修改備份歷史記錄表。
兼容性注意事項
注意??無法在早期 SQL Server 版本中還原使用 Microsoft? SQL Server? 2000 創建的備份。
?
權限
BACKUP DATABASE 和 BACKUP LOG 權限默認情況下授予 sysadmin 固定服務器角色和 db_owner 及 db_backupoperator 固定數據庫角色的成員。
此外,用戶可以為媒體集、備份集或兩者指定密碼。如果為媒體集指定了密碼,則用戶若只是適當的固定服務器和數據庫角色成員還不足以執行備份。用戶還必須提供媒體密碼才能執行這些操作。同樣,除非在還原命令中指定正確的媒體集密碼和備份集密碼,否則不能執行還原操作。
在 BACKUP 語句中,定義備份集密碼和媒體集密碼為可選功能。使用密碼可防止利用 SQL Server 2000 工具未經授權地執行還原操作和在媒體中添加備份集,但是,密碼不能防止通過 FORMAT 選項重寫媒體。
因此,盡管使用密碼對防止利用 SQL Server 工具未經授權地訪問媒體內容有幫助,但密碼不能防止媒體內容被破壞。密碼不能完全防止未經授權地訪問媒體內容,原因在于備份集中的數據沒有加密,理論上可以被專為此目的創建的程序所檢查。對于安全性至關重要的場合,防止未經授權的個人訪問媒體非常重要。
為不是用相關密碼創建的對象指定密碼是錯誤的做法。
BACKUP 使用由 PASSWORD 選項提供的備份集密碼創建備份集。另外,BACKUP 正常情況下在寫入媒體之前驗證由 MEDIAPASSWORD 選項提供的媒體密碼。BACKUP 不驗證媒體密碼的唯一情況是當格式化媒體時,這將重寫媒體頭。BACKUP 只在下列情況下格式化媒體:
- 如果指定了 FORMAT 選項。
- 如果媒體頭無效且指定了 INIT。
- 如果正在寫入延續卷。
如果 BACKUP 寫入媒體頭,BACKUP 將給 MEDIAPASSWORD 選項中指定的值指派媒體集密碼。
有關密碼對 SKIP、NOSKIP、INIT 和 NOINIT 選項的影響的更多信息,請參見注釋部分。
備份設備物理文件的所有權和權限問題可能會妨礙備份操作。SQL Server 必須能夠讀取并寫入設備;運行 SQL Server 服務的帳戶必須有寫入權限。但是,為設備在系統表中添加項目的 sp_addumpdevice 不檢查文件訪問權。備份設備物理文件的這些問題可能直到為備份或還原而訪問物理資源時才會出現。
示例
A. 備份整個 MyNwind 數據庫
說明??MyNwind 數據庫僅用于演示。
?
下例創建用于存放 MyNwind 數據庫完整備份的邏輯備份設備。
-- Create a logical backup device for the full MyNwind backup. USE master EXEC sp_addumpdevice 'disk', 'MyNwind_1', DISK ='c:/Program Files/Microsoft SQL Server/MSSQL/BACKUP/MyNwind_1.dat' -- Back up the full MyNwind database. BACKUP DATABASE MyNwind TO MyNwind_1
B. 備份數據庫和日志
本例創建了一個數據庫和日志的完整備份。將數據庫備份到稱為 MyNwind_2 的邏輯備份設備上,然后將日志備份到稱為 MyNwindLog1 的邏輯備份設備上。
說明??創建邏輯備份設備需要一次完成。
?
-- Create the backup device for the full MyNwind backup. USE master EXEC sp_addumpdevice 'disk', 'MyNwind_2', 'c:/Program Files/Microsoft SQL Server/MSSQL/BACKUP/MyNwind_2.dat' --Create the log backup device. USE master EXEC sp_addumpdevice 'disk', 'MyNwindLog1', 'c:/Program Files/Microsoft SQL Server/MSSQL/BACKUP/MyNwindLog1.dat' -- Back up the full MyNwind database. BACKUP DATABASE MyNwind TO MyNwind_2 -- Update activity has occurred since the full database backup. -- Back up the log of the MyNwind database. BACKUP LOG MyNwind TO MyNwindLog1
數據庫還原
RESTORE
還原使用 BACKUP 命令所做的備份。有關數據庫備份和還原操作的更多信息,請參見備份和還原數據庫。
語法
還原整個數據庫:
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 ] ]
]還原數據庫的部分內容:
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 ] ]
]還原事務日志:
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
指定從備份還原整個數據庫。如果指定了文件和文件組列表,則只還原那些文件和文件組。
{database_name | @database_name_var}
是將日志或整個數據庫還原到的數據庫。如果將其作為變量 (@database_name_var) 提供,則可將該名稱指定為字符串常量 (@database_name_var = database name) 或字符串數據類型(ntext 或 text 數據類型除外)的變量。
FROM
指定從中還原備份的備份設備。如果沒有指定 FROM 子句,則不會發生備份還原,而是恢復數據庫。可用省略 FROM 子句的辦法嘗試恢復通過 NORECOVERY 選項還原的數據庫,或切換到一臺備用服務器上。如果省略 FROM 子句,則必須指定 NORECOVERY、RECOVERY 或 STANDBY。
< backup_device >
指定還原操作要使用的邏輯或物理備份設備。可以是下列一種或多種形式:
- {'logical_backup_device_name' | @logical_backup_device_name_var}
- 是由 sp_addumpdevice 創建的備份設備(數據庫將從該備份設備還原)的邏輯名稱,該名稱必須符合標識符規則。如果作為變量 (@logical_backup_device_name_var) 提供,則可以指定字符串常量 (@logical_backup_device_name_var = logical_backup_device_name) 或字符串數據類型(ntext 或 text 數據類型除外)的變量作為備份設備名。
- 允許從命名磁盤或磁帶設備還原備份。磁盤或磁帶的設備類型應該用設備的真實名稱(例如:完整的路徑和文件名)來指定:DISK = 'C:/Program Files/Microsoft SQL Server/MSSQL/BACKUP/Mybackup.dat' 或 TAPE = '//./TAPE0'。如果指定為變量 (@physical_backup_device_name_var),則設備名稱可以是字符串常量 (@physical_backup_device_name_var = 'physical_backup_device_name') 或字符串數據類型(ntext 或 text 數據類型除外)的變量。
如果使用的是含有 UNC 名稱的網絡服務器或已重新定向的驅動器號,則請指定磁盤的設備類型。運行 SQL Server 時所使用的帳戶必須具有對遠程計算機或網絡服務器的 READ 訪問權,這樣才能執行RESTORE 操作。
'physical_backup_device_name' | @physical_backup_device_name_var
n
是表示可以指定多個備份設備和邏輯備份設備的占位符。備份設備或邏輯備份設備最多可以為 64 個。
RESTRICTED_USER
限制只有 db_owner、dbcreator 或 sysadmin 角色的成員才能訪問新近還原的數據庫。在 SQL Server 2000 中,RESTRICTED_USER 替換了選項 DBO_ONLY。提供 DBO_ONLY 只是為了向后兼容。
該選項可與 RECOVERY 選項一起使用。
有關更多信息,請參見設置數據庫選項。
FILE = { file_number | @file_number }
標識要還原的備份集。例如,file_number 為 1 表示備份媒體上的第一個備份集,file_number 為 2 表示第二個備份集。
PASSWORD = { password | @password_variable }
提供備份集的密碼。PASSWORD 是一個字符串。如果在創建備份集時提供了密碼,則從備份集執行還原操作時必須提供密碼。
有關使用密碼的更多信息,請參見"權限"。
MEDIANAME = {media_name | @media_name_variable}
指定媒體名稱。如果提供媒體名稱,該名稱必須與備份卷上的媒體名稱相匹配,否則還原操作將終止。如果 RESTORE 語句沒有給出媒體名稱,將不對備份卷執行媒體名稱匹配檢查。
重要??在備份和還原操作中使用一致的媒體名稱可以為用于還原操作的媒體提供額外的安全檢查。
?
MEDIAPASSWORD = { mediapassword | @mediapassword_variable}
提供媒體集的密碼。MEDIAPASSWORD 是一個字符串。
如果格式化媒體集時提供了密碼,則訪問該媒體集上的任何備份集時都必須提供該密碼。
MOVE 'logical_file_name' TO 'operating_system_file_name'
指定應將給定的 logical_file_name 移到 operating_system_file_name。默認情況下,logical_file_name 將還原到其原始位置。如果使用 RESTORE 語句將數據庫復制到相同或不同的服務器上,則可能需要使用 MOVE 選項重新定位數據庫文件以避免與現有文件沖突。可以在不同的 MOVE 語句中指定數據庫內的每個邏輯文件。
說明??使用 RESTORE FILELISTONLY 從備份集中獲取邏輯文件列表。
?
有關更多信息,請參見復制數據庫。
n
占位符,表示可通過指定多個 MOVE 語句移動多個邏輯文件。
NORECOVERY
指示還原操作不回滾任何未提交的事務。如果需要應用另一個事務日志,則必須指定 NORECOVERY 或 STANDBY 選項。如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,則默認為 RECOVERY。
當還原數據庫備份和多個事務日志時,或在需要多個 RESTORE 語句時(例如在完整數據庫備份后進行差異數據庫備份),SQL Server 要求在除最后的 RESTORE 語句外的所有其它語句上使用 WITH NORECOVERY 選項。
說明??如果指定 NORECOVERY 選項,數據庫將處于這個中間的未恢復狀態而不可用。
?
當用于文件或文件組還原操作時,NORECOVERY 強制數據庫在還原操作結束后保持還原狀態。這在以下情況中很有用:
- 還原腳本正在運行并且始終要應用日志。
- 使用文件還原序列,并且在兩次還原操作之間不能使用數據庫。
RECOVERY
指示還原操作回滾任何未提交的事務。在恢復進程后即可隨時使用數據庫。
如果安排了后續 RESTORE 操作(RESTORE LOG 或從差異數據庫備份 RESTORE DATABASE),則應改為指定 NORECOVERY 或 STANDBY。
如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,則默認為 RECOVERY。當從 SQL Server 早期版本中還原備份集時,可能要求將數據庫升級。如果指定了 WITH RECOVERY,升級將自動進行。有關更多信息,請參見事務日志備份。
STANDBY = undo_file_name
指定撤消文件名以便可以取消恢復效果。撤消文件的大小取決于因未提交的事務所導致的撤消操作量。如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,則默認為 RECOVERY。
STANDBY 允許將數據庫設定為在事務日志還原期間只能讀取,并且可用于備用服務器情形,或用于需要在日志還原操作之間檢查數據庫的特殊恢復情形。
如果指定的撤消文件名不存在,SQL Server 將創建該文件。如果該文件已存在,則 SQL Server 將重寫它。
對同一數據庫的連續還原可以使用相同的撤消文件。有關更多信息,請參見使用備用服務器。
重要??如果指定的撤消文件所在的驅動器上沒有可用的磁盤空間,還原操作將停止。
?
如果必須升級數據庫,則不允許 STANDBY。
KEEP_REPLICATION
指示還原操作在將發布的數據庫還原到創建它的服務器以外的服務器上時保留復制設置。當設置復制與日志傳送一同使用時,需使用 KEEP_REPLICATION。這樣,當在備用服務器上還原數據庫或日志備份并且恢復數據庫時,可防止刪除復制設置。還原備份時若指定了該選項,則不能選擇 NORECOVERY 選項。
NOUNLOAD
指定不在 RESTORE 后從磁帶機中自動卸載磁帶。設置始終為 NOUNLOAD,直到指定 UNLOAD 為止。該選項只用于磁帶設備。如果對 RESTORE 使用非磁帶設備,將忽略該選項。
NOREWIND
指定 SQL Server 在備份操作完成后使磁帶保持打開。磁帶保持打開將防止其它過程訪問磁帶。直到頒發 REWIND 或 UNLOAD 語句,或直到服務器關閉時,才釋放該磁帶。通過查詢 master 數據庫中的 sysopentapes 表可查找當前打開的一系列磁帶。
NOREWIND 意即 NOUNLOAD。該選項只用于磁帶設備。如果對 RESTORE 使用非磁帶設備,將忽略該選項。
REWIND
指定 SQL Server 將釋放磁帶和倒帶。如果 NOREWIND 和 REWIND 均未指定,則默認設置為 REWIND。該選項只用于磁帶設備。如果對 RESTORE 使用非磁帶設備,將忽略該選項。
UNLOAD
指定在還原完成后自動倒帶并卸載磁帶。啟動新用戶會話時其默認設置為 UNLOAD。設置始終為 UNLOAD,直到指定 NOUNLOAD 為止。該選項只用于磁帶設備。如果對 RESTORE 使用非磁帶設備,將忽略該選項。
REPLACE
指定即使存在另一個具有相同名稱的數據庫,SQL Server 也應該創建指定的數據庫及其相關文件。在這種情況下將刪除現有的數據庫。如果沒有指定 REPLACE 選項,則將進行安全檢查以防止意外重寫其它數據庫。安全檢查可確保在以下情況中,RESTORE DATABASE 語句不會將數據庫還原到當前服務器:
- 在 RESTORE 語句中命名的數據庫已經在當前服務器上存在,并且
- 該數據庫名稱與備份集中記錄的數據庫名稱不同。
若無法驗證現有文件是否屬于正在還原的數據庫,則 REPLACE 也允許 RESTORE 重寫該文件。RESTORE通常拒絕重寫已存在的文件。
RESTART
指定 SQL Server 應重新啟動被中斷的還原操作。RESTART 從中斷點重新啟動還原操作。
重要??只有當直接從磁帶媒體還原以及跨越多個磁帶卷還原時才能使用該選項。
?
STATS [= percentage]
每當另一個 percentage 結束時顯示一條消息,并用于測量進度。如果省略 percentage,則 SQL Server 每完成 10 個百分比顯示一條消息。
PARTIAL
指定部分還原操作。應用程序或用戶錯誤經常影響到數據庫的某個孤立部分(如表)。這類錯誤的例子包括無效更新或錯誤地除去表。為支持從這些事件恢復,SQL Server 提供可將數據庫的部分內容還原到另一個位置的機制,以使損壞或丟失的數據可復制回原始數據庫。
部分還原操作的粒度是數據庫文件組。主要文件和文件組始終同指定的文件及其相應的文件組一起還原。還原結果是數據庫的一個子集。沒有還原的文件組被標記為脫機,不能對其進行訪問。
有關更多信息,請參見部分數據庫還原操作。
<file_or_filegroup>
指定包括在數據庫還原中的邏輯文件或文件組的名稱。可以指定多個文件或文件組。
- FILE = {logical_file_name | @logical_file_name_var}
- 命名一個或更多包括在數據庫還原中的文件。
- 命名一個或更多包括在數據庫還原中的文件組。
當使用此選項時,最后一個文件或文件組還原操作完成后,必須將事務日志應用于數據庫文件,以便前滾文件使之與數據庫的其余部分保持一致。如果被還原的文件自上次備份后沒有一個做過修改,則不必應用事務日志。RESTORE 語句向用戶通告這一情況。
n
是一個占位符,表示可以指定多個文件和文件組。對文件或文件組的最大個數沒有限制。
LOG
指定對該數據庫應用事務日志備份。必須按有序順序應用事務日志。SQL Server 檢查已備份的事務日志,以確保按正確的序列將事務裝載到正確的數據庫。若要應用多個事務日志,請在除最后一個外的所有還原操作中使用 NORECOVERY 選項。有關更多信息,請參見事務日志備份。
STOPAT = date_time | @date_time_var
指定將數據庫還原到其在指定的日期和時間時的狀態。如果對 STOPAT 使用變量,則該變量必須是 varchar、char、smalldatetime 或 datetime 數據類型。只有在指定的日期和時間前寫入的事務日志記錄才能應用于數據庫。
說明??如果指定的 STOPAT 時間超出 RESTORE LOG 操作的結束范圍,數據庫將處于不可恢復的狀態,其效果與在 RESTORE LOG 中使用 NORECOVERY 一樣。
?
STOPATMARK = 'mark_name' [ AFTER datetime ]
指定恢復到指定的標記,包括包含該標記的事務。如果省略 AFTER datetime,恢復操作將在含有指定名稱的第一個標記處停止。如果指定 AFTER datetime,恢復操作將在含有在 datetime 時或 datetime 時之后的指定名稱的第一個標記處停止。
STOPBEFOREMARK = 'mark_name' [ AFTER datetime ]
指定恢復到指定的標記,但不包括包含該標記的事務。如果省略 AFTER datetime,恢復操作將在含有指定名稱的第一個標記處停止。如果指定 AFTER datetime,恢復操作將在含有在 datetime 時或 datetime 時之后的指定名稱的第一個標記處停止。
注釋
在還原過程中,指定的數據庫必須不處于使用狀態。指定數據庫中的任何數據將由還原的數據替換。
有關數據庫恢復的更多信息,請參見備份和還原數據庫。
只要操作系統支持數據庫排序規則,就可以跨平臺執行還原操作,即使這些平臺使用不同的處理器類型。有關更多信息,請參見 SQL Server 排序規則基礎知識。
還原類型
下面是 SQL Server支持的還原類型:
- 還原整個數據庫的完整數據庫還原。
- 完整數據庫還原和差異數據庫還原。通過使用 RESTORE DATABASE 語句還原差異備份。
- 事務日志還原。
- 個別文件和文件組還原。文件和文件組的還原既可以通過文件或文件組備份操作完成,也可以通過完整數據庫備份操作完成。在還原文件或文件組時,必須應用事務日志。此外,文件差異備份可以在完成完整文件還原后還原。
有關更多信息,請參見事務日志備份。
- 創建并維護熱備用服務器或備用服務器。有關備用服務器的更多信息,請參見使用備用服務器。
若要維護向后兼容性,可以在 RESTORE 語句語法中使用以下關鍵字:
- LOAD 可用于代替 RESTORE 關鍵字。
- TRANSACTION 關鍵字可用于代替 LOG 關鍵字。
- DBO_ONLY 關鍵字可用于代替 RESTRICTED_USER 關鍵字。
數據庫設置和還原
當使用 RESTORE DATABASE 語句時,可還原的數據庫選項(除 offline 外的所有其它 ALTER DATABASE 可設置選項,以及 merge publish、published 和 subscribed 復制選項)將在 BACKUP 操作結束時大規模地重置為設置值。
說明??該行為與 Microsoft SQL Server 的早期版本不同。
?
但是,使用選項 WITH RESTRICTED_USER 將替代用戶訪問選項設置的行為。該設置總是通過在 RESTORE 語句后加上 WITH RESTRICTED_USER 選項來設置。
有關更多信息,請參見備份和還原復制數據庫。
還原歷史記錄表
SQL Server 包含下列還原歷史記錄表,這些表跟蹤每個計算機系統的 RESTORE 活動:
- restorefile
- restorefilegroup
- restorehistory
說明??執行 RESTORE 時,將修改備份歷史記錄表。
?
還原已損壞的 master 數據庫需要特殊的過程。有關更多信息,請參見還原 master 數據庫。
通過 Microsoft? SQL Server? 2000 創建的備份無法還原為 SQL Server 的早期版本。
權限
如果不存在要還原的數據庫,則用戶必須有 CREATE DATABASE 權限才能執行 RESTORE。如果存在該數據庫,則 RESTORE 權限默認授予 sysadmin 和 dbcreator 固定服務器角色成員以及該數據庫的所有者 (dbo)。
RESTORE 權限被授予那些成員資格信息始終可由服務器使用的角色。因為只有在固定數據庫可以訪問且沒有損壞時(在執行 RESTORE 時并不會總是這樣)才能檢查固定數據庫角色成員資格,所以 db_owner 固定數據庫角色成員沒有 RESTORE 權限。
此外,用戶可以為媒體集、備份集或兩者指定密碼。如果為媒體集指定了密碼,則用戶若只是適當的固定服務器和數據庫角色成員還不足以執行備份。用戶還必須提供媒體密碼才能執行這些操作。同樣,除非在還原命令中指定正確的媒體集密碼和備份集密碼,否則不能執行還原操作。
在 BACKUP 語句中,定義備份集密碼和媒體集密碼為可選功能。使用密碼可防止利用 SQL Server 2000 工具未經授權地執行還原操作和在媒體中添加備份集,但是,密碼不能防止通過 FORMAT 選項重寫媒體。
因此,盡管使用密碼對防止利用 SQL Server 工具未經授權地訪問媒體內容有幫助,但密碼不能防止媒體內容被破壞。密碼不能完全防止未經授權地訪問媒體內容,原因在于備份集中的數據沒有加密,理論上可以被專為此目的創建的程序所檢查。對于安全性至關重要的場合,防止未經授權的個人訪問媒體非常重要。
指定密碼時不限定使用者的做法是錯誤的。
示例
說明??所有的示例均假定已執行了完整數據庫備份。
?
A. 還原完整數據庫
說明??MyNwind 數據庫僅供舉例說明。
?
下例顯示還原完整數據庫備份。
RESTORE DATABASE MyNwind
FROM MyNwind_1
B. 還原完整數據庫備份和差異備份
下例還原完整數據庫備份后還原差異備份。另外,下例還說明如何還原媒體上的另一個備份集。差異備份追加到包含完整數據庫備份的備份設備上。
RESTORE DATABASE MyNwind
FROM MyNwind_1
WITH NORECOVERY
RESTORE DATABASE MyNwind
FROM MyNwind_1
WITH FILE = 2
C. 使用 RESTART 語法還原數據庫
下例使用 RESTART 選項重新啟動因服務器電源故障而中斷的 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
D. 還原數據庫并移動文件
下例還原完整數據庫和事務日志,并將已還原的數據庫移動到 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
E. 使用 BACKUP 和 RESTORE 創建數據庫的復本
下例顯示使用 BACKUP 和 RESTORE 語句創建 Northwind 數據庫的復本。MOVE 語句使數據和日志文件還原到指定的位置。RESTORE FILELISTONLY 語句用于確定待還原數據庫內的文件數及名稱。該數據庫的新復本稱為 TestDB。有關更多信息,請參見 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
F. 使用 STOPAT 語法還原到即時點和使用多個設備進行還原
下例將數據庫還原到其在 1998 年 4 月 15 日中午 12 點時的狀態,并顯示涉及多個日志和多個備份設備的還原操作。
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'
G. 使用 TAPE 語法還原
下例顯示從 TAPE 備份設備還原完整數據庫備份。
RESTORE DATABASE MyNwind FROM TAPE = '//./tape0'
H. 使用 FILE 和 FILEGROUP 語法還原
下例還原一個包含兩個文件、一個文件組和一個事務日志的數據庫。
RESTORE DATABASE MyNwind FILE = 'MyNwind_data_1', FILE = 'MyNwind_data_2', FILEGROUP = 'new_customers'FROM MyNwind_1WITH NORECOVERY-- Restore the log backup.RESTORE LOG MyNwind FROM MyNwindLog1
I. 將事務日志還原到標記處
下例顯示將事務日志還原到名為"RoyaltyUpdate"的標記處。
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'
?
總結
以上是生活随笔為你收集整理的Asp.net 不使用SQLDMO实现数据库备份和还原的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用C#生成随机中文汉字验证码的基本原理
- 下一篇: ASP.net 验证码(C#)