暂无图片
没有RMAN备份,ORA-01578该如何修复?
我来答
分享
暂无图片 匿名用户
没有RMAN备份,ORA-01578该如何修复?
暂无图片 10M

ORALCE 11.2.0.4单机环境,最近有个ORA-01578的报错,alert日志文件内容如下:

Reread of blocknum=72250, file=/oradata/orcl/data02.dbf. found same corrupt data

数据文件12号的72250块有问题

RMAN> backup check logical validate datafile 12;


List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
12 FAILED 0 7661 1089536 337279833
File Name: /oradata/orcl/data02.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 916729
Index 0 160356
Other 1 4790        


这个坏块是个表,然后通过expdp把这个表导出来,过程没有报错。接着又impdp导入并换了个表名

然后使用RMAN修复坏块报错

RMAN> blockrecover datafile 12 block 72250;

Starting recover at 02-JUN-23
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=2866 device type=DISK

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 06/02/2023 19:47:22
RMAN-06026: some targets not found - aborting restore
RMAN-06100: no channel to restore a backup or copy of datafile 12


应该是RMAN备份集过期,现在无法修复了


现在的问题是:

1,RAMN里检查出来的这个数据库类型Block Type是other,这个other是什么类型?

2,最近RMAN备份都是失败状态,就因为有这个坏块无法备份。那该如何修复才能RMAN备份呢

3,既然有坏块,为何expdp的时候没报错?


请各位大佬帮忙解答一下,谢谢

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
Thomas

比如原表A,IMPDP进去的新表B,A存储在datafile 12 block 72250上,但B肯定不是存数据在该BLOCK上吧。所以问题2,无法修复该块也无所谓吧。问题3,EXPDP导出是逻辑导出,也许该表的坏块上恰好没存数据?

暂无图片 评论
暂无图片 有用 2
打赏 0
伪文艺

显然这个坏块是一个没有被使用,可以把这个数据文件写满,让oracle用到这个没有被使用的块,oracle会自动格式化未使用的块

暂无图片 评论
暂无图片 有用 0
打赏 0
amazing
  1. 备份当前的数据库文件:在进行任何修复操作之前,务必先备份当前的数据库文件和控制文件。这是为了确保数据的安全性,以便在修复尝试失败时可以恢复到原始状态。

  2. 检查控制文件的状态:使用SQL*Plus或其他Oracle数据库管理工具连接到数据库,并执行以下查询来检查控制文件的状态:

    sql

    SELECT STATUS FROM V$CONTROLFILE;

    复制

    如果控制文件的状态为OFFLINERECOVER,说明控制文件已经损坏或丢失。

  3. 尝试手动修复控制文件:如果控制文件仍然可用,但存在损坏或不完整的情况,你可以尝试手动修复控制文件。以下是一些可能的方法:

    • 从备份控制文件中恢复:如果你有可用的备份控制文件,可以尝试将备份控制文件恢复到数据库中。使用操作系统级别的备份文件将备份控制文件复制到正确的位置,然后使用RECOVER DATABASE USING BACKUP CONTROLFILE命令来恢复。

    • 从其他控制文件中复制:如果你有多个控制文件副本,你可以尝试使用其他控制文件副本来替换损坏的控制文件。在数据库启动之前,将备用控制文件复制到正确的位置,并确保文件权限正确。

    • 使用SQL命令修复:如果你有数据库的DDL脚本或可以重现控制文件的DDL命令,你可以尝试使用SQL命令手动修复控制文件。这需要对Oracle数据库的内部结构有一定的了解,并且风险较高,因此请谨慎操作。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏