解決了對數據庫的排它訪問權的問題

轉載自大富翁

題:怎樣做sql server數據庫的還原 ( 積分:50, 回覆:32, 閱讀:1034 )
分類:數據庫-C/S型 ( 版主:qince, luyear )
來自:skyhill, 時間:2001-11-7 16:56:00, ID:713795 [顯示:小字體 | 大字體]

我用restore database master from disk='c:/temp.bak'但數據庫必須在無連接狀態下使用,
我斷開連接,又不能執行sql   

來自:antic_ant, 時間:2001-11-8 11:25:00, ID:715557
用sqldmo來解決吧
http://luck4u.126.com 上提供原碼參考  

來自:bluerain, 時間:2001-11-8 11:25:00, ID:715563
1.先斷開所有的連接,
2.最好在服務器端執行代碼,連接數據庫到任何一個不是master的數據庫,
2.1 然後執行restore database master from disk='c:/temp.bak'.  

來自:qiangyuan, 時間:2001-11-9 16:00:00, ID:719371
好象就算斷掉所有連接仍然不定啊!它會報數據庫正在使用狀態中之類的錯,連到master也不行。  

來自:bluerain, 時間:2001-11-9 17:09:00, ID:719592
sql server斷開連接也需要一定時間,看一下sql server的參數就知道了.
等那天有空,我把以前做的一個系統裏恢復,備份數據庫的代碼貼一下.
  

來自:sundart, 時間:2001-11-9 17:39:00, ID:719716
恢復數據庫首先要保存沒有其它人訪問它。
切換至Master數據庫,然後再恢復,再切換回來。  

來自:huhongru, 時間:2002-3-2 17:42:00, ID:954604
恢復數據庫首先要保存沒有其它人訪問它.
一定要設定其參數是強行執行得就可以了。我試過。  

來自:龍石佛, 時間:2002-9-13 12:09:00, ID:1322787
我怎麼看不到別人的答案!  

來自:luky_99, 時間:2002-9-13 13:29:00, ID:1322979
一定要確定沒有連接情況下才行,
比如先連接到別的數據庫。。。。
同意sundart。
  

來自:luky_99, 時間:2002-9-13 13:32:00, ID:1322991
TO bluerain:
你快點粘上來好嗎?
我也急用呀!!  

來自:王公子, 時間:2002-9-13 13:46:00, ID:1323044
好似有點麻煩!關注!  

來自:liu_sir, 時間:2002-10-17 16:21:00, ID:1380476
單做一個備份程序,連接master數據庫,然後執行該語句應該可以得,我就是這麼做的  

來自:Gracezmhb, 時間:2002-10-21 10:41:00, ID:1384928
各位做通過恢復數據庫的高手,我用
DataModule1.ADOConnection1.Close; 斷開連接
DataModule1.ADOConnection1.ConnectionString  連到master數據庫
DataModule1.ADOConnection1.Open;  重新打開連接
新的連接已經連上去了,但是在SQL 2000中原數據庫還是有連接,
仍然無法恢復原數據庫,這是怎麼回事呢?
急切等待回答!  

來自:zhoudongchao, 時間:2002-10-21 10:47:00, ID:1384940
使用備份嚮導很ESAY  

來自:Gracezmhb, 時間:2002-10-23 19:30:00, ID:1390807
to zhoudongchao
我不想用嚮導,要在delhpi程序中實現啊

  

來自:Gracezmhb, 時間:2002-10-23 21:36:00, ID:1391036
to skyhill
你的數據庫還原搞好了嗎?能不能告訴我怎麼弄的呢?
TO bluerain
你什麼時候有空能貼出來啊?
  

來自:bluerain, 時間:2002-10-31 13:55:00, ID:1404203
這個是我寫的一個例程,包括用SQL語言(backup,restore)和SQL-DMO兩種方法備份合
恢復數據庫。
注:1。自己改鏈接字符串
    2。我的數據庫驗證方式是用混合模式,自己根據自己的登陸方式改一下相應地方。
文件:
http://www.flyfish.i-p.com/Source/bkrstDB.rar
此外,利用sql server的Virtual Device Interface (VDI) 也可以實現,VDI相當於sql server
的備份恢復API技術。例程可參見MS SQLServer 2000盤的
/devtools/samples/backup目錄下文件。  

來自:Gracezmhb, 時間:2002-11-9 21:46:00, ID:1423554
to bluerain
請問你的程序在哪裏還能下載?上面的那個URl我打不開。怎麼辦呢?[blue][/blue][:)]  

來自:bluerain, 時間:2002-11-10 8:53:00, ID:1423838
降地址粘貼到netant或者flashGet中下載,沒有問題的。
  

來自:Gracezmhb, 時間:2002-12-2 14:15:00, ID:1478049
to bluerain
謝謝你的程序!!  

來自:xuefeiyang, 時間:2002-12-2 14:20:00, ID:1478071
try
  DM.ADOConnection1.Connected:=False;//關閉sbhy數據庫
  DM.adocommand1.Connection:=DM.ADOConnection2;//轉移連接到數據庫master
  DM.ADOCommand1.CommandText:='ALTER DATABASE sbhy SET OFFLINE WITH ROLLBACK IMMEDIATE';//切斷sbhy連接
  DM.ADOCommand1.Execute;

  DM.ADOCommand1.CommandText:='RESTORE DATABASE sbhy FROM DISK = ''' +opendialog1.FileName +'''';//恢復sbhy數據庫
  DM.ADOCommand1.Execute;
  showmessage('完成');
finally
  DM.ADOCommand1.CommandText:='ALTER DATABASE sbhy SET ONLINE WITH ROLLBACK IMMEDIATE';//重新連接sbhy數據庫
  DM.ADOCommand1.Execute;
  DM.ADOConnection2.Connected:=False;//關閉master數據庫
end;
DM.ADOConnection1.Connected:=True;//打開sbhy數據庫
DM.adocommand1.Connection:=DM.ADOConnection1;//恢復連接到數據庫sbhy  

來自:tomljh, 時間:2002-12-5 16:24:00, ID:1488513
to:bluerain你的代碼根本就不能解決skyhill提的問題,我試了SQL下的方式。
測試:如下在A機上啓動一個對目標數據庫的訪問,如查詢分析器
          在B機上運行你的程序,備份成功,還原還是老問題不成功。
請注意我們的目標不是在單用戶的基礎上還原成功,而是在多用戶在使用的基礎上
還原成功。  

來自:tomljh, 時間:2002-12-5 16:49:00, ID:1488634
to xuefeiyang:
   你做法是正確的,非常感謝我又學了一招。
   關鍵在於還原數據庫之前
   'ALTER DATABASE sbhy SET OFFLINE WITH ROLLBACK IMMEDIATE'

   Set offline/online這個開關我找了好久。
  

來自:ssss__0002, 時間:2002-12-14 13:45:00, ID:1510171
up  

來自:zhengyue, 時間:2002-12-19 8:18:00, ID:1521770
我試了以下但是這一句抱錯呢
'ALTER DATABASE sbhy SET OFFLINE WITH ROLLBACK IMMEDIATE'

說  set 設置不對呢?
  

來自:bernhn, 時間:2002-12-19 10:41:00, ID:1522164
to tomljh  爲什麼提示我set有誤呢,我的是sql70!  

來自:flowcloud, 時間:2002-12-19 12:15:00, ID:1522577
在服務器上用存儲過程。
RESTORE DATABASE databasename
   FROM DISK = 備份文件名  with REPLACE  

來自:bluerain, 時間:2002-12-19 13:21:00, ID:1522793
xuefeiyang的語法是針對sql2000的。
如果是sql7,使用如下:

EXEC sp_dboption 'databasename', 'offline', 'TRUE'
RESTORE DATABASE databasename  FROM DISK = 備份文件名  with REPLACE
EXEC sp_dboption 'databasename', 'offline', 'false'


另大家用single user開關也可以
EXEC sp_dboption 'dababasename','single user', 'TRUE'
RESTORE DATABASE databasename  FROM DISK = 備份文件名  with REPLACE
EXEC sp_dboption 'dababasename','single user', 'false'


  

來自:zhengyue, 時間:2002-12-20 18:00:00, ID:1525576
用樓上同志的做法,如果打開過該數據庫,需要等很長時間才能執行以上語句,
否則告訴還有其他客戶在使用數據庫,有沒有辦法可以很快,執行該語句;  

來自:woshixiaoxin, 時間:2002-12-23 13:45:00, ID:1530173
Restore database ... 這條語句在查詢分析器中,對數據庫自身進行還原也會出現"未取得對數據庫的排它訪問權限",
我沒有取得這個權限,用了另外一個方法解決了這個問題,
1 斷開數據庫的連接
2 動態的創建一個數據庫別名,連接master數據庫,在master數據庫中執行Restore database ...
3 刪除新建的數據庫別名

但我還想知道如何取得對數據庫的排它訪問權限  

來自:angiin, 時間:2002-12-23 17:40:00, ID:1531173
還原?是什麼意思?是恢復到幾月幾號?還是把以前有的數據庫文件恢復到新的SQLServer中
如果是後者我還有辦法在Sql分析器中的help中查找“SP_attach_db“,有詳細的說明。  

來自:dirk, 時間:2002-12-23 18:14:00, ID:1531240

來自:tianxing78, 時間:2003-1-26 14:36:00, ID:1599774
做一個存儲過程,如sjhf。將此過程放在你並不應用的數據庫中,像:
master。設置ODBC如:sjhf。用adostoredproc連接。CREATE PROCEDURE sjhf @backpath char(50) AS
restore database 你的數據庫 from disk=@backpath GO 。執行時先將備份路徑傳給它就可以了。
其餘的就像是上面說的那樣。要先將數據庫斷開。  

問題討論沒有結束 ...
您尚未進入本論壇 或者 您的賬號沒有經過確認。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章