在sql server資料庫中,備份和還原都只能在伺服器上進行,備份的資料檔案在伺服器上,還原的資料檔案也只能在伺服器上,當在非伺服器的機器上啟動sql server客戶端的時候,也可以通過該客戶端來備份和還原資料庫,但是這種操作實質是在伺服器上進行的,備份的資料檔案在伺服器上,還原的資料檔案也只能在伺服器上,這個原則不會變,只是使用了客戶端的乙個工具來操作這個過程而已。
備份資料庫有兩種方式:
第一種是在企業管理器中,利用工具對資料庫進行備份,這種備份的檔案只會有乙個,即以.bak結尾的檔案。這種方式下對乙個資料庫進行備份的時候,可以任意的命名備份檔案和字尾,還可以對已備份完成的備份檔案進行名字和字尾名的修改,都不會影響檔案的恢復,但是備份檔案內部已經記錄了原來的資料庫的.mdf和.ldf檔案的名字和儲存的路徑。備份的時候,如果目標資料夾中已經存在了與備份檔案名同名的檔案,則有兩個選項,附加和覆蓋,一般選擇覆蓋.建議:以原資料庫名字為備份檔案的檔案名字,並且以 .bak作為字尾名.
第二種方式是直接找資料庫的data資料夾,直接將.mdf和.ldf檔案拷貝儲存。
還原資料庫有兩種方式:
第一種是還原.bak檔案,當確定了備份的資料庫之後,就可以利用企業管理器來還原了。還原的新資料庫名可以是任意的,在option選項裡面可以根據當前機器中安裝sql server 2005 的路徑來修改路徑,甚至可以修改.mdf和.ldf檔案的名字,名字只是識別符號,任意修改都可以,編譯器會把.mdf和.ldf檔案與新資料庫名聯絡起來的。這樣還原後,就生成了.mdf和.ldf檔案,原來的備份資料檔案就可以刪除了。還原的時候,如果目標資料夾中已經存在了與還原檔名同名的檔案,可以選擇覆蓋原來的資料檔案。建議:還原後還是以原資料庫名為還原資料庫名,option選項裡面不要改名字,只有在有必要的時候修改路徑即可.
第二種是還原.mdf和.ldf檔案,還原的時候可以用attach來把.mdf和.ldf檔案附加上,然後命名新的資料庫名,但是這兩個檔案是不能被刪除的,否則就失去了資料來源了。建議:把.mdf和.ldf檔案放到data資料夾中.還原的資料庫名字與原來的資料庫名字相同.
……\microsoft sql server\mssql.1\mssql\backup
-------存放備份的資料檔案
……\microsoft sql server\mssql.1\mssql\data
--------存放.mdf和.ldf檔案
我們通常備份資料庫時,需要通過sql server客戶端登入資料庫伺服器去備份和恢復,這樣很不方便,其實sql server自帶的命令就可以備份和還原資料庫。這些命令可以在sql server客戶端的sql指令碼視窗直接執行,也可以很通過ado.net呼叫這些命令實現遠端備份和恢復資料庫。
(1)、備份還原資料庫的命令
備份:backup database'被備份的資料庫名'to disk = '備份檔案路徑';
--注意:被備份的資料庫名必須是存在的,否則會出錯
還原:--將資料庫置於離線狀態
alter database'被恢復的資料庫名'set offline with rollback immediate;
--恢復資料庫
restore database '被恢復的資料庫名'from disk = '還原檔案路徑(原始檔)';
alter database'被恢復的資料庫名'set online with rollback immediate;
--注意:被恢復的資料庫名必須是存在的,並且該資料庫將會被覆蓋掉,還原檔案路徑(原始檔)必須是存在的,另外,在執行前後的兩個alter語句的時候,所選擇的資料庫必須是master,
有時候為了保險起見,alter語句可以不要。
(2)、命令應用
a、可以直接在sql server客戶端的sql窗體中執行命令。
b、可以在資料庫上寫儲存過程,然後配置job,定期呼叫這個儲存過程。
c、通過應用程式的ado.net來執行這些命令或者命令組成的儲存過程,實現應用程式控制備份還原資料庫,這些應用程式可以寫成服務,定期呼叫。
(3)、c#案例
//備份資料庫
+ bakname+ system.datetime.now.dayofyear.tostring() + system.datetime.now.millisecond.tostring() +".bak'";//備份檔案名
access acc = new access();
acc.executenonequery(sql);
//還原資料庫
string sql = "alter database qis2006 set offline with rollback immediate;";
sql += "restore database qis2006 from disk = '" ;
sql += bakname + "'"; //bakname 是備份檔案名
sql += "alter database qis2006 set online with rollback immediate;";
trycatch(exception ex)
(4)、儲存過程案例
//備份資料庫
create proc backup_database
( @device_name varchar(80),--備份裝置名
@file_name varchar(125), --備份檔案名
@devicelog_name varchar(85),--日誌備份裝置名
@filelog_name varchar(130) --日誌備份檔案名
) as
begin
--建立資料庫的備份邏輯裝置
exec sp_addumpdevice 'disk', @device_name ,@file_name
--建立裝置邏輯名
exec sp_addumpdevice 'disk', @devicelog_name, @filelog_name
backup database testdb to @device_name --備份資料庫
backup log testdb to @devicelog_name --備份日誌
end//還原資料庫
create proc restore_database
( @device_name varchar(80),
@devicelog_name varchar(85)
) as
begin
restore database testdb from @device_name
restore log testdb @devicelog_name
end
備份SQL Server資料庫
搬遷之後,備份資料庫的功能出錯了,原因是原來資料庫與 同一臺伺服器,現在是資料庫與 分別在不同伺服器,引起在備分時,找不到路徑或是沒有許可權儲存。最初版本的儲存過程 setansi nulls ongo setquoted identifier ongo alter procedure dbo us...
備份SQL Server資料庫
搬遷之後,備份資料庫的功能出錯了,原因是原來資料庫與 同一臺伺服器,現在是資料庫與 分別在不同伺服器,引起在備分時,找不到路徑或是沒有許可權儲存。最初版本的儲存過程 set ansi nulls ongo setquoted identifier ongo alter procedure dbo u...
SQL Server資料庫備份方法
資料庫備份,是在資料丟失的情況下,能及時恢復重要資料,防止資料丟失的一種重要手段。乙個合理的資料庫備份方案,應該能夠在資料丟失時 有效地恢復重要資料 同時需要考慮技術實現難度和有效地利用資源。資料庫備份有四種型別,分別應用於不同的場合,下面簡要介紹一下。1 完全備份 2 事務日誌備份 事務日誌是乙個...