一次TempDB损毁的处理过程

博客记录了SQL Server数据库故障,8:30左右数据库当机,cluster移转后无法启动,查看Windows日志有错误记录。经检查需对TEST/G做check disk,完整备份数据库等操作,但再次启动仍失败。最终通过查找资料,按微软文档步骤重建TempDB,使数据库恢复正常。
故障環境:WinNT4.0Cluster+SQL Server7.0 


故障描述
:  8:30左右發現資料庫當機,cluster作移轉後sql server無法起來,查看windows日志,有錯誤紀錄如下

 

事件類型:   錯誤

事件來源:   ClusSvc

事件類別目錄:     (2052)

事件識別碼:        1066

日期:         2005-1-21

時間:         8:23:20

使用者:              N/A

電腦: TEST

描述:

Cluster disk resource Disk G:: is corrupt. Running ChkDsk /F to repair problems.

請在 http://go.microsoft.com/fwlink/events.asp 查看說明及支援中心,以取得其他資訊。

 

根據該錯誤紀錄,需要對TEST/Gcheck disk.再對資料庫做完整backup,停止cluster服務,重起server,chkdsk g: /f 執行成功.再次啟動sql server,依舊無法開啟,windows event log出下以下錯誤

 

事件類型:   資訊

事件來源:   MSSQLServer$TEST

事件類別目錄:     Server

事件識別碼:        17055

日期:         2005-1-21

時間:         8:23:54

使用者:              N/A

電腦: TEST

描述:

17052 :Database 'tempdb' cannot be opened. It has been marked SUSPECT by recovery. See the SQL Server errorlog for more information.

請在 http://go.microsoft.com/fwlink/events.asp 查看說明及支援中心,以取得其他資訊。

資料:

0000: 9c 42 00 00 0a 00 00 00   œB......

...

 

0030: 00 00                     ..     

 

Microsoft網站查找17055,10752的錯誤代碼沒有結果. 通過查找關鍵字 “Database 'tempdb' cannot be opened”,找到重建TempDB的一篇文章http://support.microsoft.com/default.aspx?scid=kb;en-us;288809

 

處理方法: 根據微軟文檔,操作步驟如下

1.設置SQL Server Virtul Server Name

C:/> set _CLUSTER_NETWORK_NAME=YourSQLVirtualName

2.命令行啟動SQL Server單用戶模式(命令行窗口不能關閉)

C:/> sqlservr -c -f -T3608 -T4022

3.開啟查詢分析器,SA登入,執行系統存儲過程重設TempDB狀態

exec master..sp_resetstatus Tempdb

4.CTRL+C關閉第2步的命令行窗口

5.重新正常啟動SQL Server,此時會自動重建TempDB

6.還原第1步的環境參數設置

C:/> set _CLUSTER_NETWORK_NAME=

 

至此,資料庫恢復正常.

 

### TempDB 使用、性能与配置概述 在 SQL Server 环境中,`tempdb` 是一个特殊的系统数据库,用于存储临对象和中间结果。它在每次 SQL Server 实例启动都会被重新创建,这意味着任何在 `tempdb` 中存在的对象在实例重启后都会丢失[^4]。`tempdb` 的性能和空间使用是 SQL Server 性能调优中的关键领域之一,因为它在整个 SQL Server 环境中是最活跃的数据库和公共资源[^2]。 #### TempDB 的使用场景 - **临变量**:用户可以在 `tempdb` 中创建本地全局临,以及变量,这些对象用于存储短期数据。 - **内部对象**:SQL Server 使用 `tempdb` 存储某些内部操作的中间结果,如排序、哈希操作等。 - **版本存储**:`tempdb` 还包含版本存储区,用于支持行版本控制,这在实现快照隔离级别和在线索引重建等操作中非常重要[^2]。 #### TempDB 的性能优化 为了实现 `tempdb` 的最佳性能,可以遵循以下优化建议: - **多数据文件配置**:将 `tempdb` 配置为多个数据文件,可以提高并发性能。通常建议将数据文件数量设置为 CPU 核心数的 1/4 到 1/2,以减少争用。 - **预分配空间**:避免 `tempdb` 自动增长操作,因为这些操作可能会导致性能瓶颈。可以通过预分配足够的空间来减少自动增长的频率。 - **快速恢复模式**:`tempdb` 默认使用简单恢复模式,并且不支持完整恢复模式。此外,`tempdb` 的事务日志不会被持久化,因此可以将其配置为快速恢复模式。 - **监控和调优**:定期监控 `tempdb` 的空间使用情况和性能指标,确保其能够满足当前的工作负载需求。可以参考文章《如何监控 SQL Server TempDB 数据库》来获取更多详细信息[^3]。 #### TempDB 的配置建议 - **初始大小和自动增长设置**:合理设置 `tempdb` 数据文件和日志文件的初始大小,并根据实际需求调整自动增长参数,以避免频繁的自动增长操作。 - **文件位置**:将 `tempdb` 的数据文件和日志文件放置在高性能的存储设备上,以提高 I/O 性能。 - **文件组管理**:如果 `tempdb` 配置了多个数据文件,建议将它们分配到不同的物理磁盘上,以分散 I/O 负载。 ### 示例:查看 `tempdb` 的空间使用情况 以下是一个简单的 T-SQL 查询,用于查看 `tempdb` 中的空间使用情况: ```sql USE tempdb; GO SELECT (total_pages * 8) / 1024 AS TotalSpaceMB, ((total_pages - used_pages) * 8) / 1024 AS FreeSpaceMB, (used_pages * 8) / 1024 AS UsedSpaceMB FROM sys.allocation_units; ``` 此查询返回 `tempdb` 的总空间、已用空间和剩余空间(以 MB 为单位),帮助管理员评估当前的空间使用情况。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值