• Arun Kumar

Oracle Database Migration from Windows to Linux Using RMAN

We all know that RMAN is a powerful tool for database backup, recovery, cloning and migration. In this article, we will be perform database migration from Windows to Linux using RMAN with two scenarios.

RMAN Windows to Linux Migration (same version)

In this scenario, we will be migrating Oracle database from Windows to Linux where both source and target database version are 12c.

Both source & target database version is same - 12c

In order to convert the database from one platform to another, the endian format of both databases should be the same. Let's check the v$transportable_platform view for both platforms

col platform_name for a35
set pagesize 1000
select * from v$transportable_platform order by 2;

We can see from the output that both Windows and Linux are in the little-endian format.

Open the source database is read-only mode

shutdown immediate;
startup mount;
alter database open read only;

Use dbms_tdb.check_db function to check whether the database can be transported to a target platform

set serveroutput on
v_return boolean;
v_return:=dbms_tdb.check_db('Linux x86 64-bit');

If nothing is returned, then it means that the database is ready to be transported to the destination platform.

Execute below function to check for the existence of external objects, directories, and BFILEs

v_return boolean;

Create pfile from spfile

create pfile from spfile;

Start RMAN conversion in SOURCE database

rman target /

convert database new database 'orcl' 
transport script 'c:\Clone\transport.sql' 
db_file_name_convert 'C:\app\piyus\oradata\orcl'
'c:\Clone' to platform 'Linux x86 64-bit';

Now copy the parameter file, transport.sql script, which is located at the $ORACLE_HOME/database directory, that is used to create the database and all datafiles to the destination host.

Create dump directories on target host

mkdir -p admin/orcl/adump admin/orcl/bdump
mkdir -p admin/orcl/cdump admin/orcl/udump
mkdir -p oradata/orcl/
mkdir -p fast_recovery_area/orcl    

Copy below files carefully from source to target host:

  • We have to copy all the datafile in oradata folder

  • Pfile to $ORACLE_HOME/dbs and

  • TRANSPORT.SQL to the /tmp

Edit the Pfile on target host and change the path of the below:

  • adump location

  • control_files locations

Edit the transportscript.sql file and change the locations of pdfile, redolog files and data files

Now set the ORACLE_SID to orcl, connect to sqlplus and run the transport script


RMAN Windows to Linux Migration (higher version)

In this scenario, we will be migrating Oracle database from Windows to Linux where both source database is 12c version and target database is 19c version.

Source database is 12c and target database is 19c version

In order to Clone the database from Windows 12c to Linux 19c we have to do the same as steps as we did above, we just need to edit the TRANSPORT.SQL and remove all the lines after STARTUP UPGRADE parameter

Set the ORACLE_SID to orcl and run the script inside sqlplus


Our next steps is to upgrade the database to 19c

cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl catctl.pl catupgrd.sql

This will take around takes about 40-50mins to upgrade 12c to 19c

Login to the sqlplus again and bounce the database and create spfile.

create SPFILE from PFILE;

Run utlrp.sql script to re-compile invalid objects - if any

SQL> @?/rdbms/admin/utlrp.sql

Wait for the script to complete and your database migration from Windows to Linux onto a higher version is done!

Further Read

Recent Posts

See All

Reclaim Unused Space in Oracle

Over a period of time, updates and deletes on objects within a tablespace can create pockets of empty space that individually are not large enough to be reused for new data. This type of empty space i

Oracle 12c to 19c Database Upgrade

In this article we will be looking at two most commonly used methods of upgrading Oracle database from 12c to 19c Pre-upgrade tasks Upgrade using DBUA Upgrade using Manual Method You can perform a dir