首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 資料庫重命名、擁有者變更、資料匯入匯出、欄位內容替換、孤立使用者修復全攻略

     編輯:關於SqlServer

問題一:資料庫重命名(企業管理器無此功能)

必須在查詢分析器執行系統預存程序:


-- 1. 先終止所有連線(避免鎖定)
CREATE PROC dbo.killspid @dbname SYSNAME AS
BEGIN
    DECLARE @sql NVARCHAR(MAX), @spid INT;
    SET @sql = N'DECLARE c CURSOR FOR SELECT spid FROM sysprocesses WHERE dbid = DB_ID(''' + @dbname + N''')';
    EXEC sp_executesql @sql;
    OPEN c; FETCH NEXT FROM c INTO @spid;
    WHILE @@FETCH_STATUS = 0
    BEGIN
        EXEC(N'KILL ' + @spid);
        FETCH NEXT FROM c INTO @spid;
    END
    CLOSE c; DEALLOCATE c;
END
GO

-- 2. 執行終止連線
EXEC dbo.killspid 'OldDBName';
GO

-- 3. 重命名
EXEC sp_renamedb 'OldDBName', 'NewDBName';
GO

替代法:企業管理器 → 右鍵資料庫 → 所有工作 → **分離資料庫** → 勾選「清除連線」 → 執行 sp_renamedb → 再附加。

問題二:批次變更所有資料表擁有者為 dbo


-- 在目標資料庫內執行
EXEC sp_MSForEachTable 'sp_changeobjectowner ''?'', ''dbo''';
GO

隱藏預存程序 sp_MSForEachTable 會遍歷使用者資料表,自動套用 sp_changeobjectowner。

問題三:資料匯入匯出保留主鍵、Identity、預設值等物件

DTS/匯入匯出精靈預設僅複製資料,**物件屬性會遺失**。正確步驟:

  1. 選擇「在 SQL Server 之間複製物件和資料」(第三項)。
  2. 下一步 → 取消「複製所有物件」→ 勾選「選取物件」。
  3. 在對話框中逐一勾選需遷移的**資料表、檢視表、預存程序、使用者定義函數、預設值、規則、觸發器**等。
  4. 完成精靈,目標端將完整保留結構與屬性。

問題四:欄位內容批次替換(如清理注入惡意碼)


UPDATE TargetTable
SET TargetColumn = REPLACE(TargetColumn, '惡意字串', '安全字串');
GO

⚠️ 執行前**務必完整備份**,建議先用 SELECT 驗證影響範圍:


SELECT * FROM TargetTable WHERE TargetColumn LIKE '%惡意字串%';

問題五:還原資料庫後出現 80040e21 / 500 錯誤(孤立使用者)

現象:資料庫還原後,網站存取報「ODBC 驅動程式不支援所需屬性」或 HTTP 500。
原因:資料庫內使用者存在,但對應的伺服器登入 (Login) 遺失(SID 不匹配)。

修復步驟

  1. 企業管理器 → 安全性 → 登入 → 刪除無對應資料庫使用者的登入(或在資料庫內刪除孤立 User)。
  2. 重新建立登入,對應至該資料庫使用者:
    EXEC sp_change_users_login 'Auto_Fix', 'UserName', NULL, 'Password'; (SQL 2000/2005)
    ALTER USER UserName WITH LOGIN = LoginName; (SQL 2005+)
  3. 授予最小權限:db_datareader、db_datawriter,**避免給 db_owner**。

問題六:資料庫還原後內部伺服器錯誤(權限未授予)

特徵:資料庫使用者存在,但「登入」欄為空。
解決:企業管理器 → 安全性 → 使用者 → 刪除該使用者 → 重新新增 → 指派 db_datareader/db_datawriter。同樣遵循最小權限原則。

結語

這六大經典問題涵蓋了資料庫生命週期中「重命名、擁有者、遷移、清洗、還原、權限」的核心痛點。掌握 sp_renamedb、sp_MSForEachTable、匯出精靈「複製物件」選項、REPLACE 清洗、孤立使用者 sp_change_users_login/ALTER USER 修復,即可從容應對大多數維運情境。記住:**動刀前先備份、最小權限原則、驗證後再提交**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved