數(shù)據(jù)庫(kù)被置疑后的解決方法_第1頁(yè)
數(shù)據(jù)庫(kù)被置疑后的解決方法_第2頁(yè)
數(shù)據(jù)庫(kù)被置疑后的解決方法_第3頁(yè)
數(shù)據(jù)庫(kù)被置疑后的解決方法_第4頁(yè)
數(shù)據(jù)庫(kù)被置疑后的解決方法_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)據(jù)庫(kù)被置疑后的解決方法數(shù)據(jù)庫(kù)被置疑后的解決方法 A我們使用默認(rèn)方式建立一個(gè)供恢復(fù)使用的數(shù)據(jù)庫(kù)(如test)??梢栽赟QL Server Enterprise Manager  里面建立。 B停掉數(shù)據(jù)庫(kù)服務(wù)器。 C將剛才生成的數(shù)據(jù)庫(kù)的日志文件test_log.ldf刪除,用要恢復(fù)的數(shù)據(jù)庫(kù)mdf文件覆蓋剛才生成的數(shù)據(jù)  庫(kù)數(shù)據(jù)文件test_data.mdf。 D啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器。此時(shí)會(huì)看到數(shù)據(jù)庫(kù)test的狀態(tài)為"置疑"。這時(shí)候不能對(duì)此數(shù)據(jù)庫(kù)進(jìn)行任何*作。 E設(shè)置數(shù)據(jù)庫(kù)允許直接*作系統(tǒng)表。

2、此*作可以在SQL Server Enterprise Manager里面選擇數(shù)據(jù)庫(kù)服  務(wù)器,按右鍵,選擇"屬性",在"服務(wù)器設(shè)置"頁(yè)面中將"允許對(duì)系統(tǒng)目錄直接修改"一項(xiàng)選中。也可以  使用如下語(yǔ)句來(lái)實(shí)現(xiàn)。  use master  go  sp_configure 'allow updates',1  go  reconfigure with override 

3、60;go F設(shè)置test為緊急修復(fù)模式  update sysdatabases set status=-32768 where dbid=DB_ID('test')  此時(shí)可以在SQL Server Enterprise Manager里面看到該數(shù)據(jù)庫(kù)處于"只讀置疑脫機(jī)緊急模式"可以  看到數(shù)據(jù)庫(kù)里面的表,但是僅僅有系統(tǒng)表 G下面執(zhí)行真正的恢復(fù)*作,重建數(shù)據(jù)庫(kù)日志文件  dbcc rebuild_log('test','C:Prog

4、ram FilesMicrosoft SQL ServerMSSQLDatatest_log.ldf')  執(zhí)行過(guò)程中,如果遇到下列提示信息:   服務(wù)器: 消息 5030,級(jí)別 16,狀態(tài) 1,行 1  未能排它地鎖定數(shù)據(jù)庫(kù)以執(zhí)行該*作。  DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。   說(shuō)明您的其他程序正在使用該數(shù)據(jù)庫(kù),如果剛才您在F步驟中使用SQL Server Enterprise Manager  打開(kāi)了te

5、st庫(kù)的系統(tǒng)表,那么退出SQL Server Enterprise Manager就可以了。    正確執(zhí)行完成的提示應(yīng)該類似于:   警告: 數(shù)據(jù)庫(kù) 'test' 的日志已重建。已失去事務(wù)的一致性。應(yīng)運(yùn)行 DBCC CHECKDB 以驗(yàn)證物理一致  性。將必須重置數(shù)據(jù)庫(kù)選項(xiàng),并且可能需要?jiǎng)h除多余的日志文件。  DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。    此時(shí)打開(kāi)在SQL Server Ente

6、rprise Manager里面會(huì)看到數(shù)據(jù)庫(kù)的狀態(tài)為"只供DBO使用"。此時(shí)可以  訪問(wèn)數(shù)據(jù)庫(kù)里面的用戶表了。 H驗(yàn)證數(shù)據(jù)庫(kù)一致性(可省略)  dbcc checkdb('test')    一般執(zhí)行結(jié)果如下:    CHECKDB 發(fā)現(xiàn)了 0 個(gè)分配錯(cuò)誤和 0 個(gè)一致性錯(cuò)誤(在數(shù)據(jù)庫(kù) 'test' 中)。  DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。 &

7、#160; I設(shè)置數(shù)據(jù)庫(kù)為正常狀態(tài)  sp_dboption 'test','dbo use only','false'  如果沒(méi)有出錯(cuò),那么恭喜,現(xiàn)在就可以正常的使用恢復(fù)后的數(shù)據(jù)庫(kù)啦。 J最后一步,我們要將步驟E中設(shè)置的"允許對(duì)系統(tǒng)目錄直接修改"一項(xiàng)恢復(fù)。因?yàn)槠綍r(shí)直接*作系統(tǒng)表  是一件比較危險(xiǎn)的事情。當(dāng)然,我們可以在SQL Server Enterprise Manager里面恢復(fù),也可以使用  如下語(yǔ)句完成 &#

8、160;sp_configure 'allow updates',0  go  reconfigure with override  go   -數(shù)據(jù)庫(kù)(如test) 分離后再附加   EXEC sp_detach_db 'test'  EXEC sp_attach_db 'test','c:Program FilesMicrosoft SQL ServerMSSQLDatatest.mdf','

9、;c:Program FilesMicrosoft SQL ServerMSSQLDatatest_log.ldf'數(shù)據(jù)庫(kù)置疑的處理辦法  在MS SQLSERVER中一直有這樣的問(wèn)題,SQLSERVER的狀態(tài)"置疑",我們先來(lái)分析一下SQLSERVER數(shù)據(jù)庫(kù)"置疑"的原因:  1.錯(cuò)誤的刪除日志;  2.硬件(HD)損壞,造成日志和數(shù)據(jù)文件寫錯(cuò)誤;  3.硬盤的空間不夠,比如日志文件過(guò)大;      解決辦

10、法:    這是最簡(jiǎn)單的辦法是有數(shù)據(jù)庫(kù)的全備份,然后恢復(fù)即可.  步驟:    1. 刪除原始的數(shù)據(jù)庫(kù):  USE MASTER  GO  DROP DATABASE DB_SUEPECT      2.建立同名的數(shù)據(jù)庫(kù):  USE master  GO  CREATE DATABASE DB_SUSPECT 

11、; GO      3.恢復(fù)數(shù)據(jù)庫(kù):  RESTORE DATABASE DB_SUSPECT  FROM DBNAME_BACKUP.DAT      4.數(shù)據(jù)庫(kù)完整性檢測(cè):  DBCC CHECKDB('DB_SUSPECT')    5.重新啟動(dòng)MSSQLSERVER服務(wù).    如果沒(méi)有全備份,那就要用一

12、些特殊的方法:    1.設(shè)置數(shù)據(jù)庫(kù)為緊急模式  Use Master  GO  sp_configure 'allow updates', 1  reconfigure with override  GO  UPDATE sysdatabases SET status = 32768 where name = 'DB_SUSPECT'  GO   

13、60;2.停掉SQL Server服務(wù):  NET STOP MSSQLSERVER    3.把原始數(shù)據(jù)庫(kù)的數(shù)據(jù)文件DBNAME_DAT.MDF,DBNAME_LOG.LDF移走:    4.啟動(dòng)SQL Server服務(wù):  NET START MSSQLSERVER    5.重新建立一個(gè)同名的數(shù)據(jù)庫(kù)DB_SUSPECT;    USE master  GO &#

14、160;CREATE DATABASE DB_SUSPECT  ON  ( NAME = DBNAME_DAT,  FILENAME = 'C:',  SIZE = 10,  FILEGROWTH = 5 )  LOG ON  ( NAME = 'DBNAME_LOG',  FILENAME = 'g:',  SIZE = 5MB,  FILEGRO

15、WTH = 5MB )  GO      6.設(shè)置數(shù)據(jù)庫(kù)運(yùn)行在單用戶的模式:  USE MASTER  GO  ALTER DATABASE DB_SUSPECT SET SINGLE_USER  GO    7.停掉SQL服務(wù):  NET STOP MSSQLSERVER    8.把原來(lái)的數(shù)據(jù)文件再覆蓋回來(lái):  &

16、#160;   9.啟動(dòng)SQL Server服務(wù):  NET START MSSQLSERVER    10.重新設(shè)置SQLSERVER的狀態(tài):  USE MASTER  GO  EXEC sp_resetstatus "DB_SUSPECT"    11.數(shù)據(jù)庫(kù)完整性檢測(cè):  DBCC CHECKDB('DB_SUSPECT')  

17、;  12.恢復(fù)數(shù)據(jù)庫(kù)為多用戶模式:  USE MASTER  GO  ALTER DATABASE DB_SUSPECT SET MULTI_USER  GO    13.恢復(fù)SQLSERVER原始的配置:  USE MATER    GO    UPDATE sysdatabases SET status = 4194320 where name = &

18、#39;DB_SUSPECT'  GO    14.配置SQLSERVER不允許更新系統(tǒng)表:  USE MASTER  GO  sp_configure 'allow updates', 0  reconfigure with override  GO    15.重新啟動(dòng)MSSQLSERVER服務(wù):    最好重新啟動(dòng)操作系統(tǒng)

19、60;   16.備份數(shù)據(jù)庫(kù):    可以通過(guò)SQLSERVER企業(yè)管理器或T-SQL.需要備份MASTER和DB_SUSPECT  補(bǔ)充一點(diǎn),如果用DOMAINUSER時(shí),要注意對(duì).MDF.LDF的所在目錄的權(quán)限. 如何修復(fù)SQLSERVER 數(shù)據(jù)庫(kù)置疑之(二)      如果 SQL Server 因?yàn)榇疟P可用空間不足,而不能完成數(shù)據(jù)庫(kù)的恢復(fù),那么  SQL Server 2000 會(huì)返回錯(cuò)誤 1105 并且將 sysdatabases 中的

20、 status 列設(shè)為置疑。 你可以看到在SQLSERVER 的ERROR LOG 和OS的應(yīng)用程序日志中應(yīng)該有1105的錯(cuò)誤信息: SQL Server事務(wù)日志可能會(huì)被填滿,這會(huì)阻止之后的數(shù)據(jù)庫(kù)操作,包括UPDATE, DELETE, INSERT 和CHECKPOINT。 事務(wù)日志填滿會(huì)導(dǎo)致1105錯(cuò)誤:    Cant allocate space for object syslogs in database dbname because    the logsegment is full。 If you ran ou

21、t of space in syslogs, dump    the transaction log。 Otherwise use ALTER DATABASE or    sp_extendsegment to increase the size of the segment。 這種現(xiàn)象可能出現(xiàn)于任何一個(gè)數(shù)據(jù)庫(kù)中,包括Master和TempDB。一些難以預(yù)見(jiàn)的因素可能消耗日志空間。 例如:一個(gè)大型事務(wù), 尤其像批量數(shù)據(jù)更新、插入或刪除。一個(gè)未提交的事務(wù)。檢查點(diǎn)處理程序截除時(shí)所需的帶寬過(guò)大。截除時(shí)超過(guò)閾值上述各種條件互相作用的結(jié)果。用于發(fā)布的標(biāo)

22、記事務(wù)沒(méi)有被日志讀取程序讀走  下面是修復(fù)的步驟和收縮日志的步驟:    1.在命令提示符下運(yùn)行以下命令啟動(dòng) SQL Server:              SQLSERVER -f -m        備注:-m 開(kāi)關(guān)以單用戶模式啟動(dòng) SQL Server。在單用戶模式下,只能成功建立一個(gè)連接。 請(qǐng)注意是否有任何其他客戶機(jī)或服務(wù)可能會(huì)在您通過(guò) SQL Server 查詢分析器    建立連接前

23、使用那個(gè)連接。    2. 重置置疑數(shù)據(jù)庫(kù)的狀態(tài)。         sp_resetstatus 'database_name' 下面是結(jié)果集:     Database'database_name'status reset!    WARNING: You must reboot SQL Server prior to accessing this database!    3. 用 ALTE

24、R DATABASE 向數(shù)據(jù)庫(kù)添加一個(gè)數(shù)據(jù)文件或日志文件:     USE master    GO    CREATE DATABASE db_name ON    (     NAME = dbname_dat1,      FILENAME = 'D:MSSQLDatadbname_dat1.ndf',     SIZE = 1000MB,     FIL

25、EGROWTH = 50MB    )    GO    -更改該數(shù)據(jù)庫(kù)以添加一個(gè) 2GB 大小的新數(shù)據(jù)文件    ALTER DATABASE db_name    ADD FILE     (     NAME = dbname_dat2,     FILENAME = 'F:MSSQLDATAdbname_dat2.ndf',     SIZE = 200

26、0MB,     FILEGROWTH = 50MB    )    GO    -更改該數(shù)據(jù)庫(kù)以添加一個(gè)1GB 大小的新日志文件    ALTER DATABASE db_name    ADD LOG FILE     ( NAME = db_name_log2,      FILENAME = 'F:MSSQLDatadb_name_log2.ldf',    &#

27、160; SIZE = 1000MB,      FILEGROWTH = 20MB),    GO     4. 停止并重新啟動(dòng) SQL Server:   用新的數(shù)據(jù)文件或日志文件所提供的額外空間,SQL Server 應(yīng)該能完成數(shù)據(jù)庫(kù)的恢復(fù)。      5. 釋放磁盤空間并且重新運(yùn)行恢復(fù)操作,按照下面的步驟收縮日志。 sp_resetstatus 關(guān)閉數(shù)據(jù)庫(kù)的置疑標(biāo)志,但是原封不動(dòng)地保持?jǐn)?shù)據(jù)庫(kù)的其它選項(xiàng)。  為從根本上解

28、決這樣的問(wèn)題,你可以按下面的操作配置SQLSERVER 2000:a.如果不需要恢復(fù)到指定的時(shí)間點(diǎn),你可以將數(shù)據(jù)庫(kù)的恢復(fù)模式配置為簡(jiǎn)單,這樣UPDATE,DELETE,SELECT就不會(huì)記錄日志,日志就不會(huì)增加的很大:      USE MASTER     GO     ALTER DATABASE DB_NAME SET RECOVERY SIMPLEb.如果你的恢復(fù)模式是全部,你一定要配置日志字段收縮:     USE MASTER   &

29、#160; GO    sp_dboption 'databasename','trunc. log on chkpt.',true    sp_dboption 'databasename','autoshrink',truec.通過(guò)每日備份將日志收縮:   BACKUP DATABASE DATABASE_NAME TO BACKUP_DEVICES   BACKUP LOG DATABASE_NAME TO LOG_DEVICES  &

30、#160;OR   BACKUP LOG DATABASE_NAME with truncate_only    *檢查日志的容量:DBCC SQLPERF (LOGSPACE) 這時(shí)日志并沒(méi)有收縮! d.每天在備份數(shù)據(jù)庫(kù)完成之后,重新啟動(dòng)MS SQLSERVER SERVICE.     USE DATABASE_NAME     go     DBCC  SHRINKFILE(2,truncateonly)  

31、*檢查日志的容量:DBCC SQLPERF (LOGSPACE) 這時(shí)日志已經(jīng)收縮! e.手動(dòng)快速收縮日志:  / *run  below  script,you  will  shrink  you  database  log  filesimmediately,  in  my  experience,you  need  to  run  the  script  for  3  

32、;or4  minutes  before stopping  it  manually  */use  databasenamedbcc  shrinkfile(2,notruncate)dbcc  shrinkfile(2,truncateonly)create  table  t1(char1  char(4000)godeclare  i  intselect  i=0while(1=1)begin     while

33、(i<100)             begin           INSERT  INTO  T1  VALUES  ('A')           SELECT  I=I+1           ENDTRUNCATE  table  T1BACKU

34、P  LOG  youdatabasename  with  truncate_onlyendGO    注意  只有在您的主要支持提供者指導(dǎo)下或有疑難解答建議的做法時(shí),才可以使用 sp_resetstatus。否則,可能會(huì)損壞數(shù)據(jù)庫(kù)。  由于該過(guò)程修改了系統(tǒng)表,系統(tǒng)管理員必須在運(yùn)行 sp_resetstatus這個(gè)過(guò)程前,啟用系統(tǒng)表更新。要啟 用更新,使用下面的過(guò)程:  USE master GO sp_configure 'allow updates', 1 GO RECONFIGURE WITH OVERRIDE GO 過(guò)程創(chuàng)建后,立即禁用系統(tǒng)表更新:  sp_configure 'allow updates', 0 GO RECONFIGURE WITH OVERRIDE G

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論