練功房推薦書單

  • 猛虎出柙雙劍合璧版--最新 OCA / OCP Java SE 7 Programmer 專業認證 (電子書)
  • 流浪教師存零股存到3000萬(全新增修版)(書+DVD)
  • 開始在關西自助旅行(京都‧大阪‧神戶‧奈良)(全新增訂版)
  • 不敗教主的300張股票存股術

將SQL Server 2000備份的資料庫還原至SQL Server 2005 Express中無法刪除舊帳號問題解法 RSS feed
Forum Index » SQL Server
Author Message
andowson

七段學員
[Avatar]

Joined: 2007/1/2
Messages: 709
Location: 台北
Offline
最近幫一個客戶移植網站,順便測試資料庫是否能從SQL Server 2000升級至SQL Server 2005,過程大致如下:
1.下載並安裝Microsoft SQL Server 2005 Express Edition with Advanced Services Service Pack 2,安裝過程還滿順利的。
2.接著建立一個新的資料庫,這邊需要決定資料檔Data和交易日誌檔Log的目錄,通常我都會選擇將他們分開與系統磁碟機在不同的磁碟分割,例如D:或E:。
3.然後選擇這個新建的資料庫,進行還原工作。這邊需要修改一下還原後的Data和Log檔位置為剛才第二步的目錄和檔名,最好也勾選一下強制對原來資料庫還原。
4.問題來了,接下來就是要建立原有的使用者帳號,但是當要指定這個新建的帳號去使用還原後的資料庫時卻會出現這個帳號已存在的錯誤。

怎麼辦?很多人第一時間想到的就是把還原後資料庫中的那個舊使用者刪掉,但是選到了之後,按下刪除卻收到一個錯誤訊息
資料庫主體在資料庫中擁有結構描述且無法卸除。(Microsoft SQL Server, Error: 15138)


用Google找了一下,發現有兩種解法:
1. 將這個新建的帳號跟舊的帳號對應起來,其實我們本來的目的就是要建立一個帳號來對應到舊有SQL Server 2000資料庫中的使用者帳號,如果可以這麼做,那麼就可以不用刪除帳號了
USE 資料庫名稱
EXEC sp_change_users_login 'Update_One', '使用者帳號', '使用者帳號'

例如:
USE mydb;
EXEC sp_change_users_login 'Update_One', 'andowson', 'andowson';


2.仔細看一下錯誤訊息中的提示,原來SQL Server 2005強化了Schema的概念,在Restore SQL Server 2000 Backup檔的同時,自動為User建了同名Schema。如果我們確定原來所有的物件都是以dbo為Owner,則先將舊帳號的結構描述刪除,然後就可以刪除該帳號了。

歸納流程如下:
1) 展開資料庫名稱->安全性->結構描述
2) 刪除不要的使用者名稱結構描述
3) 然後回到使用者,將舊的帳號刪除即可。

參考資料:
http://blog.cs.nhcue.edu.tw/~mingzhe/?p=399
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=107720&SiteID=1
http://blog.darkthread.net/blogs/darkthreadtw/archive/2006/08/07/kb-restore-sql-2000-backup-on-sql-2005.aspx

分享經驗 累積智慧
[WWW]
 
Forum Index » SQL Server
Go to:   
Mobile view