Oracle数据库常见真实问题处理步骤
2008-09-27 12:57:14 来源:WEB开发网WHERED.TABLESPACE_NAME=F.TABLESPACE_NAME
ORDERBY4DESC;
3 XX网Oracle数据库SYSTEM表空间文件坏块的解决办法
故障现象:
NetBackup备份出错,日志如下:
RMAN-00571:===========================================================
RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS===============
RMAN-00571:===========================================================
RMAN-03009:failureofbackupcommandonch01channelat06/15/200502:28:44
ORA-19566:超出损坏块限制0(文件/u01/app/oradata/unicom/system01.dbf)
故障分析:
由于事前发生过别的表空间(cookdbs:/u01/app/oradata/unicom/cokdbs.dbf)也有坏块的情况,根据李智他们的建议,使用迁移数据后删除表空间的办法解决(仅适用于普通表空间)。
这是查询该表空间上的表和索引对象的一个脚本:
GXdb%morequery.sql
conn/assysdba
colownerfora25
colsegment_namefora40
spooltable.log
selectdistinctOWNER,SEGMENT_NAMEfromdba_extents
whereTABLESPACE_NAME='COOKDB'
andSEGMENT_TYPE='TABLE';
spooloff
spoolindex.log
selectdistinctOWNER,SEGMENT_NAMEfromdba_extents
whereTABLESPACE_NAME='COOKDB'
andSEGMENT_TYPE='INDEX';
spooloff
exit
查询完毕后,使用一个迁移的脚本迁移到新的表空间:
GXdb% more move.sh
#!/bin/ksh
sqlplus /nolog @query.sql
NEWTBS="cookdbs1"
echo "conn /as sysdba" > move.sql
for TNAME in `cat table.log | awk '
/^COOKDB/ {print $2}
'`
do
echo "alter table cookdb.$TNAME move tablespace $NEWTBS;" >>move.sql
done
for INAME in `cat index.log | awk '
/^COOKDB/ {print $2}
'`
do
echo "ALTER INDEX cookdb.$INAME REBUILD TABLESPACE $NEWTBS;" >>move.sql
done
echo "exit" >>move.sql
sqlplus /nolog @move.sql
本次经过检查,发现包括有System在内的四个表空间的四个数据文件有坏块。为了能使用NetBackup备份,对NetBackup脚本做以下修改(对相应的数据文件设置maxcorrupt):
更多精彩
赞助商链接