詳細講解sql server資料庫的檔案恢復技術
sql server
有兩種備份方式,一種是使用
backup database
將資料庫檔案備份出去,另外一種就是直接拷貝資料庫檔案
mdf和日誌檔案
ldf的方式。
sqlserver
有兩種備份方式,一種是使用
backupdatabase
將資料庫檔案備份出去,另外一種就是直接拷貝資料庫檔案
mdf和日誌檔案
ldf的方式。本文中我們將主要介紹一下後者的備份與恢復。本文中假定您目前已經能夠熟練使用
server
企業管理器和
sql server
查詢分析器
)1、正常的備份、恢復方式
正常方式下,我們要備份乙個資料庫,首先要先將該資料庫從執行的資料伺服器
中斷
開,或者停掉整個資料庫伺服器,然後複製檔案。
卸下資料庫的命令:
sp_detach_db
資料庫名
連線資料庫的命令:
sp_attach_db
或者sp_attach_single_file_db
s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′ [,...16]
sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′
使用此方法可以正確恢復
sql sever7.0
和sql server 2000
的資料庫檔案,要點是備份的時候一定要將
mdf和
ldf兩個檔案都備份下來,
mdf檔案是資料庫資料檔案,
ldf是資料庫日誌檔案。
例子:假設資料庫為
test
,其資料檔案為
test_data.mdf
,日誌檔案為
test_log.ldf
。下面我們討論一下如何備份、恢復該資料庫。
卸下資料庫:
sp_detach_db 』test』
連線資料庫:
sp_attach_db 』test』,』c:/programfiles/microsoft sql
server/mssql/data/test_data.mdf』,』c:/program files/microsoft sql
server/mssql/data/test_log.ldf』
sp_attach_single_file_db 』test』,』c:/program files/microsoft sql
server/mssql/data/test_data.mdf』
2、只有mdf檔案的恢復技術
由於種種原因,我們如果當時僅僅備份了
mdf檔案,那麼恢復起來就是一件很麻煩的事情了。
如果您的
mdf檔案是當前資料庫產生的,那麼很僥倖,也許你使用
sp_attach_db
或者sp_attach_single_file_db
可以恢復資料庫,但是會出現類似下面的提示資訊
裝置啟用錯誤。物理檔名
』c:/program files/microsoft sql server/mssql/data/test_log.ldf』
可能有誤。
已建立名為
』c:/program files/microsoft sql server/mssql/data/test_log.ldf』
的新日誌檔案。
但是,如果您的資料庫檔案是從其他計算機上覆制過來的,那麼很不幸,也許上述辦法就行不通了。你也許會得到類似下面的錯誤資訊
伺服器:
訊息1813
,級別16
,狀態2,行1
未能開啟新資料庫
』test』
。createdatabase
將終止。
裝置啟用錯誤。物理檔名
』d:/test_log.ldf』
可能有誤。
應該怎麼辦呢
?下面我們舉例說明恢復辦法。
a.我們使用預設方式建立乙個供恢復使用的資料庫(如
test)
。可以在
sqlserverenterprise manager
裡面建立。
b.停掉資料庫伺服器。
c.將剛才生成的資料庫的日誌檔案
test_log.ldf
刪除,用要恢復的資料庫
mdf檔案覆蓋剛才生成的資料庫資料檔案
test_data.mdf。d.
啟動資料庫伺服器。此時會看到資料庫
test
的狀態為「置疑
」。這時候不能對此資料庫進行任何操作。
e.設定資料庫允許直接
作業系統
表。此操作可以在
sql server enterprise manager
裡面選擇資料庫伺服器,按右鍵,選擇「屬性
」,在「伺服器設定
」頁面中將
「允許對系統目錄直接修改
」一項選中。也可以使用如下語句來實現。
use master
go sp_configure 』allow updates』,1
go reconfigure with override go
f.設定test
為緊急修復模式
update sysdatabasessetstatus=-32768 where dbid=db_id(』test』)
此時可以在
sql server enterprise manager
裡面看到該資料庫處於「唯讀
/置疑/離線
/緊急模式
」可以看到資料庫裡面的表,但是僅僅有系統表
g.下面執行真正的恢復操作,重建資料庫日誌檔案
dbcc rebuild_log(』test』,』c:/programfiles/microsoft sql server/mssql/data/test_log.ldf』)
執行過程中,如果遇到下列提示資訊:
伺服器:
訊息5030
,級別16
,狀態1,行1
未能排它地鎖定資料庫以執行該操作。
dbcc
執行完畢。如果
dbcc
說明您的其他程式正在使用該資料庫,如果剛才您在
f步驟中使用
sql server enterprise manager
開啟了test
庫的系統表,那麼退出
sql server enterprise manager
就可以了。
正確執行完成的提示應該類似於:
警告:
資料庫』test』
的日誌已重建。已失去事務的一致性。應執行
dbcc checkdb
以驗證物理一致性。將必須重置資料庫選項,並且可能需要刪除多餘的日誌檔案。
dbcc
執行完畢。如果
dbcc
此時開啟在
sqlserverenterprise manager
裡面會看到資料庫的狀態為「只供
dbo使用
」。此時可以訪問資料庫裡面的使用者表了。
h.驗證資料庫一致性
(可省略
)dbcc checkdb(』test』)
一般執行結果如下:
checkdb
發現了0
個分配錯誤和
0 個一致性錯誤
(在資料庫
』test』 中)
。dbcc
執行完畢。如果
dbcc
i.設定資料庫為正常狀態
sp_dboption 』test』,』dbo use only』,』false』
假如沒有出錯,現在你就可以正常的使用恢復後的資料庫啦。
j.最後一步,我們要將步驟
e中設定的
「允許對系統目錄直接修改
」一項恢復。因為平時直接
作業系統
表是一件比較危險的事情。當然,我們可以在
sql server enterprise manager
裡面恢復,也可以使用如下語句完成
sp_configure 』allow updates』,0
go reconfigure with override go
詳細講解SQL Server索引的效能問題
在良好的資料庫設計基礎上,能有效地使用索引是sql server取得高效能的基礎,sql server採用基於代價的優化模型,它對每乙個提交的有關表的查詢,決定是否使用索引或用哪乙個索引。因為查詢執行的大部分開銷是磁碟i o,使用索引提高效能的乙個主要目標是避免全表掃瞄,因為全表掃瞄需要從磁碟上讀表...
UITableView 詳細講解
建立 uitableview datatable uitableview alloc initwithframe cgrectmake 0,0,320,420 datatable setdelegate self datatable setdatasource self self.view adds...
UITableView 詳細講解
建立 uitableview datatable uitableview alloc initwithframe cgrectmake 0,0,320,420 datatable setdelegate self datatable setdatasource self self.view adds...