一个库,在备份时报错ORA-19501,下面将我的分析过程简单罗列下
环境:linux + oracle 10.1.0.4.2
错误内容如下
RMAN> run {
2> backup database format '/XXX/flash_recovery_area/prod/backupset/%U.dbf';
3> }
Starting backup at 01-AUG-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=296 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00046 name=/XXX/oradata/prod/datafile/o1_mf_esbigtbl_1q6k0sp9_.dbf
input datafile fno=00002 name=/XXX/oradata/prod/datafile/o1_mf_undotbs1_1q6jqcko_.dbf
input datafile fno=00063 name=/XXX/oradata/prod/datafile/o1_mf_content__1q6k05ym_.dbf
......
......
channel ORA_DISK_1: starting piece 1 at 01-AUG-13
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 08/01/2013 15:48:46
ORA-19501: read error on file "/XXX/oradata/prod/datafile/o1_mf_content__1q6k05ym_.dbf", blockno 15233 (blocksize=8192)
ORA-27072: File I/O error
Linux Error: 2: No such file or directory
Additional information: 15232
首先根据上面的错误信息
1. 查看了该数据文件,发现它在物理上是存在的
2.根据oracle的错误编号,挖掘更多的内容
[oracle@infra bin]$ oerr ora 19501
19501, 00000, "read error on file \"%s\", blockno %s (blocksize=%s)"
// *Cause: read error on input file
// *Action: check the file
[oracle@infra bin]$ oerr ora 27072
27072, 00000, "File I/O error"
// *Cause: read/write/readv/writev system call returned error, additional
// information indicates starting block number of I/O
// *Action: check errno
分析:读取文件错误,推断可能有坏块,具体是物理坏块还是逻辑坏块呢
3.查看告警日志,里面没有错误信息,没有提供有价值的信息
下面就从坏块入手
4.查看坏块所在的表空间及对象
SQL> r
1 SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME, A.PARTITION_NAME
2 FROM DBA_EXTENTS A
3 WHERE FILE_ID = &FILE_ID
4* AND &BLOCK_ID BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1
Enter value for file_id: 63
old 3: WHERE FILE_ID = &FILE_ID
new 3: WHERE FILE_ID = 63
Enter value for block_id: 15233
old 4: AND &BLOCK_ID BETWEEN BLOCK_I