MS SQL 7.0 Restore Database Error..... |
答題得分者是:cmj
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
各位Delphi高手、前輩:
使用資料庫:MS SQL Server 7.0 資料備份:
BACKUP DATABASE TestDB
TO DISK = 'C:\TestDB.bak' 資料回存:
RESTORE DATABASE TestDB
FROM DISK = 'C:\TestDB.bak' 以上兩段SQL語法均用Query.ExecSQL;執行 資料備份沒有問題,但一執行到資料回存(RESTORE DATABASE),就產生如下錯誤:
再此先謝謝各位前輩囉... 發表人 - channel 於 2003/07/17 10:28:12
------
~小弟淺見,參考看看~ |
cmj
高階會員 發表:15 回覆:242 積分:226 註冊:2002-06-12 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 參考範例 RESTORE DATABASE HL FROM DISK = 'E:\ATTDATA\HLBAK.BAK' WITH MOVE 'HL_DATA' TO 'E:\ATTDATA\HL_DATA.MDF', MOVE 'HL_LOG' TO 'E:\ATTDATA\HL_LOG.LDF'cmj兄:一樣產生錯誤訊息,我想我的問題應該如同timhuang兄講的一樣。 引言: Hi, 這是因為有人正在使用這個 database 的關係. 錯誤訊息的告知是說明了 administrator 必須在 exclusive 下還原資料庫, 也就是在獨佔模式下來進行資料庫的還原. 或者是你可以先利用 kill 來進行目前正在使用本資料庫的 user connection 後再開始進行 restore database!!timhuang兄:感謝您再一次的幫小弟回答問題。 雖然我清楚您講的意思,但是對於實作方面,小弟還是不知要如何下手,可否提供一個範例,感激不盡.....
------
~小弟淺見,參考看看~ |
cmj
高階會員 發表:15 回覆:242 積分:226 註冊:2002-06-12 發送簡訊給我 |
資料庫: HL 先將原Database Drop,才能RESTORE 以下指令可在Query一起執行 use master if exists(select * from sysdatabases where name='HL') drop database HL RESTORE DATABASE HL FROM DISK = 'D:\ATTDATA\HLBAK.BAK' WITH MOVE 'HL_DATA' TO 'D:\ATTDATA\HL_DATA.MDF', MOVE 'HL_LOG' TO 'D:\ATTDATA\HL_LOG.LDF' |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
hi, channel 兄, 要 kill connection 必須先確認有連往該 db 的 connection 才行, 所以必須使用 sa 的權限, 查詢在 master db 中的 sysprocesses 表中有使用該 db 的 connection spid, 再利用 kill 來刪去即可, 記得你要 restore database 的時候, 你的 connection 預設 database 不能在該 database 裡, 否則也會一併被砍, 或是在還原的時候, 又出現獨佔性的問題, 簡單地說, 就是該 db 不能有任何一個 connection 連在裡面. 要如何找出所有連往該 db 的 connection 呢, 使用 master db 中的 sysprocesses 還有 sysdatabases 就可以知道了, command 如下: select spid from sysprocesses sp inner join sysdatabases sd on sp.dbid=sd.dbid
where sd.name='TestDB' 這些 spid 再一一使用 kill 來進行刪除即可!
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 資料庫: HL 先將原Database Drop,才能RESTORE 以下指令可在Query一起執行 use master if exists(select * from sysdatabases where name='HL') drop database HL RESTORE DATABASE HL FROM DISK = 'D:\ATTDATA\HLBAK.BAK' WITH MOVE 'HL_DATA' TO 'D:\ATTDATA\HL_DATA.MDF', MOVE 'HL_LOG' TO 'D:\ATTDATA\HL_LOG.LDF'cmj兄:您的方法,我已試出來了,這是可行的,感謝您囉..... 引言: hi, channel 兄, 要 kill connection 必須先確認有連往該 db 的 connection 才行, 所以必須使用 sa 的權限, 查詢在 master db 中的 sysprocesses 表中有使用該 db 的 connection spid, 再利用 kill 來刪去即可, 記得你要 restore database 的時候, 你的 connection 預設 database 不能在該 database 裡, 否則也會一併被砍, 或是在還原的時候, 又出現獨佔性的問題, 簡單地說, 就是該 db 不能有任何一個 connection 連在裡面. 要如何找出所有連往該 db 的 connection 呢, 使用 master db 中的 sysprocesses 還有 sysdatabases 就可以知道了, command 如下: select spid from sysprocesses sp inner join sysdatabases sd on sp.dbid=sd.dbid where sd.name='TestDB' 這些 spid 再一一使用 kill 來進行刪除即可!timhuang兄:您的方法有點複雜,小弟資質駑鈍,還是不清楚如何做,我採用了cmj兄的方法,已完成了小弟所要的,再一次感謝您囉.....
------
~小弟淺見,參考看看~ |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
drop database 是不確的做法 若是用 drop database 來進行 db 的 restore 的話, 只是為了將 connect 在該 db 的連線移除的話, 當然是可以進行的, 但是為了 restore database 而 drop database 的話, 無異是飲鴆止渴, 捨本逐末啦..... 只能說, 你的 database 可能比較小, 而且不是在線上使用的 database, 否則一旦 drop 起來, 整個 database 是不見的哦~~ 所以為了 restore database 而 drop database 的做法, 相信是沒有人能認同的吧!
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: drop database 是不確的做法 若是用 drop database 來進行 db 的 restore 的話, 只是為了將 connect 在該 db 的連線移除的話, 當然是可以進行的, 但是為了 restore database 而 drop database 的話, 無異是飲鴆止渴, 捨本逐末啦..... 只能說, 你的 database 可能比較小, 而且不是在線上使用的 database, 否則一旦 drop 起來, 整個 database 是不見的哦~~ 所以為了 restore database 而 drop database 的做法, 相信是沒有人能認同的吧! >>< face="Verdana, Arial, Helvetica"> timhuang兄:小弟受教了 Use Master select spid from sysprocesses sp inner join sysdatabases sd on sp.dbid=sd.dbid where sd.name='Test' 小弟執行這一段SQL語法,spid出來兩筆資料,分別是13及14,Kill指令如何下? 註:已經將分數給cmj,不知timhuang兄還願不願意幫小弟一下?
------
~小弟淺見,參考看看~ |
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: drop database 是不確的做法 若是用 drop database 來進行 db 的 restore 的話, 只是為了將 connect 在該 db 的連線移除的話, 當然是可以進行的, 但是為了 restore database 而 drop database 的話, 無異是飲鴆止渴, 捨本逐末啦..... 只能說, 你的 database 可能比較小, 而且不是在線上使用的 database, 否則一旦 drop 起來, 整個 database 是不見的哦~~ 所以為了 restore database 而 drop database 的做法, 相信是沒有人能認同的吧! >>< face="Verdana, Arial, Helvetica"> 剛測試一下,timhuang兄,您的方法可以囉 先用一個TQuery,查詢出Spid Use Master select spid from sysprocesses sp inner join sysdatabases sd on sp.dbid=sd.dbid where sd.name='Test' 再將所有Spid的值使用Kill刪除DB的Connection 例如小弟找出來是13及14,那就是執行Kill 13及Kill 14即可 因公司的要求,最近小弟正在學習Visual C# .Net,被搞的一個頭兩個大.....,一直沒有時間好好測試這一個問題, >
------
~小弟淺見,參考看看~ |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |