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)