… How it is possible?
Let’s imagine you need to migrate a database from HP-UX PA-RISC to HP-UX IA64, both are 64-bit. It’s easy as it is supported to have such mixed Data Guard environment according to the MOS document 413484.1 (for more detailed description regarding these platforms see 395982.1). You just create a physical standby and then perform a switchover. Total downtime is near several minutes, the task is done and all clients and bosses are happy.
Several years later you need to migrate the same database to the different platform, say Linux x68_64. As endianness is different it is not so simple as you wish, but there is Transportable Tablespaces and RMAN’s CONVERT command and you decided to perform conversion on the destination (I hope to describe all the challenge in other story). When converting on the destination host, you must specify the source platform with the FROM clause of CONVERT command. OK, the source platform is ‘HP-UX IA (64-bit)’, let’s do the thing:
RMAN> CONVERT DATAFILE '/path/to/file01', ... '/path/to/file11' FROM PLATFORM 'HP-UX IA (64-bit)'; RMAN-03002: failure of conversion at target command at ... RMAN-06576: platform 'HP-UX (64-bit)' (3) found in header of datafile /path/to/file01 does not match specified platform name 'HP-UX IA (64-bit)' (4)
OK, RMAN says we have ‘HP-UX (64-bit)’ in a datafiles header. Let’s try:
RMAN> CONVERT DATAFILE '/path/to/file01', ... '/path/to/file11' FROM PLATFORM 'HP-UX (64-bit)'; RMAN-03002: failure of conversion at target command at ... RMAN-06576: platform 'HP-UX IA (64-bit)' (4) found in header of datafile /path/to/file07 does not match specified platform name 'HP-UX (64-bit)' (3)
The problem is described in MOS Document 1067946.1: the headers were not modified during previous platform migration. The workaround is simple – convert datafiles created before migration as FROM ‘HP-UX (64-bit)’ and after migration as FROM ‘HP-UX IA (64-bit)’, or convert all the files on the source platform.
The main question I have after all: if RMAN so smart to know the platform when raises an error, why it couldn’t detect source platform without FROM clause?