Email: [email protected] 7 x 24 online support!
Oracle数据库坏坏块检测
	Oracle数据库坏坏块检测
	1、DBMS_REPAIR
	DBMS_REPAIR.CHECK_OBJECT存储过程可以用来检测特定的数据库数据对象上的坏块,并给出相关报告。 
- 执行对特定的表、分区或者索引的块级别检测
 - 找出那些指向损坏数据行的索引记录
 - 产生一张修复表
 
	如何使用该过程?
	1- 创建一张修复表
		BEGIN
		DBMS_REPAIR.ADMIN_TABLES (
		TABLE_NAME => 'REPAIR_TABLE',
		TABLE_TYPE => dbms_repair.repair_table,
		ACTION => dbms_repair.create_action,
		TABLESPACE => 'USERS');
		END;
		/
		2- 检测损坏
			SET SERVEROUTPUT ON
			DECLARE num_corrupt INT;
			BEGIN
				num_corrupt := 0;
				DBMS_REPAIR.CHECK_OBJECT (
				SCHEMA_NAME => 'SCOTT',
				OBJECT_NAME => 'DEPT',
				REPAIR_TABLE_NAME => 'REPAIR_TABLE',
				CORRUPT_COUNT => num_corrupt);
				DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt));
				END;
				/
				3- 在将块标记为损坏前,查询修复表
					SELECT OBJECT_NAME, BLOCK_ID, CORRUPT_TYPE, MARKED_CORRUPT,
					CORRUPT_DESCRIPTION, REPAIR_DESCRIPTION
					FROM REPAIR_TABLE
					4- DBMS_REPAIR.FIX_CORRUPT_BLOCKS能做的是 将check_object检测到的损坏块,从软件层面标记为损坏
						SET SERVEROUTPUT ON
						DECLARE num_fix INT;
						BEGIN
						num_fix := 0;
						DBMS_REPAIR.FIX_CORRUPT_BLOCKS (
						SCHEMA_NAME => 'SCOTT',
						OBJECT_NAME=> 'DEPT',
						OBJECT_TYPE => dbms_repair.table_object,
						REPAIR_TABLE_NAME => 'REPAIR_TABLE',
						FIX_COUNT=> num_fix);
						DBMS_OUTPUT.PUT_LINE('num fix: ' || TO_CHAR(num_fix));
						END;
						/
						5- 确认标记已经完成
							SELECT OBJECT_NAME, BLOCK_ID, MARKED_CORRUPT
							FROM REPAIR_TABLE;

沪公网安备 31010802001377号
Add new comment