程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQLServer 數據修復敕令DBCC一覽

SQLServer 數據修復敕令DBCC一覽

編輯:MSSQL

SQLServer 數據修復敕令DBCC一覽。本站提示廣大學習愛好者:(SQLServer 數據修復敕令DBCC一覽)文章只能為提供參考,不一定能成為您想要的結果。以下是SQLServer 數據修復敕令DBCC一覽正文


1. DBCC CHECKDB
  重啟辦事器後,在沒有停止任何操作的情形下,在SQL查詢剖析器中履行以下SQL停止數據庫的修復,修單數據庫存在的分歧性毛病與分派毛病。
use master
declare @databasename varchar(255)
set @databasename='須要修復的數據庫實體的稱號'
exec sp_dboption @databasename, N'single', N'true' --將目的數據庫置為單用戶狀況
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(@databasename,REPAIR_REBUILD)
exec sp_dboption @databasename, N'single', N'false'--將目的數據庫置為多用戶狀況
然後履行 DBCC CHECKDB('須要修復的數據庫實體的稱號') 檢討數據庫能否仍然存在毛病。留意:修復後能夠會形成部門數據的喪失。
2. DBCC CHECKTABLE
假如DBCC CHECKDB 檢討仍然存在毛病,可使用DBCC CHECKTABLE來修復。
use 須要修復的數據庫實體的稱號
declare @dbname varchar(255)
set @dbname='須要修復的數據庫實體的稱號'
exec sp_dboption @dbname,'single user','true'
dbcc checktable('須要修復的數據表的稱號',REPAIR_ALLOW_DATA_LOSS)
dbcc checktable('須要修復的數據表的稱號',REPAIR_REBUILD)
------把' 須要修復的數據表的稱號'更改成履行DBCC CHECKDB時報錯的數據表的稱號
exec sp_dboption @dbname,'single user','false'
3. 其他的一些經常使用的修復敕令
DBCC DBREINDEX 重建指定命據庫中表的一個或多個索引
用法:DBCC DBREINDEX (表名,'') 修復此表一切的索引。
===================================
SQL SERVER數據庫的檢測及修復辦法
跟著K/3產物的推行,請求客戶辦事人員對SQL SERVER數據庫的懂得也進一步進步。在K/3的應用進程中,數據庫文件被頻仍地應用,因為某些緣由,數據庫有能夠被破壞,本文將針對這類情形的數據庫檢測及修復辦法做一簡略講授。願望列位在現實任務進程中有新的發明時,實時給我們供給信息,以便做進一步的更新。
1.1 SQL SERVER數據庫的檢測
SQL SERVER供給了數據庫檢測的敕令,可用DBCC CHECKDB對數據庫中各個對象的分派及構造的准確性停止檢測,並可經由過程一參數掌握,將一切的毛病信息顯示出來。其語法以下:
DBCC CHECKDB
('database_name' [,NOINDEX | { REPAIR_ALLOW_DATA_LOSS
| REPAIR_FAST
| REPAIR_REBUILD
}]
) [WITH {ALL_ERRORMSGS | NO_INFOMSGS}]
參數解釋:
'database_name'代表被檢測的數據庫實體名;
NOINDEX指非體系表的非聚族索引不檢測;
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST| REPAIR_REBUILD 指直接修復發明的毛病,個中REPAIR_ALLOW_DATA_LOSS代表,若此毛病不克不及修復時,體系將直接刪除相干數據。帶此三個參數的任一個時,數據庫必需處於單用戶形式,可在Enterprise Manager中的數據庫屬性中設置;
ALL_ERRORMSGS代表將檢測到的毛病信息全體顯示出來,不然,關於每張表最多只顯示200條毛病信息;
NO_INFOMSGS代表隱蔽一切的信息及占用空間的申報。
經由檢測,關於毛病的對象,將以OBJECT ID的情勢申報詳細失足的信息,可依據OBJECT ID到體系表sysobjects中查找到相干的表,即NAME。
1.2 SQL SERVER成績數據庫的修復
經由數據庫檢測後,可針對湧現的成績采用響應的辦法停止處置。如經由過程檢測後,發明對象的物理寄存存在成績,可用DBCC CHECKALLOC來停止修復:
DBCC CHECKALLOC ('database_name' | REPAIR_REBUILD }] ) [WITH {ALL_ERRORMSGS | NO_INFOMSGS}]
若長短體系對象的索引失足,則可用DBCC DBREINDEX停止修復:
DBCC DBREINDEX ( [ 'database.owner.table_name' [, index_name [, fillfactor ] ] ] ) [WITH NO_INFOMSGS]
以上兩種情形,也可直接應用DBCC CHECKDB(‘db_name',repair_rebuild)來修復。
別的一種情形是在停止檢測時,提醒沒法樹立數據銜接,此時注解,數據庫已破壞。關於這類情形,我們可采用以下辦法來測驗考試修復。
起首,在SQL Enterprise中新建一數據庫(如數據庫名為test),建好數據庫後,停滯SQL Server Service Manager,並將客戶數據庫的MDF文件改名為test _data.mdf(即新建數據庫的主文件名),然後用改名後的文件籠罩新建數據庫同名文件,接著,啟動SQL Server Service Manager。對Master數據庫將體系表設置為可更改狀況
Use Master
Go
sp_configure 'allow updates', 1
reconfigure with override
Go
將數據庫設為緊迫狀況:
update sysdatabases set status = 32768 where database '
停滯偏重新啟動SQL Server Service Manager,偏重建Log文件:
DBCC TRACEON (3604)
DBCC REBUILD_LOG(' test ','test _log_ldf')
將數據庫設置為單用戶形式,然落後行檢測:
sp_dboption ' test ', 'single user', 'true'
DBCC CHECKDB(' test ')
Go
此數據庫履行CHECKDB的進程中發明一些表的索引被損壞,因而針對詳細的表停止重建索引的操作:
DBCC DBREINDEX(表名)
如履行以上操作依然不克不及處理,若索引損壞的表是暫時表或不是症結表,則可重新建賬套中引入,若是主表,則能夠經由過程近期的備份來(部分)恢復。若沒有一個備份,則沒法修復。
1.3 SQL Server數據庫為何易破壞呢?
以下是微軟供給的一些能夠惹起數據庫破壞的緣由及一些預防辦法:
操作成績,包含冷起念頭器、熱拔硬盤、刪除一些數據庫文件;
硬件成績,包含磁盤掌握器的成績;
操作體系成績,包含與體系相干的一些致命毛病。
1.4 預防辦法:
1、按期/不按期履行CHKDSK(不帶參數),以檢測硬盤物理構造並修復一些CHKDSK申報的成績;
2、常備份數據。
1.5 運用數據庫修復舉例
declare @databasename varchar(255)
set @databasename='AIS20021224170730'------必定要手工輸出
---------履行普通性修復還存在成績時,停止許可數據喪失的修復
---------許數據喪失的修復請求在單用戶下停止,此時請加入中央層,客戶端,sql的其他模塊
---一切功效加入,在查詢剖析器master裡設置數據庫為單用戶
exec sp_dboption @databasename, N'single', N'true'
-----在查詢剖析器master裡,停止修單數據庫
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(@databasename,REPAIR_REBUILD)
------復原數據庫狀況
exec sp_dboption @databasename, N'single', N'false'
第2章數據庫日記破壞的修復
請遵守以下步調來試圖重建數據庫事務日記.
留意: 因為事務日記喪失, 數據庫能夠有無提交的數據.
注:都要調換成真實的數據庫名字
2.1 步調1:
創立一個新的數據庫,定名為本來數據庫的名字.
2.2步調2:
停滯SQL Server
2.3步調3:
把老數據庫的MDF文件調換新數據庫的響應的MDF文件, 並把LDF文件刪除
2.4步調4:
從新啟動SQL Server 辦事,然後運轉以下敕令:

Use Master
Go
sp_configure 'allow updates', 1
reconfigure with override
Go
begin tran
update sysdatabases set status = 32768 where db_name'
-- Verify one row is updated before committing
commit tran

2.5步調5:
停滯SQL然後從新啟動SQL Server 辦事,然後運轉以下敕令:
DBCC TRACEON (3604)
DBCC REBUILD_LOG('db_name','c:\mssql7\data\dbxxx_3.LDF')
Go
2.6步調6:
停滯SQL然後從新啟動SQL Server 辦事,然後運轉:

use master
update sysdatabases set status = 8 where
Go
sp_configure 'allow updates', 0
reconfigure with override
Go

2.7步調7:
運轉dbcc checkdb(db_name)檢討數據庫的完全性.
第3章 數據庫質疑的普通處置
1、履行以下SQL(翻開修正體系表的開關):
EXEC sp_configure 'allow updates', 1
RECONFIGURE WITH OVERRIDE
2、修正數據庫Master中的表:sysdatabases
將 status字段數值更改成4
3、再履行以下SQL:
EXEC sp_configure 'allow updates', 0
RECONFIGURE WITH OVERRIDE。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved