CHECK_OBJECT

check_object 过程用于检查指定表是否存在数据坏块,并报告该表的数据坏块个数。检查完成后,会将指定表的数据坏块信息添加到系统表 sys_repair(表的坏块信息),用户可从系统表中查看数据坏块的详细信息。

如果指定表被删除,会将该表在 sys_repair 表中的信息删除。

声明

DBMS_REPAIR.CHECK_OBJECT (
  schema_name    IN   VARCHAR2,
  object_name    IN   VARCHAR2,
  corrupt_count  OUT  BINARY_INTEGER);

结构

参数 说明
schema_name 模式名
object_name 表名
corrupt_count 坏块个数

示例

检查表的数据坏块并查看数据坏块信息

-- 当用户在执行表扫描时遇到了磁盘IO错误、CRC错误或逻辑错误,可以执行以下操作来查看该表的所有坏块信息。

-- 假设已经创建了表 t1, 并模拟 t1 上存在物理坏块。

-- 调用 check_object 检查该表的所有坏块,返回结果显示检查成功,并打印坏块个数
declare
    corr_count integer;
begin
    dbms_repair.check_object('SYSDBA','T1',corrupt_count=>corr_count);
    dbms_output.put_line(corr_count);
end;
/
-- 4
-- DO

-- 查询坏块信息,MAIN_SEGMENT:表的主段,LOB_2:表的第二列LOB段,TOAST:toast段
select * from sys_repair;
--  RELID | TSID | FILEID | BLOCKID | NODEID | SCHEMANAME | RELNAME |  SEGMENTTYPE  | MARKEDCORRUPT | CORRUPTIONTYPE |  CHECKTIME
-- -------+------+--------+---------+--------+------------+---------+---------------+---------------+----------------+-------------
--  34817 |    5 |      5 |     148 | 0      | SYSDBA     | T1      | MAIN_SEGMENT  | t             | physical       | 2024-09-23
--  34817 |    5 |      5 |     149 | 0      | SYSDBA     | T1      | MAIN_SEGMENT  | t             | physical       | 2024-09-23
--  34817 |    5 |      5 |      55 | 0      | SYSDBA     | T1      | LOB_2         | t             | physical       | 2024-09-23
--  34817 |    5 |      5 |     182 | 0      | SYSDBA     | T1      | TOAST         | t             | physical       | 2024-09-23
-- (4 rows)