在本機操作,debug的時候,一切似乎都在掌控之中。可是提交到伺服器之後,一切顯地都無比陌生。因為不熟悉sql,準確來說就只會點select,update,delete,insert而已。昨天不小心誤刪了一張資料不多但是不在人工處理範圍內的一張表內的資料。
因為知道sql server是有日誌這種東西的,事後我表現地無比淡定,在事發乙個小時以內。乙個小時之後,我發現我無法掌控這一事件了。
上網查詢了恢復資料的辦法。有必要囉嗦一下。
問題1:
無論是遠端端還是伺服器端,都無法對資料庫(假設資料庫叫test)進行除『增刪查改』的其它操作,譬如分離,離線,還原...錯誤提示是
e.g.1「無法分離 test 資料庫 因為它當前正在使用。」
e.g.2「因為資料庫正在使用,未獲得對資料的排他訪問權,操作異常終止」
反正嘛,就是說你丫不能阻止別人的訪問。可我們就是要這樣做的...只好跟它說拜拜了。
說拜拜的方法就是關掉所有訪問資料庫test的程序。
createps:proc killspid (@dbname
varchar(20))
asbegin
declare
@sql
nvarchar(500)
declare
@spid
intset
@sql='
declare getspid cursor for select spid from sysprocesses where dbid=db_id(
'''+
@dbname
+''')'
exec(@sql)
open getspid
fetch
next
from getspid into
@spid
while
@@fetch_status
<
>-
1begin
exec('
kill '+
@spid)
fetch
next
from getspid into
@spid
endclose getspid
deallocate getspid
end--
用法
use master
exec killspid '
資料庫名
'
**我是這樣理解的,定義一段殺死訪問資料庫程序的儲存過程。寫一段獲取程序id的**,迴圈殺死每乙個程序。最後呼叫儲存過程。
雖然不了解儲存過程,但是意思就是這樣的吧。
問題2:
沒有備份資料庫,那該如何恢復資料呢
有個軟體叫做log explorer 這個東西可以根據資料庫的日誌回到過去的任何乙個時刻。
log explorer for sql server 是個好東西,但是這根本無法解決我的問題。資料庫在伺服器端,學校根本不會讓我安裝乙個軟體在伺服器上面。而且我證實過,這個軟體必須要在伺服器端裝伺服器端軟體的。所以,這個對於我來說,是泡湯的。但是不代表這不是乙個利器。
最後我用了乙個很蛋疼的方法解決了。
1.分離資料庫,備份乙個test;
2.將資料庫附加回去,用自帶的恢復方式恢復到乙個很久以前的狀態;
3.將需要的那張表複製到備份的那個資料庫;
4.將備份的那個資料庫掛回去,原資料庫刪了。
這是乙個很蛋疼而且碰巧那張表沒被改的方法。
頭一次知道dba的重要性。
我的方法是乙個很偶然的東西,希望大家分享一下真正能解決恢復問題的辦法。當然,每隔一段時間備份是絕對沒有錯的。
方法
另外發現乙個比較有技術性的可行的方法
1,如果誤操作之前存在乙個全庫備份(或已有多個差異備份或增量備份),首先要做的事就是進進行一次日誌備份
(如果為了不讓日誌檔案變大而置trunc. log on chkpt.選項為1那你就死翹了)
backup2,恢復乙個全庫備份,注意需要使用with norecovery,如果還有其他差異或增量備份,則逐個恢復log dbname to
disk='
filename'--
--注意:是日誌備份!
restore3,恢復最後乙個日誌備份即剛做的日誌備份,指定恢復時間點到誤操作之前的時刻database dbname from
disk='
filename
'with norecovery
restore完整**log dbname from
disk='
filename
'with stopat=
'date_time
'
經過驗證,這才叫有技術性!我那純屬「鄧艾的屯『田』」小孩子過家家。。。
參考的資料:
恢復資料庫備份
利用檔案組備份恢復破壞的檔案 restore database bbb from disk d aaaabackup 1.bak with norecovery 還原到日誌點 restore log bbb from disk d aaaabackup 2.trn with norecovery r...
命令恢復資料庫
1 建立對應路徑資料夾 d program files microsoft sql server mssql11.mssqlserver mssql data 2 新建資料庫sgs,行資料路徑 日誌路徑都選擇以上路徑,行資料 檔名填寫 blank.mdf 日誌 檔名填寫 blank 1.ldf 3 ...
整理 如何恢復資料庫的內容
我那個哥們是從別人那拷了乙個資料庫的資料檔案 c mssql7data 目錄下的檔案 最初我是用的 在一台好的機器上重新安裝sql server,建立相同的資料庫裝置 大小 和資料庫 停掉sql server,用拷貝出來的資料庫檔案覆蓋剛建立的資料庫檔案,再重新啟動 sql server。但一直不可...