9i catalog的一个bug

一个rman的catalog库,是9i的版本。在连接这个库做backup的时候,能正常完成,但是在做restore的时候,就报错了:

根据RMAN-06004和ORA-01455,我们很容易就能发现9i catalog库的一个bug:bug 1260760,详见 Known RMAN Bugs in Oracle9i (Doc ID 227398.1)

在9i中,当使用catalog库进行restore等操作时,会引用rman_seq这个序列,而rman这个程序是由proc C写的,在定义字段时,接受的值被定义成UB4MAXVAL,这种类型的值最大为4294967295,即2^32-1。当从catalog库传rman.seq值给rman时,如果超过这了4294967295,就会报错rman-6004和ora-1455。

解决的方法可以是:

建议采用第二种方法。新建10g catalog,将9i的数据导入。目前从遇到该问题的别的客户那边看,大多采用第二种的方法。

如在上面的报错的那个库中,我们检查到rman_seq的值为:

另,排除其他ora-1445的bug,如:
(1)在11g中,数据文件超过4T,也会触发ora-1455,我们的版本不是11g,也没有数据文件超过4T。

(2)由于夏令时的切换,导致start_time>completion_time,也会触发ora-1455,我们不存在start_time>completion_time的记录。

Ps:另外,根据分析,在该catalog库上有3个库的备份,一个是verdb,一个是impdb,一个是mandb。在rc_backup_datafile会记录备份的各个文件,备份时会取rman_seq的序列的值进行记录。rc_backup_datafile的其中一个基表是bs表,bs表有个字段叫bs_key,是主键,这个值的取值是根据rman_seq来取。

也就是说,在备份时,每个文件会对应一个rman_seq号,然后写入到rc_backup_datafile中记录。而rman_seq在一个owner下是公用的,因此用的比较快,加上verdb和impdb都是大库,文件比较多,因此用rman_seq就很快达到阀值了。(因此,9i中,对于很多数据文件的大库的catalog库,最好还是分不同的owner)。

从检查情况看:

verdb和impdb由于bs_key的值已经超过阀值,因此已经无法把最新的备份restore回去。而mandb的备份应该还可以restore回去。

3个库可以restore回去最近的时间为:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据