12c upgrade catalog hatası

11.2.0.4 veritabanlarımızı 12.2.0.1 versiyonuna upgrade etmeye başladığımızda backuplar için mevcut kataloğumuzu da upgrade etme ihtiyacımız oluştu. Katalog veritabanı versiyonumuz 11.2.0.4 olarak kalırken üzerindeki catalog veritabanının versiyonunu 12.2 olarak upgrade edecektik. Ama bu işlemi yaparken.  bir hata ile karşılaştık. Upgrade işlemi yaparken aşağıdaki support dökümanındaki adımları takip ettik. Catalog veritabanında iki adet prosedür çalıştırtıyor.

How to upgrade RMAN catalog SCHEMA from 11g to 12.1.0.2 without upgrading the catalog database (Doc ID 1970049.1)

İlgili nottaki işlemleri tamamladıktan sonra , catalog veritabanına bağlanıp upgrade komutunu verdiğimizde aşağıdaki hatayı aldık.

RMAN>
RMAN> upgrade catalog;
PL/SQL package RMANUSER.DBMS_RCVMAN version 11.02.00.04 in RCVCAT database is too old
recovery catalog owner is RMANUSER
enter UPGRADE CATALOG command again to confirm catalog upgrade
RMAN> upgrade catalog;
PL/SQL package RMANUSER.DBMS_RCVMAN version 11.02.00.04 in RCVCAT database is too old
error creating modify_bdf_pdb_key_not_null
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-06004: ORACLE error from recovery catalog database: ORA-02296: cannot enable (RMANUSER.) - null values found

ilgili hatayı supportta incelediğimizde bir bug a benzediğini gördük ( Bug 20861957. ) . Ama bizdeki durum biraz farklıydı.  Normalde bu bug, incarnation kaydı bulunmayan( orphan ) controlfile backupları için geçerliydi ve 12.2 de bu bug fixed olarak görünüyordu. Biz 12.2 versiyonu kullandığımızdan çözülmüş olması gerekirdi.

Aşağıdaki komut ile orphan controlfile kaydımız olmadığını doğruladık.

select * from RMANUSER.bcf where not exists (select 1 from RMANUSER.dbinc where dbinc.dbinc_key = bcf.dbinc_key);

Ancak catalogdaki orphan kayıtlara bakarken. Datafile backupları için birçok orphan kayıt olduğunu gördük.

select * from RMANUSER.bdf where not exists (select 1 from RMANUSER_RESTORE_TEST.dbinc where dbinc.dbinc_key = bdf.dbinc_key);

Aşağıdaki komut ile eski incarnationlardan kalan orphan kayıtları sildik. Öncelikle ilgili kayıtları select ederek kontrol etmekte fayda var. bizde eski restore testlerinden kalan kullanılmayan incarnationlardan kayıtlar vardı ve bu kayıtları sildik.

delete bdf where not exists (select 1 from RMANUSER_RESTORE_TEST.dbinc where dbinc.dbinc_key = bdf.dbinc_key);

Daha sonra upgrade katalog komutunu çalıştırdığımızda catalog başarılı bir şekilde upgrade oldu. Hem 11.2.0.4 hem de 12.2.0.1 veritabanlarımızdan bu catalog’a backup alabilir hale geldik.

Veritabanlarınızın, rman client ve catalog versiyonu uyumluluklarına (Doc ID 73431.1) notundan bakabilirsiniz.