還原資料庫的經典做法

2021-04-13 07:51:11 字數 4038 閱讀 8949

還原資料庫的經典做法

許可權

如果不存在要還原的資料庫,則使用者必須有 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_1

with 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'

還原資料庫

use gyjlbigfootmis goif exists select from sysobjects where name kymp 還原資料庫 and type p begin drop procedure kymp 還原資料庫 endgo create procedure kymp 還原資...

資料庫還原

訊息 5133,級別 16,狀態 1,第 1 行 對檔案 d microsoft sqlserver mssql.1 mssql data db camp unit 2.mdf 的目錄查詢失敗,出現作業系統錯誤 3 系統找不到指定的路徑。訊息 3156,級別 16,狀態 3,第 1 行 檔案 db ...

還原資料庫

在還原資料庫時,有時會提示因為資料庫正在使用,所以無法獲得對資料庫的獨佔訪問權 這時需要在還原資料庫之前關閉正在使用資料庫的執行緒。解決方案如下 執行該方案,必須首先定位到master資料庫,然後在分析查詢器中執行以下語句 alter database 資料庫名 set offline with r...