2012年8月14日 星期二

[SQL SERVER] 刪除資料庫帳號出現"無法卸除所選取的使用者因為該使用者擁有物件"的錯誤訊息

        今天在做備援演練,需要將正式環境的資料庫還原到測試機給User驗證,原本想說這應該是再輕鬆不過的事情,沒想到還原一個31GB的DB可以搞一個上午@@"
        
        從一開始將檔案壓縮 -> 複製到測試機 -> 解壓縮 -> 還原DB 四個小時就不見了,之所以會搞這麼久的原因如下
一 網路品質很糟,COPY 31GB的檔案怎麼COPY怎麼失敗,問網路組也說不出原因,只好先把它給壓縮在COPY
二 機器老舊造成壓縮及解壓縮速度都很慢,當然還原速度就更慢。

        雖然如此還是把DB還原完成,完成後很開心地交給AP測試,想說終於可以去吃飯了,沒想到AP竟然說帳號無想登入,噢~對吼~因為是還原正式套的DB,所以雖然帳號名稱一樣但是SID不同也就沒輒,所以想說很快把DB中帳號砍了,再將測試套中的帳號給權限就OK了,不過再砍的時候出現了一個錯誤訊息



查了一下原來是該帳號下有物件存在所以無法刪除,必須將物件的擁有者改調就可以了,解決程序如下:
一 找出該帳號擁有的物件,在SSMS中執行以下指令
     USE 資料庫名稱
     GO
     SELECT U.name '資料庫帳號',O.name '物件名稱',O.xtype '物件類型'
     FROM dbo.sysobjects O INNER JOIN dbo.sysusers U
     ON O.uid=U.uid
     WHERE U.name='該資料庫帳號的名稱'



二  再透過 sp_changeobjectowner 變更物件的擁有者,在SSMS中執行以下指令。P.S. 在前述步驟中,如果出現多個物件名稱,則必須要每一個都要修改到喔。
      USE 資料庫名稱
      GO
      EXEC sp_changeobjectowner '資料庫帳號.物件名稱', 'dbo'



三 刪除該資料庫帳號,,在SSMS中執行以下指令
     EXEC sp_revokedbaccess '資料庫帳號'


沒有留言:

張貼留言