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

SQL Server 實用經驗技巧集(一):掛起操作、收縮壓縮、轉移權限、備份驗證、修復資料庫、日誌清除

     編輯:關於SqlServer

(一)掛起操作解決

安裝 SQL 或 SP 補丁提示有掛起操作需重啟,重啟常無效。解決:刪除登錄鍵 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations。

(二)收縮資料庫

-- 重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
-- 收縮資料與日誌
DBCC SHRINKDB
DBCC SHRINKFILE

(三)壓縮資料庫

dbcc shrinkdatabase(dbname)

(四)轉移資料庫給新用戶保留權限

exec sp_change_users_login 'update_one','newname','oldname'; GO

(五)檢查備份集

RESTORE VERIFYONLY from disk='E:dvbbs.bak'

(六)修復資料庫

ALTER DATABASE [dvbbs] SET SINGLE_USER; GO
DBCC CHECKDB('dvbbs', REPAIR_ALLOW_DATA_LOSS) WITH TABLOCK; GO
ALTER DATABASE [dvbbs] SET MULTI_USER; GO

CHECKDB 三修復參數:
REPAIR_ALLOW_DATA_LOSS:含分配/取消分配、結構修復、刪除損壞文字物件,可能遺失資料。
REPAIR_FAST:小型快速修復(如非叢集索引附加鍵),無資料遺失風險。
REPAIR_REBUILD:含 REPAIR_FAST 所有修復加上重建索引等耗時操作,無資料遺失風險。
常用檢查:DBCC CHECKDB('dvbbs') WITH NO_INFOMSGS, PHYSICAL_ONLY

SQL Server 日誌清除兩法

方法一(圖形介面)

  1. 企業管理器 → 資料庫屬性 → 選項 → 故障還原模式改「簡單」→ 確定。
  2. 右鍵資料庫 → 所有工作 → 收縮資料庫 → 確定。
  3. 完成後建議改回「標準」模式,因日誌為異常情況下恢復關鍵依據。

方法二(腳本)

SET NOCOUNT ON
DECLARE @LogicalFileName sysname, @MaxMinutes INT, @NewSize INT
USE tablename -- 目標資料庫
SELECT @LogicalFileName = 'tablename_log', @MaxMinutes = 10, @NewSize = 1
DECLARE @OriginalSize int
SELECT @OriginalSize = size FROM sysfiles WHERE name = @LogicalFileName
PRINT 'Original Size ...'
CREATE TABLE DummyTrans (DummyColumn char(8000) not null)
DECLARE @Counter INT, @StartTime DATETIME, @TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(), @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
WHILE @MaxMinutes > DATEDIFF(mi, @StartTime, GETDATE())
  AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
  AND (@OriginalSize * 8 / 1024) > @NewSize
BEGIN
  SELECT @Counter = 0
  WHILE (@Counter < @OriginalSize / 16) AND (@Counter < 50000)
  BEGIN
    INSERT DummyTrans VALUES ('Fill Log')
    DELETE DummyTrans
    SELECT @Counter = @Counter + 1
  END
  EXEC (@TruncLog)
END
PRINT 'Final Size ...'
DROP TABLE DummyTrans
SET NOCOUNT OFF
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved