您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

使用 DBCC 修复分配问题

使用 sp_iqcheckdb dropleaks 修复数据库分配问题。

背景信息

注意 此过程使用 -gd 和 -gm 开关限制数据库的访问。要使用限制性更强的方法,请以强制恢复模式启动服务器。

过程

  1. 启动服务器。例如: start_iq -n my_db_server -x 'tcpip{port=7934}' -gd dba -gm 1 /work/database/my_db.db注意 必须以 ".db" 扩展名(而不是 ".DB")启动数据库。 使用两个服务器启动开关限制访问: 使用 -gd DBA 以便只有具备 SERVER OPERATOR 系统特权的用户才能启动和停止数据库。(请注意,客户端必须已连接到服务器才能启动或停止数据库,因此此开关不阻止连接。) 使用 -gm 1 可允许单个连接外加一个超限 DBA 连接,这样 DBA 便可在紧急情况下进行连接并断开其它连接。

  1. 使用 -gd DBA 以便只有具备 SERVER OPERATOR 系统特权的用户才能启动和停止数据库。(请注意,客户端必须已连接到服务器才能启动或停止数据库,因此此开关不阻止连接。)

  1. 使用 -gm 1 可允许单个连接外加一个超限 DBA 连接,这样 DBA 便可在紧急情况下进行连接并断开其它连接。

  1. 以沙漏模式运行存储过程 sp_iqcheckdb:sp_iqcheckdb 'dropleaks database'如果一个或多个 dbspace 处于脱机状态,则只需运行下面的命令来修复 dbspace 的分配问题:sp_iqcheckdb 'dropleaks dbspace <dbspace-name>'如果分配修复成功,sp_iqcheckdb 会显示消息“空闲列表已更新。” 如果检测到错误,sp_iqcheckdb 会返回消息“空闲列表未更新”或“检测到错误”。

  1. sp_iqcheckdb 完成后,请停止服务器。要停止服务器,请在 UNIX 中使用 stop_iq,或在 Windows 中使用主控台窗口中的关闭按钮。

    结果

    分配问题得到修复后,分配统计信息将出现在 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