source$表坏块

应用测试服务器的系统表空间source$表出现了坏块,没有任何备份,以下记录了处理过程,有没有问题有待进一步验证。

C:UsersAdministrator>rman target /

恢复管理器: Release 11.2.0.4.0 - Production on 星期二 8月 25 11:02:24 2020

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved

已连接到目标数据库: SCPRD (DBID=975345988)

RMAN> validate datafile 1;

启动 validate 于 25-8月 -20
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=142 设备类型=DISK
通道 ORA_DISK_1: 正在开始验证数据文件
通道 ORA_DISK_1: 正在指定数据文件进行验证
输入数据文件: 文件号=00001 名称=D:ORADATASCPRDSYSTEM01.DBF
通道 ORA_DISK_1: 验证完成, 用时: 00:00:08
数据文件列表
=================
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
1 OK 1 14997 113921 11025338
文件名: D:ORADATASCPRDSYSTEM01.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 79053
索引 0 15281
其他 0 4589

通道 ORA_DISK_1: 正在开始验证数据文件
通道 ORA_DISK_1: 正在指定数据文件进行验证
包括要进行验证的当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 验证完成, 用时: 00:00:01
控制文件和 SPFILE 的列表
===============================
文件类型 状态 失败的块 已检查的块
------------ ------ -------------- ---------------
SPFILE OK 0 2
控制文件 OK 0 644
完成 validate 于 25-8月 -20

SQL> select * from v$database_block_corruption;

FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTION_TYPE
---------- ---------- ---------- ------------------ ------------------
1 80409 1 0 CHECKSUM

SQL> SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents
2 WHERE file_id = 1 and 80409 between block_id AND block_id + blocks - 1;

TABLESPACE_NAME SEGMENT_TYPE OWNER SEGMENT_NAME
------------------------------------------------------------ ------------------------------------ ------------------------------------------------------------ ------------------------------
SYSTEM TABLE SYS SOURCE$

获取到SOURCE$的建表语句
create table SOURCE$_tmp
(
obj# NUMBER not null,
line NUMBER not null,
source VARCHAR2(4000)
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 16K
next 200K
minextents 1
maxextents unlimited
);
-- Create/Recreate indexes
create unique index I_SOURCE1 on SOURCE$ (OBJ#, LINE)
tablespace SYSTEM
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 16K
next 200K
minextents 1
maxextents unlimited
);

如果要备份表可以用exp导出。
-- exp "/ as sysdba" file=d:dbbak ab_source.dmp log=d:dbbaklogfile.log tables=sys.source$

SQL> create table SOURCE$_tmp
2 (
3 obj# NUMBER not null,
4 line NUMBER not null,
5 source VARCHAR2(4000)
6 )
7 tablespace SYSTEM
8 pctfree 10
9 pctused 40
10 initrans 1
11 maxtrans 255
12 storage
13 (
14 initial 16K
15 next 200K
16 minextents 1
17 maxextents unlimited
18 );

表已创建。

SQL> insert into source$_tmp select * from source$;
insert into source$_tmp select * from source$
*
第 1 行出现错误:
ORA-01578: ORACLE 数据块损坏 (文件号 1, 块号 80409)
ORA-01110: 数据文件 1: 'D:ORADATASCPRDSYSTEM01.DBF'


SQL> alter system set events='10231 trace name context forever,level 10';

系统已更改。

SQL> insert into source$_tmp select * from source$;

已创建 670547 行。

SQL> commit;

提交完成。

SQL> rename source$ to source$_bad;

表已重命名。

SQL> alter system set events='10231 trace name context off';

系统已更改。

SQL> select count(*) from source$_bad;

COUNT(*)
----------
670658

SQL> rename source$_tmp to source$;

表已重命名。

SQL> truncate table source$_bad;

表被截断。


SQL> select * from v$database_block_corruption;

FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTION_TYPE
---------- ---------- ---------- ------------------ ------------------
1 80409 1 0 CHECKSUM

SQL> insert into source$_bad select * from source$;

已创建 670547 行。

SQL> commit;

提交完成。

RMAN> validate datafile 1;

启动 validate 于 25-8月 -20
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始验证数据文件
通道 ORA_DISK_1: 正在指定数据文件进行验证
输入数据文件: 文件号=00001 名称=D:ORADATASCPRDSYSTEM01.DBF
通道 ORA_DISK_1: 验证完成, 用时: 00:00:07
数据文件列表
=================
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
1 OK 0 14939 113921 11029102
文件名: D:ORADATASCPRDSYSTEM01.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 79054
索引 0 15339
其他 0 4588

通道 ORA_DISK_1: 正在开始验证数据文件
通道 ORA_DISK_1: 正在指定数据文件进行验证
包括要进行验证的当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 验证完成, 用时: 00:00:01
控制文件和 SPFILE 的列表
===============================
文件类型 状态 失败的块 已检查的块
------------ ------ -------------- ---------------
SPFILE OK 0 2
控制文件 OK 0 644
完成 validate 于 25-8月 -20


SQL> select * from v$database_block_corruption;

未选定行

坏块记录已消除,损失了100多条数据,最后创建一下索引。

SQL> create unique index I_SOURCE2 on SOURCE$ (OBJ#, LINE)
2 tablespace SYSTEM
3 pctfree 10
4 initrans 2
5 maxtrans 255
6 storage
7 (
8 initial 16K
9 next 200K
10 minextents 1
11 maxextents unlimited
12 );

索引已创建。

原文地址:https://www.cnblogs.com/historynote/p/13558846.html