在使用數據庫的過程中經常會遇到數據庫遷移或者數據遷移的問題或者有突然的數據庫損壞這時需要從數據庫的備份中直接恢復但是此時會出現問題這裡說明幾種常見問題的解決方法
一孤立用戶的問題
比如以前的數據庫的很多表是用戶test建立的但是當我們恢復數據庫後test用戶此時就成了孤立用戶沒有與之對應的登陸用戶名哪怕你建立了一個test登錄用戶名而且是以前的用戶密碼用該用戶登錄後同樣沒辦法操作以前屬於test的用戶表
這個問題有兩種辦法解決
先說解決的前提條件
首先要用備份文件還原數據庫我們這裡的數據庫名為testdb裡面有屬於用戶test的用戶表這個很容易了操作了不多講了在企業管理器中很方便可以恢復恢復後就產生了孤立用戶test
然後用sa用戶或者具有DBA權限的用戶登錄創建一個test數據庫登錄用戶密碼隨便設置了也可以和以前的保持一致我們用它來對應孤立的test用戶
下面就有兩種操作方法了第一種就是改變對象的屬主第二種就是使登錄用戶和數據庫的孤立用戶對應起來
方法一修改對象屬主
就是將原本屬於數據庫用戶test的用戶表修改為屬於dbo的用戶表然後修改test登錄用戶的數據庫為testdb就可以直接使用test登錄用戶登錄後對該數據庫進行操作了
使用的存儲過程
sp_changeobjectowner [ @objname = ] object [ @newowner = ] owner
參數說明
[ @objname = ] object
當前數據庫中現有表視圖用戶定義函數或存儲過程的名稱object 是 nvarchar()沒有默認值如果架構及其所有者具有相同的名稱則 object 可由現有對象所有者限定格式為 existing_ownerobject
[ @newowner=] owner
將成為對象的新所有者的安全帳戶的名稱owner 的數據類型為 sysname沒有默認值owner 必須是可訪問當前數據庫的有效數據庫用戶服務器角色Microsoft Windows 登錄名或 Windows 組如果新所有者是沒有對應數據庫級主體的 Windows 用戶或Windows 組則將創建數據庫用戶
實例
以下示例將 authors 表的所有者更改為dbo
EXEC sp_changeobjectowner authors dbo;
GO
這個方法有個最大的缺點就是當表的數量非常多而且還有存儲過程或者觸發器之類的修改起來會非常麻煩需要一個一個修改所以不提倡使用現在網上有一個批量修改的存儲過程大家可以找一下這裡就不說了而是教大家一個更簡單的
[] []
From:http://tw.wingwit.com/Article/program/SQL/201311/16308.html