備份恢復資料庫 中谷專案

2021-06-19 18:46:26 字數 4005 閱讀 3345

imports system.data.sqlclient

public class form1

'備份資料庫

'backup database test to disk='' with format sql語句

private sub btnbackup_click(sender as object, e as eventargs) handles btnbackup.click

dim conn as sqlconnection

conn = new sqlconnection("data source=.;initial catalog=test3;user id=sa;password=123456")

dim cmd as sqlcommand

dim path as string

'選擇備份路徑

folderbrowserdialog1.showdialog()

path = folderbrowserdialog1.selectedpath

if path = nothing then

messagebox.show("檔名不能為空", "系統提示")

exit sub

end if

'執行sql命令語句,備份資料庫

cmd = new sqlcommand("backup database test3 to disk='" & path & "\backup' with format,backup log with norecovery", conn)

conn.open()

trycmd.executenonquery()

catch ex as exception

msgbox(ex.message, msgboxstyle.okonly, "系統提示")

exit sub

end try

msgbox("備份成功")

conn.close()

end sub

'還原資料庫

private sub btnrecovery_click(sender as object, e as eventargs) handles btnrecovery.click

if msgbox("真的要還原嗎?資料會恢復到最近備份的資料!", msgboxstyle.yesno, "系統提示") = msgboxresult.yes then

dim cn as new sqlconnection

dim cn1 as new sqlconnection

dim mydr as sqldatareader

dim str as string

dim tmpconnectionstring as string = "data source=.;initial catalog=test3;user id=sa;password=123456;pooling=false"

dim all as string

'獲取當前檔名篩選器字元

me.openfiledialog1.filter = "所有檔案(*.*)|*.*|備份檔案(*.bak)|*.bak"

me.openfiledialog1.showdialog()

all = openfiledialog1.filename

if all = nothing then

messagebox.show("檔名不能為空", "系統提示")

exit sub

end if

cn.connectionstring = tmpconnectionstring

cn1.connectionstring = tmpconnectionstring

cn.open()

cn1.open()

'查詢與資料庫有關的程序

dim cm as sqlcommand = new sqlcommand("use master select spid from master..sysprocesses where dbid=db_id('test3')", cn)

mydr = cm.executereader()

dim cm1 as sqlcommand = new sqlcommand()

cm1.connection = cn1

while (mydr.read())

'殺死程序

str = "kill " & mydr("spid").tostring()

cm1.commandtext = str

cm1.commandtype = commandtype.text

cm1.executenonquery()

end while

mydr.close()

'使要還原的資料庫離線

cm = new sqlcommand("alter database test3 set offline with rollback immediate", cn)

cm.executenonquery()

'恢復備份

cm = new sqlcommand("restore database test3 from disk='" & all & "' with replace", cn)

cm.executenonquery()

'使要還原的資料庫聯機

cm = new sqlcommand("alter database test3 set online with rollback immediate", cn)

cm.executenonquery()

msgbox("恢復成功,軟體自動關閉,請重新啟動本系統!")

'關閉資料庫連線

在sql語句前新增use master 即

use master select spid from master..sysprocesses where dbid=db_id('test3')

user master表示在master資料庫執行該語句,spid指當前使用者程序的會話 id,master是系統資料庫,它裡面有很多物件,每個物件都有自己的所有者.如果沒有指明所有者,系統就預設dbo為物件的所有者.乙個物件完整的表示式為:資料庫名.所有者.物件, 比如:master.dbo.sysobjects。殺程序前當然要先找出當前該資料庫所有的程序了。

直接用sql語句還原資料庫。

方法一:

在還原之前先將該資料庫離線,恢復之後再聯機。前後加上兩條sql語句即可。 

alter database [datebase] set offline with rollback immediate

alter  database  [ datebase] set online  

方法二:

(該方法採取限制訪問資料庫的方式,因為實際中我們經常多使用者訪問,所以符合情況時再考慮這種解決方法吧。)

在還原的時候還有其他程序連在上面,導致無法獲得獨佔造成的,可以使用資料庫的單使用者模式,設定方式:選中要還原的資料庫-->屬性-->選項-->限制訪問,該值從multi_user修改為single_user。

以下是gui的模式,語句比較簡單 

use master 

go alter databaseeol_tcgroup set single_user with rollback immediate; 

go 

恢復資料庫備份

利用檔案組備份恢復破壞的檔案 restore database bbb from disk d aaaabackup 1.bak with norecovery 還原到日誌點 restore log bbb from disk d aaaabackup 2.trn with norecovery r...

mysqldump備份恢復資料庫

mysql資料庫提供了乙個很好用的工具mysqldump用以備份資料庫,下面將使用mysqldump命令進行備份所有資料庫以及指定資料庫 一 mysqldump一次性備份所有資料庫資料 usr local mysql bin mysqldump u使用者名稱 p密碼 all databases 儲存...

備份資料庫恢復資料庫

備份資料庫,恢復資料庫 2 登入到mysql客戶端,刪除mydb1庫 刪除mydb1庫 drop database mydb1 查詢所有庫,是否還存在mydb1庫 show databases 由於備份時,沒有備份資料庫本身,所以在恢復庫中的資料前,需要先建立好要恢復的庫 建立mydb1資料庫 cr...