sql更改所屬者

一、怎麼樣把sql server 2000的用戶表的所有者,改成dbo,而不是用戶名。 (附修改存儲過程的方法,在查詢器中執行: 答: 方法一:右鍵點擊該表-》設計表,在上面的一排小圖標中,點第二個“表和索引屬性”,直接在“表”的選項頁裏更換所有者爲dbo即可。 也可以點後3個任意圖標(“管理關係”、“管理關係/鍵”、“條件約束”),切換到“表”的選項頁來操作。(若沒有上面的小圖標,可以在表設計界面中右鍵菜單中看到“屬性”、“關係”、“索引/鍵”、“check約束”的4項,和上面介紹的4項對應) 方法二:執行下面語句 EXEC sp_changeobjectowner 'Pqs.Pqs_Objects', 'dbo',就把用戶Pqs的擁護的對象改爲dbo了。sp_changeobjectowner存儲過程見下面 執行這個語句,就可以把當前庫的所有表的所有者改爲dbo exec sp_msforeachtable 'sp_changeobjectowner ''?'', ''dbo''' 關於sp_msforeachtable ,參見http://www.cnblogs.com/piaoqingsong/archive/2007/06/12/780290.html --如果是要用戶表/存儲過程/視圖/觸發器/自定義函數一齊改,則用遊標(不要理會錯誤提示) declare tb cursor local for select 'sp_changeobjectowner ''['+replace(user_name(uid),']',']]')+'].[' +replace(name,']',']]')+']'',''dbo''' from sysobjects where xtype in('U','V','P','TR','FN','IF','TF') and status>=0 open tb declare @s nvarchar(4000) fetch tb into @s while @@fetch_status=0 begin exec(@s) fetch tb into @s end close tb deallocate tb go 存儲過程 ChangeObjectOwner --功能說明:成批更改數據庫所有者的對象 --作者:不詳 --用法:exec ChangeObjectOwner 'nmkspro','dbo' --即可將所有nmkspro所有者的對象改爲dbo所有 --運行成功後將提示:"注意: 更改對象名的任一部分都可能破壞腳本和存儲過程。" CREATE PROCEDURE dbo.ChangeObjectOwner @OldOwner as NVARCHAR(128),--參數原所有者 @NewOwner as NVARCHAR(128)--參數新所有者 AS DECLARE @Name as NVARCHAR(128) DECLARE @Owner as NVARCHAR(128) DECLARE @OwnerName as NVARCHAR(128) DECLARE curObject CURSOR FOR select 'Name' = name, 'Owner' = user_name(uid) from sysobjects where user_name(uid)=@OldOwner order by name OPEN curObject FETCH NEXT FROM curObject INTO @Name, @Owner WHILE(@@FETCH_STATUS=0) BEGIN if @Owner=@OldOwner begin set @OwnerName = @OldOwner + '.' + rtrim(@Name) exec sp_changeobjectowner @OwnerName, @NewOwner end FETCH NEXT FROM curObject INTO @Name, @Owner END close curObject deallocate curObject GO 方法三:利用腳本直接執行,用系統帳號或者超戶登陸到該數據庫,然後執行下面語句: sp_configure 'allow updates','1' go reconfigure with override go update sysobjects set uid=1 where uid<>1 go sp_configure 'allow updates','0' go reconfigure with override 第二種方法只能使用一次,第二次使用會出錯。 二、數據庫恢復時出現諸如“設備激活錯誤,請使用with move選項來標誌該文件的有效位置”報錯的解決方法 別人將一個數據庫備份發給了我,我爲了看裏面的表,所以我就在我機器裏裝一個MSSQL數據庫。現在我想把保存的這個備份數據庫 caiwu.db 導入到我的 MS SQL數據庫中,發現在企業管理器中,操作:所有任務——>還原數據庫——>選擇“從設備”還原,在硬盤裏找到了那個備份數據庫文件caiwu.db,導入。報錯:設備激活錯誤,請使用with move選項來標誌該文件的有效位置。 解決方法:右鍵點“數據庫”(注意不是某個特定的數據庫)--》所有任務--》還原數據庫--》選擇“從設備”還原,選擇要還原成的數據庫名,然後在選項卡中,選擇最現有數據庫上強制還原數據庫,然後在下面修改數據庫還原後的物理路徑,這個路徑要是存在的一個路徑,否則就會出現上面的錯誤,邏輯文件名可以不用改。 三、只有mdf和ldf文件,甚至只有mdf文件,如何恢復數據庫 1. 首先確認已經備份了.mdf和.ldf文件。 2. 在SQL Server中新建一個同名的數據庫,然後停止SQL Server服務。 3. 用原有的.mdf和.ldf文件覆蓋新建數據庫對應的.mdf和.ldf文件。 4. 重新啓動SQL Server服務,這是應該會看到這個數據庫處於置疑(Suspect)狀態。(人品好的話,這個時候數據庫就已經恢復正常了,上次xrf的數據庫就是這樣被我恢復的。人品不好的話,下面的步驟也不行,我有一次就是找了一個北京做數據恢復的公司才恢復完畢。) 5. 在SQL查詢分析器中執行以下命令,以允許更新系統表: use master go sp_configure ‘allow updates’,1 reconfigure with override go 6. 將這個數據庫置爲緊急模式: update sysdatabases set status = 32768 where name = 'db_name' go 7. 使用DBCC CHECKDB命令檢查數據庫中的錯誤: DBCC CHECKDB(‘db_name’) go 8. 如果DBCC CHECKDB命令失敗,請轉至第10步,否則先將數據庫置爲單用戶模式,再嘗試對其進行修復: sp_dboption 'db_name',’single user’,’true’ DBCC CHECKDB(‘db_name’, REPAIR_ALLOW_DATA_LOSS) GO 如果在執行DBCC CHECKDB(‘db_name’, REPAIR_ALLOW_DATA_LOSS)命令時提示說數據庫未處於單用戶模式狀態的話,則重新啓動SQL Server服務,然後繼續嘗試。 9. 如果DBCC CHECKDB(‘db_name’, REPAIR_ALLOW_DATA_LOSS)命令失敗,請轉至第10步,否則若成功修復了數據庫中的錯誤: 重新執行DBCC CHECKDB(‘db_name’)命令,確認數據庫中已沒有錯誤存在。 清除數據庫的置疑狀態:sp_resetstatus 'db_name' 清除數據庫的單用戶模式狀態:sp_dboption 'db_name',’single user’,’false’ 重新啓動SQL Server服務,如果一切正常的話,則數據庫已經成功恢復。 10. 如果以上步驟都不能解決問題的話,請參考附件中的文檔嘗試通過重建事務日誌來恢復數據庫中的數據。 如果您只有MDF文件,問題就更加複雜一些,我們需要直接重建事務日誌了: 1. 在SQL Server中新建一個同名的數據庫,然後停止SQL Server服務。 2. 用原有的ldf文件覆蓋新建數據庫對應的.mdf文件,將其日誌文件(.ldf)刪除。 3. 啓動SQL Server服務,並將數據庫置爲緊急模式(同上: 步驟5和步驟6)。 4. 停止並重新啓動SQL Server服務。 5. 執行以下命令重建數據庫日誌文件:(下面是個示例,您要用您實際的數據庫名) DBCC REBUILD_LOG(’cas_db’, 'D:/cas_db/cas_db_Log.LDF') 6. 重新將該數據庫置爲單用戶模式。(http://support.microsoft.com/?id=264154) 7. 再次嘗試使用DBCC CHECKTABLE或DBCC CHECKDB命令檢查並修復數據庫中的錯誤
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章