zoukankan      html  css  js  c++  java
  • 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 );

    索引已创建。

  • 相关阅读:
    决策表
    边界值
    等价类
    python_安装python2.7.7和easy_install
    网络_系统测试方案
    软件测试之魂_测试方案模板
    初识HTTP协议web开发
    Bootstrap框架
    jQuery快速入门
    前端基础之BOM和DOM
  • 原文地址:https://www.cnblogs.com/historynote/p/13558846.html
Copyright © 2011-2022 走看看