使用 sp_iqcheckdb dropleaks 修复数据库分配问题。
注意 此过程使用 -gd 和 -gm 开关限制数据库的访问。要使用限制性更强的方法,请以强制恢复模式启动服务器。
database/my_db.db注意 必须以 ".db" 扩展名(而不是 ".DB")启动数据库。 使用两个服务器启动开关限制访问: 使用 -gd DBA 以便只有具备 SERVER OPERATOR 系统特权的用户才能启动和停止数据库。(请注意,客户端必须已连接到服务器才能启动或停止数据库,因此此开关不阻止连接。) 使用 -gm 1 可允许单个连接外加一个超限 DBA 连接,这样 DBA 便可在紧急情况下进行连接并断开其它连接。
database'如果一个或多个 dbspace 处于脱机状态,则只需运行下面的命令来修复 dbspace 的分配问题:sp_iqcheckdb 'dropleaks dbspace <dbspace-name>'如果分配修复成功,sp_iqcheckdb 会显示消息“空闲列表已更新。” 如果检测到错误,sp_iqcheckdb 会返回消息“空闲列表未更新”或“检测到错误”。
分配问题得到修复后,分配统计信息将出现在 DBCC 输出中,其中将不再有错误信息。
DBCC 在报告的顶部显示了 Allocation Summary 部分,其中列出了有关分配使用情况的信息。 Allocation Statistics 部分提供了有关块的详细信息。 DBCC 输出中不包含已恢复的泄漏的块的修复信息。
例如:
sp_iqcheckdb 'dropleaks dbspace mydbspace';
checkpoint;
sp_iqcheckdb 输出指示没有任何错误,因此执行了 checkpoint。
DBCC 会报告未在该简短输出中显示的统计信息。
Stat Value Flags
==============================|===================================|=====
DBCC Allocation Mode Report | |
==============================|===================================|=====
DBCC Status |Freelist Updated |
DBCC Status |No Errors Detected |
DBCC Work units Dispatched |75 |
DBCC Work units Completed |75 |
==============================|===================================|=====
Allocation Summary | |
==============================|===================================|=====
Blocks Total |8192 |
Blocks in Current Version |4594 |
Blocks in All Versions |4594 |
Blocks in Use |4610 |
% Blocks in Use |56 |
==============================|===================================|=====
Allocation Statistics | |
==============================|===================================|=====
DB Extent Count |1 |
Marked Logical Blocks |8176 |
Marked Physical Blocks |4594 |
Marked Pages |511 |
Blocks in Freelist |126177 |
Imaginary Blocks |121567 |
Highest PBN in Use |5425 |
Total Free Blocks |3582 |
Usable Free Blocks |3507 |
% Free Space Fragmented |2 |
Max Blocks Per Page |16 |
1 Block Page Count |103 |
3 Block Page Count |153 |
...
16 Block Hole Count |213 |
==============================|===================================|=====
注意 执行强制恢复或恢复泄漏的块时,必须以 ".db" 扩展名(而不是 ".DB")启动数据库。例如: start_iq -n my_db_server -x 'tcpip{port=7934}'-gd dba -iqfreq my_db /work/database/my_db.db