Monday, 18 March 2019

RMAN Backup Tuning

Improving Performance Through Parallelism

Problem
You want to improve RMAN performance by utilizing multiple I/O channels.

Solution

Use the parallel clause of the configure command to instruct RMAN to allocate multiple channels for backup and restore operations.
The following command instructs RMAN to automatically allocate four channels for the default disk device:

RMAN> configure device type disk parallelism 4;

How It Works

An easy way to improve performance is to allocate multiple channels for backup and restore operations. If your database has datafiles that physically exist across different disks, then using multiple channels can significantly reduce the time required to back up and restore your database.
The default degree of parallelism for a channel is 1 (and can be up to 254).
If you change the degree of parallelism, RMAN will start the number of server sessions to match the degree of parallelism that you specify.
For example,
if you specify a degree of parallelism of 4, then RMAN will start four server sessions for that channel. A good rule of thumb to follow is to have the degree of parallelism match the number of physical devices.
For example,
if you have datafiles distributed over four physical drives, then
a parallelism degree of 4 would be appropriate. If you have only one physical drive, then set-
ting the degree of parallelism to a higher value generally does not help improve performance.
To view the degree of parallelism for the default device type, use the show device type
command as shown here:
RMAN> show device type;
RMAN configuration parameters are:
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;CHAPTER 16 ■ TUNING RMAN
You can configure channel devices to back up to different locations on disk as shown
here:
RMAN>
RMAN>
RMAN>
RMAN>
configure
configure
configure
configure
channel
channel
channel
channel
1
2
3
4
device
device
device
device
type
type
type
type
disk
disk
disk
disk
format
format
format
format
'/ora01/backup/rman%U.bak';
'/ora02/backup/rman%U.bak';
'/ora03/backup/rman%U.bak';
'/ora04/backup/rman%U.bak';
In this case, if you configure the degree of parallelism to 4, then RMAN will spread the backup pieces across the four configured channels. If you set the degree of parallelism to 1,
then RMAN will back up only to the first channel device defined (even though you have con-figured four channels).
You can view the channel configuration information as shown here:
RMAN> show channel;

16-6. Maximizing Throughput to Backup Device
Problem
You suspect that your backup device is a bottleneck for backup operations. You want to adjust
the throughput to the backup device.
Solution
You can tune the throughput to backup devices by adjusting RMAN’s level of multiplexing.
RMAN multiplexing is controlled by three parameters:
• filesperset
• maxopenfiles
• diskratio

Using filesperset
Use the fileperset clause of the backup command to limit the number of datafiles in each backup set. For example, if you wanted to limit the number of files being written to a backup
set to only two files, you would use filesperset, as shown here:
RMAN> backup database filesperset 2;

Using maxopenfiles

Use the maxopenfiles clause of the configure channel command or the allocate channel command to limit the number of files that can be simultaneously open for reads during a
backup. If you want to limit the number of files being read by a channel to two files, use
maxopenfiles as follows:
RMAN> configure channel 1 device type disk maxopenfiles 2;
To reset the channel maxopenfiles back to the default setting, use the clear parameter as
shown here:
RMAN> configure channel 1 device type disk clear;

Using diskratio

The diskratio parameter of the backup command instructs RMAN to read datafiles from a
specified number of disks. For example, if you wanted RMAN to include datafiles located on
at least four different disks into one backup set, then use diskratio as follows:
RMAN> backup database diskratio 4;
If you specify filesperset, and not diskratio, then diskratio will default to the value of
filesperset. The diskratio parameter works only on operating systems that can provide
RMAN with information such as disk contention and node affinity.
How It Works
Multiplexing backup sets is RMAN’s ability to read multiple datafiles simultaneously and write
them to the same physical backup piece file. The level of multiplexing is defined by the num-
ber of files read simultaneously.
As of Oracle Database 10g, RMAN will automatically tune the level of multiplexing of your
backup sets. RMAN will automatically divide the files being read during a backup across the
available channels. Therefore, under most conditions you will not be required to tune
throughput. If you’re working with tape devices, you may need to adjust the parameters
described in this recipe to ensure that writes to tape are continuously streaming. Setting
filesperset high and maxopenfiles low may increase the efficiency of writing to your tape
device.
You can alter the default levels of multiplexing by using the filesperset and maxopenfiles
parameters. The value of filesperset specifies the maximum number of files in each backup
set. The default value of filesperset is as follows:
MIN(64, # of files to be backed up divided by the numbers of channels allocated)CHAPTER 16 ■ TUNING RMAN
For example, if you had 12 datafiles in your database and allocated two channels, then the
number of files in each backup piece would be 6.
The default value of maxopenfiles is as follows:
MIN(8, # files being backed up)
This places a limit on the number of files that RMAN can read in parallel. For example, if
you set maxopenfiles for a channel to 2, then only two datafiles would be read and then writ-
ten to the backup piece at a time (for that channel).

Oracle determines the
number of parallel processes to spawn for media recovery from the initialization parameter
cpu_count. This parameter is set by default to the number of CPUs on your database server.
For example, if your server has two CPUS, then by default cpu_count will be set to 2 when
you create your database. For this server, Oracle will spawn two processes to apply redo any-
time you issue a recover command (from either RMAN or SQL*Plus).



Tuning Crash Recovery

Problem

You want to ensure that your database comes up as efficiently as possible after you issue a
shutdown abort command or experience a hard crash. You want to specify a target duration
time for any crash recovery that is needed as a result of an instance crash or a shutdown abort
command.
Solution
The fast_start_mttr_target initialization parameter allows you to specify a target value in
seconds that denotes the amount of time that you want Oracle to take to perform crash recov-
ery. To determine an appropriate value for this parameter, follow this procedure:
1. Disable the initialization parameters that interfere with fast_start_mttr_target.
2. Determine the lower bound for fast_start_mttr_target.
3. Determine the upper bound for fast_start_mttr_target.
4. Select a value within the upper and lower bounds.
5. Monitor and adjust.
The following subsections provide more detail on this procedure.

After your database has experienced a normal amount of activity, you can query
V$MTTR_TARGET_ADVICE as follows:
SQL>
2
3
4
SELECT
mttr_target_for_estimate, advice_status, estd_cache_writes, estd_total_ios
from v$mttr_target_advice
order by 1;
The following output shows values of writes and I/O for each estimated value of
fast_start_mttr_target:
MTTR_TARGET_FOR_ESTIMATE
------------------------
52
130
209
288
377
ADVIC ESTD_CACHE_WRITES ESTD_TOTAL_IOS
----- ----------------- --------------
ON
1811
11030
ON
1575
10794
ON
1575
10794
ON
1575
10794
ON
1575
10794

Migration steps DUPLICATING DATABASES AND TRANSPORTING DATA

Migration steps DUPLICATING DATABASES AND TRANSPORTING DATA


1) Oracle’s transportable tablespaces feature lets you move large amounts of data much faster than an export and import of data. This is because the transportable tablespace opera-tion requires that you copy only those datafiles pertaining to a tablespace and merely export and import the metadata concerning the tablespaces.
The transportable tablespace feature shighly useful when archiving historical data, performing tablespace point-in-time recovery,and exporting and importing large data warehouse table partitions. You can transport table-spaces across platforms,which means you can use this feature to easily migrate Oracle databases from one platform to another or move data from data warehouses to data martsrunning on smaller platforms.

2)big disadvantage in that method(export/import method)  is that the transportable tablespaces must be put in a “read-only” mode, thus affect-ing database availability. It not only may be time-consuming to put the tablespaces into read-only mode, but users can’t write to those tablespaces for the duration of the tablespace transport. You don’t have any of these limitations when you use RMAN backups as the basis of your transportable tablespace operation.You can create transportable tablespace sets from RMAN backups. You must have a prior backup of all the datafiles that belong to the transportable tablespace set and the archived redo logs, so RMAN can use them to recover to the target point in time.You may use this capability of RMAN for creating transportable tablespace sets for report-ing purposes. Transportable tablespace sets are also highly useful during the instantiation of streams. The one big requirement for using RMAN backups to create transportable table-
spaces is that your RMAN backups must be recoverable to the SCN at which you want the transportable tablespaces.
RMAN creates an auxiliary database instance through which it creates the transportable tablespace sets. RMAN does quite a few things in order to prepare the transportable table set.
Here’s a summary of the actions set off when you execute the transport tablespace

command:

RMAN creates an auxiliary database instance through which it creates the transportable
tablespace sets. RMAN does quite a few things in order to prepare the transportable table set.
Here’s a summary of the actions set off when you execute the transport tablespace
command:

1. RMAN starts an auxiliary instance in nomount mode first. You don’t have to specify a
parameter file for this auxiliary instance, since RMAN automatically creates the file.
The name of the auxiliary instance is also made up by RMAN. In our example shown
in the previous section, the ORACLE_SID of the auxiliary instance is aux (Creating
automatic instance, with SID='aux').

2. RMAN restores a backup of the target database control file and uses it to mount the
auxiliary database.

3. Using the switch operation, RMAN restores all datafiles from the target database
for the auxiliary instance. These files are restored to the location specified by the
auxiliary destination clause in the transport tablespace command.

4. RMAN also stores the files pertaining to the tablespaces in the transportable table-
space set in the location specified by the tablespace destination parameter in the
transport tablespace command.

 ■ DUPLICATING DATABASES AND TRANSPORTING DATA

5. Once the datafiles from the target database are all restored to the auxiliary database
location, RMAN performs a point-in-time recovery of the auxiliary instance. In our
example, since we didn’t specify a target time, a complete database recovery is per-
formed. Note that all applicable archived redo logs are also automatically restored and
applied by RMAN during the recovery process. Once the recovery is finished, an open
resetlogs operation is performed on the auxiliary database by RMAN.

6. RMAN invokes the Data Pump Export utility (in the transportable tablespace mode)
to create the export dump file containing the tablespaces in the transportable table-
space set. By default, the export dump file is placed in the location specified by the
tablespace destination clause of the transport tablespace command.

7. RMAN also simultaneously generates a Data Pump Import script you can use to plug
in the transported tablespaces into the target database. The default script name is
impscrpt.sql, and this script is located in the directory specified by the tablespace
destination clause of the transport tablespace command.

8. RMAN shuts down the auxiliary instance and automatically deletes all the files created
and used during the transport tablespace process. The only files that remain are the
transportable set files, the Data Pump Export log, and the sample Data Pump Import
script.

In the example shown in the solution, the RMAN-created impscrpt.sql script was used to
import the tablespaces into the target database. The script utilizes a PL/SQL script to import
the tablespaces.


15-10. Resynchronizing a Duplicate Database

Problem

You want to synchronize a duplicate database with its parent database.

Solution

Once you create a duplicate database from a source database, you can periodically “update”
or synchronize the duplicate database by simply rerunning the duplicate command over
again, in essence re-creating the duplicate database (reduplicating the target database). In the
following example, we first perform a one-time setup of the new datafile names by using the
configure auxname clause, as shown here:

RMAN> connect target /
RMAN> connect catalog rman/cat@catdb
RMAN> connect auxiliary sys/sammyy1@dupdb
RMAN> run {
configure auxname for datafile 1 to '/oradata1/system01.dbf';
configure auxname for datafile 2 to '/oradata2/sysaux01.dbf';
configure auxname for datafile 3 to '/oradata3/undotbs01.dbf';
configure auxname for datafile 4 to '/oradata4/drsys01';
configure auxname for datafile 5 to '/oradata5/example01.dbf';
configure auxname for datafile 6 to '/oradata6/indx01.dbf';
configure auxname for datafile 7 to '/oradata7/users01.dbf';
}
Synchronize the duplicate database with the source database by periodically executing
the duplicate target database command to re-create the duplicate database. For example:
RMAN> connect target /
RMAN> connect catalog rman/cat@catdb
RMAN> connect auxiliary sys/sammyy1@dupdb
RMAN> duplicate target database to dupdb
logfile
group 1 ('/duplogs/redo01a.log',
'/duplogs/redo01b.log') size 200k reuse,
group 2 ('/duplogs/redo02a.log',
'/duplogs/redo02b.log') size 200k reuse;
You can schedule this script for running on a daily or a weekly basis, thus creating a new
and up-to-date duplicate database on a continuous basis.

 ■ DUPLICATING DATABASES AND TRANSPORTING DATA

How It Works

To synchronize a duplicate database with the parent database, you must in essence re-create
the duplicate database by transferring the latest copies of the source database files to the
duplicate database.
To set up a database for periodic synchronization, you must first use the configure
command to set persistent new names for the datafiles. Once you set the persistent datafile
names, the filenames will be recorded in the control file, and RMAN will use the same file-
names each time you synchronize the duplicate database by using the duplicate command.
Remember that you have to employ the configure auxname clause only once—the first
time you duplicate the database. RMAN will reuse the same persistent filenames anytime you
execute the duplicate command after configuring the auxiliary filenames to synchronize the
duplicate database.

 Transporting Tablespaces on the Same OS Platform

Problem

You want to transport tablespaces using RMAN backups instead of performing the trans-
portable tablespaces operation on the “live” production database.

Solution

You create a transportable tablespace set by executing the RMAN command transport
tablespace. The following example shows how to transport tablespaces on identical operating
system platforms by utilizing RMAN backups. Here are the steps you must follow to transport
the tablespaces:

1. Make sure the tablespaces you plan to transport are self-contained. To be considered
self-contained, the tablespace set you want to transport mustn’t contain references
pointing outside those tablespaces, such as an index on a table that doesn’t belong to
one of the tablespaces you’re transporting. In the following example, the transportable
tablespace set consists of two tablespaces—test1 and test2. Use the transport_set_check
procedure of the DBMS_TTS package to verify whether the two tablespaces are self-
contained, as shown here:

SQL> execute sys.dbms_tts.transport_set_check('test1, test2',TRUE);
PL/SQL procedure successfully completed.
SQL>
To confirm that there are no errors because of the tablespaces, you can also query the
sys.transport_set_violations table after running the sys.dbms_tts.transport_set
procedure to verify the results and view error messages if there are any.

■ Note You don’t have to manually make the tablespaces you are transporting read-only. RMAN will do this as part of the transport tablespace command.

 DUPLICATING DATABASES AND TRANSPORTING DATA

2. Generate the transportable tablespace set by issuing the transport tablespace com-
mand. During regular (without RMAN) tablespace transport, you use an operating
system utility such as the cp or copy command to copy the database files that belong to
the tablespaces in the transportable tablespace set. Here, however, since we’re using
RMAN to transport the tablespaces, we use the RMAN backups for this purpose:

RMAN> transport tablespace test1,test2
2> tablespace destination '/u05/app/oracle/transportdest'
3> auxiliary destination '/u05/app/oracle/auxdest';
Creating automatic instance, with SID='aux'
db_name=NINA
db_unique_name=tspitr_NINA_aux
...
starting up automatic instance NINA
Oracle instance started
contents of Memory Script:
{
# restore the controlfile
restore clone controlfile;
# mount the controlfile
sql clone 'alter database mount clone database';
...
}
executing command: SET until clause
Starting restore at 20-JUN-07
...
Finished restore at 20-JUN-07
sql statement: alter database mount clone database
alter clone database open resetlogs;
executing command: SET until clause
executing command: SET NEWNAME
...
Starting restore at 20-JUN-07
...
Finished restore at 20-JUN-07
...
Starting recover at 20-JUN-07
...
Finished recover at 20-JUN-07
database opened
# export the tablespaces in the recovery set
host 'expdp userid=\"/@\(DESCRIPTION=\(ADDRESS=\(PROTOCOL=beq\)
\(PROGRAM=/home/oracle/product/11.1.0/db_1/bin/oracle\)
\(ARGV0=oracleaux\)\(ARGS=^'\(DESCRIPTION=\(LOCAL=YES\)
\(ADDRESS=\(PROTOCOL=beq\)\)\)^'\)\(ENVS=^'ORACLE_SID=aux^'\)\)
\(CONNECT_DATA=\(SID=aux\)\)\) as sysdba\" transport_tablespaces=
TEST1,
473474

DUPLICATING DATABASES AND TRANSPORTING DATA

TEST2 dumpfile=
dmpfile.dmp directory=
STREAMS_DIROBJ_DPDIR logfile=
explog.log';
}
sql statement: alter tablespace TEST1 read only
sql statement: alter tablespace TEST2 read only
sql statement: create or replace directory STREAMS
DIROBJ_DPDIR as "/u05/app/oracle/transportdest"
...
Removing automatic instance
shutting down automatic instance
Oracle instance shut down
Automatic instance removed
...
RMAN>
Export: Release 11.1.0.1.0 - Beta on Tuesday, 20 June, 2007 2:27:03
Copyright © 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition
Release 11.1.0.1.0- Beta
Starting "SYS"."SYS_EXPORT_TRANSPORTABLE_01": userid="/********@
(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)
(PROGRAM=/home/oracle/product/11.1.0/db_1/bin/oracle)
(ARGV0=oracleaux)(ARGS=\(DESCRIPTION=\(LOCAL=YES\)\
(ADDRESS=\(PROTOCOL=beq\)\)\))(ENVS=ORACLE_SID=aux))
(CONNECT_DATA=(SID=aux))) AS SYSDBA"
transport_tablespaces= TEST1, TEST2
dumpfile=dmpfile.dmp directory=STREAMS_DIROBJ_DPDIR logfile=explog.log
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully
loaded/unloaded******************************************************
Dump file set for SYS.SYS_EXPORT_TRANSPORTABLE_01 is:
/u05/app/oracle/transportdest/dmpfile.dmp
Job "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at 02:27:54
RMAN>

3. You now have the export file with the necessary metadata to transport the two table-
spaces, test1 and test2. You also have the datafiles for the two tablespaces you’re going
to transport.

4. Import the tablespace set into the target database. You can perform the import by
using the Data Pump Import utility from the command line, but it’s a whole lot simpler
to use the import script prepared for you by RMAN, with the default name
impscrpt.sql.

SQL> @impscrpt.sql
Directory created.CHAPTER 15 ■ DUPLICATING DATABASES AND TRANSPORTING DATA
Directory created.
PL/SQL procedure successfully completed.
Directory dropped.
Directory dropped.
SQL>

5. Use the DBA_TABLESPACES view to check that the two tablespace test1 and test2 have
been currently imported to the newdb database.

How It Works

In this recipe, we showed you how to transport tablespaces to the same operating system
platform using RMAN backups. The next recipe shows how to do this on different platforms.
You can also transport tablespaces from a “live” database using an alternative transport
tablespace technique explained in the Oracle manual. However, the big disadvantage in that
method is that the transportable tablespaces must be put in a “read-only” mode, thus affect-
ing database availability. It not only may be time-consuming to put the tablespaces into
read-only mode, but users can’t write to those tablespaces for the duration of the tablespace
transport. You don’t have any of these limitations when you use RMAN backups as the basis of
your transportable tablespace operation.
You can create transportable tablespace sets from RMAN backups. You must have a prior
backup of all the datafiles that belong to the transportable tablespace set and the archived
redo logs, so RMAN can use them to recover to the target point in time.
You may use this capability of RMAN for creating transportable tablespace sets for report-
ing purposes. Transportable tablespace sets are also highly useful during the instantiation of
streams. The one big requirement for using RMAN backups to create transportable table-
spaces is that your RMAN backups must be recoverable to the SCN at which you want the
transportable tablespaces.
RMAN creates an auxiliary database instance through which it creates the transportable
tablespace sets. RMAN does quite a few things in order to prepare the transportable table set.
Here’s a summary of the actions set off when you execute the transport tablespace
command:

1. RMAN starts an auxiliary instance in nomount mode first. You don’t have to specify a
parameter file for this auxiliary instance, since RMAN automatically creates the file.
The name of the auxiliary instance is also made up by RMAN. In our example shown
in the previous section, the ORACLE_SID of the auxiliary instance is aux (Creating
automatic instance, with SID='aux').

2. RMAN restores a backup of the target database control file and uses it to mount the
auxiliary database.

3. Using the switch operation, RMAN restores all datafiles from the target database
for the auxiliary instance. These files are restored to the location specified by the
auxiliary destination clause in the transport tablespace command.

4. RMAN also stores the files pertaining to the tablespaces in the transportable table-
space set in the location specified by the tablespace destination parameter in the
transport tablespace command.
475476

 ■ DUPLICATING DATABASES AND TRANSPORTING DATA

5. Once the datafiles from the target database are all restored to the auxiliary database
location, RMAN performs a point-in-time recovery of the auxiliary instance. In our
example, since we didn’t specify a target time, a complete database recovery is per-
formed. Note that all applicable archived redo logs are also automatically restored and
applied by RMAN during the recovery process. Once the recovery is finished, an open
resetlogs operation is performed on the auxiliary database by RMAN.

6. RMAN invokes the Data Pump Export utility (in the transportable tablespace mode)
to create the export dump file containing the tablespaces in the transportable table-
space set. By default, the export dump file is placed in the location specified by the
tablespace destination clause of the transport tablespace command.

7. RMAN also simultaneously generates a Data Pump Import script you can use to plug
in the transported tablespaces into the target database. The default script name is
impscrpt.sql, and this script is located in the directory specified by the tablespace
destination clause of the transport tablespace command.

8. RMAN shuts down the auxiliary instance and automatically deletes all the files created
and used during the transport tablespace process. The only files that remain are the
transportable set files, the Data Pump Export log, and the sample Data Pump Import
script.

In the example shown in the solution, the RMAN-created impscrpt.sql script was used to
import the tablespaces into the target database. The script utilizes a PL/SQL script to import
the tablespaces.
Alternatively, you can use the following Data Pump import command to import the table-
spaces. For example:

$ impdp sys/sammyy1
directory=exp_data_dir
dumpfile= 'dmpfile.dmp'
transport_datafiles= /u05/app/oracle/transportdest/test1_01.dbf,
/u05/app/oracle/transportdest/test2_01.dbf

■ Note You can even use non-RMAN backups to create transportable tablespace sets, as long as you
record the datafile copies and archived redo logs in the RMAN repository using the catalog command.
You can also use the transport tablespace command to perform a tablespace transport
to a past point in time. Simply add the unitl scn clause to the transport tablespace com-
mand, as shown here:
RMAN>
2>
3>4>
transport tablespace test1,test2
tablespace destination '/u05/app/oracle/transportdest'
auxiliary destination '/u05/app/oracle/auxdest'
until SCN 259386;CHAPTER 15 ■ DUPLICATING DATABASES AND TRANSPORTING DATA
The preceding command will recover the transportable tablespaces only up to the specified
SCN. Instead of the SCN, you can also specify a target point in time or a restore point as well.


 Transporting Tablespaces Across Different Operating System Platforms

Problem

You want to transport one or more tablespaces to another Oracle Database running on a dif-
ferent operating system platform using RMAN-made backups.

Solution

You can transport a tablespace to a host running on a different operating system platform
than the source database basically by using the same transport tablespace command, as
shown in recipe 15-11. The crucial thing to do here is to determine the endian formats of the
two platforms—the source and the target. If the two server platforms have the same endian
format, then the transport tablespace operation will be identical to the one described in
recipe 15-11. If the two operating systems’ endian formats differ, say one is big and the other is
little, then you have to convert the tablespaces either before or after moving the tablespace’s
datafiles to the target server platform.

To find out the endian formats of the two platforms, use the following query:

SQL> select platform_name, endian_format from
2* v$transportable_platform;
PLATFORM_NAME
---------------------------
Solaris[tm] OE (32-bit)
Solaris[tm] OE (64-bit)
Microsoft Windows IA (32-bit)
Linux IA (32-bit)
AIX-Based Systems (64-bit)
HP-UX (64-bit)
HP Tru64 UNIX
HP-UX IA (64-bit)
Linux IA (64-bit)
HP Open VMS
Microsoft Windows IA (64-bit)
IBM zSeries Based Linux
Linux 64-bit for AMD
Apple Mac OS
Microsoft Windows
64-bit for AMD
Solaris Operating Sy stem
(x86)
IBM Power Based Linux
17 rows selected.
SQL>
ENDIAN_FORMAT
----------------------------
Big
Big
Little
Little
Big
Big
Little
Big
Little
Little
Little
Big
Little
Big
Little
Little
Big
477478

 ■ DUPLICATING DATABASES AND TRANSPORTING DATA

If the endian formats of the two platforms (source and target) are different, you must con-
vert the endian format of the datafiles in the transportable tablespace set to match the endian
format of the target operating system platform. You must use the convert tablespace com-
mand if you want to convert on the source host or the convert datafile command if you want
to perform the conversion on the destination host.
In our example, we are transporting a tablespace from the HP-UX (64-bit) operating sys-
tem platform to a Linux (32-bit) platform. Since the HP-UX (64-bit)’s endian format is big and
the Linux platform’s is small, the endian formats aren’t identical, and we must convert the
datafiles belonging to the source platform before we can perform the transport tablespace
operation.

The following are the steps you must take to transport a tablespace across different plat-
forms when the endian formats of the two platforms are different:

1. Place the tablespaces you want to transport in read-only mode:

SQL> alter tablespace myspace read only;
Tablespace altered.
SQL>

2. Use the convert tablespace command to convert the source (HP-UX in this case)
datafiles in the transportable tablespace set to the target (Linux in this case) platform:


RMAN> convert tablespace myspace
2> to platform 'Linux IA (32-bit)'
3> format='/tmp/dba/%U';
Starting backup at 02-JAN-07
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile conversion
input datafile fno=00064 name=/pasu61/oradata/pasu/myspace01.dbf
converted datafile=/tmp/dba/data_D-PASU_I-877170026_TS-MYSPACE_FNO-64_02i6g1vs
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile conversion
input datafile fno=00066 name=/pasu61/oradata/pasu/myspace02.dbf
converted datafile=/tmp/dba/data_D-PASU_I-877170026_TS-MYSPACE_FNO-66_03i6g200
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03
Finished backup at 02-JAN-07
RMAN>

3. Verify that you have the two datafiles that are part of the myspace tablespace in the
/tmp/dba directory:


$ ls –altr /tmp/dba
data_D-PASU_I-877170026_TS-MYSPACE_FNO-64_02i6g1vs
data_D-PASU_I-877170026_TS-MYSPACE_FNO-66_03i6g200
Note that the two files listed here are converted to the endian format of the Linux IA
(32-bit) platform.

4. Use the Data Pump Export utility to create the export dump file with the metadata for
the myspace tablespace:

 DUPLICATING DATABASES AND TRANSPORTING DATA

$ expdp pasowner/orbiter1 directory=direct1 transport_tablespaces=myspace
Export: Release 11.1.0.1.0 - 64bit Production on Tuesday, 26 June,
2007 10:18
Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.1.0 -
64bit Beta
Starting "PASOWNER"."SYS_EXPORT_TRANSPORTABLE_01": pasowner/********
directory=direct1 transport_tablespaces=myspace dumpfile=myspace.dmp
logfile=myspace.log
Processing object type TRANSPORTABLE_EXPORT/TABLE
Master table "PASOWNER"."SYS_EXPORT_TRANSPORTABLE_01" successfully
loaded/unloaded
Dump file set for PASOWNER.SYS_EXPORT_TRANSPORTABLE_01 is:
/u01/app/oracle/dba/myspace.dmp
Job "PASOWNER"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at 10:19
$

5. Move both the converted datafiles from step 2 and the export dump file

(myspace.dmp) from step 3 to the target host, as shown here:

$ rcp data_D-PASU_I-877170026_TS-MYSPACE_FNO-64_02i6g1vs prod1:/tmp/dba
$ rcp data_D-PASU_I-877170026_TS-MYSPACE_FNO-66_03i6g200 prod1:/tmp/dba
$ rcp myspace.dmp prod1:/tmp/dba

6. Import the tablespace metadata for the transported tablespaces into the target data-
base, as shown here:


$ impdp system/sammyy1 directory=data_dump_dir2
dumpfile='myspace2.dmp'
transport_datafiles='/u05/app/oracle/data_D-PASU_I-877170026_TS-YSPACE_FNO- ➥
64_02i6g1v,
'/u05/app/oracle/ data_D-PASU_I-877170026_TS-MYSPACE_FNO-66_03i6g200'
Import: Release 11.1.0.1.0 - Beta on Tuesday, 26 June, 2007
5:10:17
Copyright © 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release
11.1.0.1.0 - Beta
With the Partitioning, OLAP and Data Mining options
ORA-31655: no data or metadata objects selected for job
Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully ➥
loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/********
directory=data_dump_dir2 dumpfile=myspace2.dmp
transport_datafiles=/u05/app/oracle/data_D-PASU_I-877170026_TS-
MYSPACE_FNO-64_02i6g1v,/u05/app/oracle/ data_D-PASU_I-877170026_TS-
MYSPACE_FNO-66_03i6g200 Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01"
successfully completed at 05:10:29
$
479480

DUPLICATING DATABASES AND TRANSPORTING DATA

Once the import completes successfully as shown here, the tablespace transport process
is complete.

How It Works

Contrary to its name, the convert command doesn’t actually convert the source database
files—it merely prepares duplicate files in the correct format for use on the target platform.
The source files remain untouched by this conversion operation.
In the example shown in this recipe, we converted the source datafiles on the source plat-
form by using the convert tablespace command. However, you can convert the datafiles that
belong to the tablespaces in the transportable tablespace set on the target system as well by
using the convert datafile command, as shown here:
RMAN> connect target /
RMAN> convert datafile=
'/u01/transport_solaris/sales/sales01.dbf',
'/u01/transport_solaris/sales/sales02.dbf'
from platform 'Solaris[tm] OE (32-bit)'
db_file_name_convert
'/u01/transport_solaris/sales','/u05/newdb/sales';
You’ll end up with the following pair of files on the target server after the datafile conversion:
/u05/newdb/sales01.dbf
/u05/newdb/sales02.dbf
You follow the same general procedure for transporting tablespaces. After the conversion,
use the Data Pump Import utility to plug the converted tablespaces into the target database.

15-13. Transporting an Entire Database to a Different Platform

Problem

You want to transport an entire Oracle database to another host that is using a different oper-
ating system platform.

Solution

Use the convert database command to move an Oracle database from one platform to
another. The only requirement is that the two platforms share an identical endian format. You
can perform the convert database operation on the source platform or the destination plat-
form. In our example here, we perform the datafile conversion process on the source database
platform. The next recipe shows you how to perform the datafile conversion on the target
database platform.
The following are the steps to transport an Oracle database from a Windows XP platform
to the Linux platform:

1. Make sure the source database is eligible for transporting to the destination operating
system platform by executing the dbms_tdb.check_db procedure, as shown here. The
source database is running on a Windows XP platform, and the target database is run-
ning on a Linux 32-bit platform.


SQL> connect sys/sammyy1 as sysdba
Connected.
SQL> set serveroutput on
SQL> declare
2> db_ready boolean;
3> begin
4> db_ready := dbms_tdb.check_db('Linux IA(32-bit)',
dbms_tdb.skip_readonly);
5* end;
SQL> /
PL/SQL procedure successfully completed.
SQL>
If you see the message “PL/SQL procedure successfully completed,” as is the case in
this example, it means you can migrate from the specified operating system platform
to the destination platform.

2. Since external tables aren’t automatically transported to the target platform, you must
invoke the dbms_tdb.check_db procedure again to get a list of the external tables,
which you can then use to re-create those tables on the destination platform after the
database transportation.


SQL> declare
2> external boolean;
3> begin
4> external :=dbms_tdb.check_external;
5* end;
SQL> /
PL/SQL procedure successfully completed.
SQL>
Again, the output of the execution of the dbms_tdb package shows you don’t have any
external tables in the parent database that you’ll have to worry about.

3. Put the target database in the read-only mode after shutting it down first and restarting
it in mount state:


SQL> connect sys/sammyy1 as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup mount;
ORACLE instance started.
Total System Global Area 612368384
Fixed Size
1250452
Variable Size
180357996
Database Buffers
427819008
bytes
bytes
bytes
bytes
481482
Redo Buffers
2940928 bytes
Database mounted.
SQL> alter database open read only;
Database altered.
SQL>

4. Execute the convert database command, which creates a transport script you’ll subse-
quently use in the transportation process:


RMAN> convert database new database 'mydb'
2> transport script 'c:\temp\mydb_script'
3> to platform 'Linux IA (32-bit)'
4> db_file_name_convert 'c:\oracle\product\11.1.0\oradata\nick\'
'c:\temp\';
Starting convert at 15-FEB-07
using channel ORA_DISK_1
External table SH.SALES_TRANSACTIONS_EXT found in the database
Directory SYS.SUBDIR found in the database
Directory SYS.XMLDIR found in the database
Directory SYS.MEDIA_DIR found in the database
Directory SYS.LOG_FILE_DIR found in the database
Directory SYS.DATA_FILE_DIR found in the database
Directory SYS.WORK_DIR found in the database
Directory SYS.ADMIN_DIR found in the database
Directory SYS.DATA_PUMP_DIR found in the database
BFILE PM.PRINT_MEDIA found in the database
User SYS with SYSDBA and SYSOPER privilege found in password file
channel ORA_DISK_1: starting datafile conversion
input datafile fno=00001
name=C:\ORACLE\PRODUCT\11.1.0\ORADATA\NICK\SYSTEM01.DBF
converted datafile=C:\TEMP\SYSTEM01.DBF
channel ORA_DISK_1: datafile conversion complete, elapsed time:
00:00:35
...
Edit init.ora file
C:\ORACLE\PRODUCT\11.1.0\DB_1\DATABASE\INIT_00IA4IO1_1_0.ORA.
This PFILE will be used to create the database on the target platform
To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on the target ➥
platform
To change the internal database identifier, use DBNEWID Utility
Finished backup at 15-FEB-07
RMAN>
Once the source database files are converted, you must move them to the target plat-
form and place them in the location specified for the datafiles in the pfile of the target
database. You must also copy the mydb_script file and the pfile for the new database to
the target platform.CHAPTER 15 ■ DUPLICATING DATABASES AND TRANSPORTING DATA
5. On the target platform, first set the ORACLE_SID environment variable pointing to the
new database:
$ export ORACLE_SID=newdb
The ORACLE_HOME environment variable must point to the same version of Oracle
software as on the source platform.
Execute the mydb_script file after logging in to SQL*Plus as the user sys:
$ sqlplus /nolog
SQL> connect sys/sammyy1 as sysdgba
Connected to an idle instance.
SQL> @mydb
ORACLE instance started.
Total System Global Area 243269632
Fixed Size
1218748
Variable Size
79693636
Database Buffers
159383552
Redo Buffers
2973696
...
Control file created.
Database altered.
Tablespace altered.

bytes
bytes
bytes
bytes
bytes
Your database has been created successfully!
There are many things to think about for the new database. Here
is a checklist to help you stay on track:
1 You may want to redefine the location of the directory objects.
2.You may want to change the internal database identifier (DBID)
or the global database name for this database. Use the
NEWDBID Utility (nid).
Database closed.
Database dismounted.
ORACLE instance shut down.
ORACLE instance started.
Total System Global Area 243269632 bytes
Fixed Size
1218748 bytes
Variable Size
79693636 bytes
Database Buffers
159383552 bytes
Redo Buffers
2973696 bytes
Database mounted.
Database opened.
SQL>
SQL> Rem invalidate all pl/sql modules and recompile standard and ➥
dbms_standard
SQL> @/u01/app/oracle/product/11.1.0/db_3/rdbms/admin/utlrp.sql
DOC>
utlirp.sql completed successfully. All PL/SQL objects in the

DOC>
database have been invalidated.
DOC>
Shut down and restart the database in normal mode and run utlrp.sql to
DOC>
recompile invalid objects.
SQL> SHUTDOWN IMMEDIATE
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP
ORACLE instance started.
...
Database mounted.
Database opened.
SQL> -- The following step will recompile all PL/SQL modules.
SQL> -- It may take several hours to complete.
SQL> @/home/oracle/product/11.1.0/db_3/rdbms/admin/utlrp.sql
When the utlrp.sql script completes, your database transport is complete. You now
have a functioning copy of the target database on the new platform.
6. Check to make sure there are no invalidated objects left in the database:
SQL> select count(*) from dba_objects where
status='INVALID';
no rows selected
SQL>
Sometimes, several invalid objects are in the database after the utlrp.sql script finishes
executing. To recompile the leftover invalid objects, you can run the utlrp.sql script multiple
times.

How It Works

It’s important to understand that although you can use the RMAN backups from the source
database as the basis for the target database, you must still create the new instance first. As
part of the database transport, you have to move all the datafiles belonging to the permanent
tablespaces, as well as the initialization parameter file (pfile), from the source platform to the
destination platform.
If you’re using a pfile for your source database, the conversion process will migrate the
pfile to the new database. If you’re using an spfile instead, Oracle will first create a pfile from
this spfile and then use the pfile as the basis for creating a new spfile for the transported data-
base (destination database).
The transportation process won’t transport the following items:

• Redo logs and control files.
• Bfiles.
• Temp files
. You must create a new temporary tablespace on the target platform after the
transport is done.

• External tables and directories. You must redefine these on the target platform.
• Password files. Using the information provided in the output of the convert database
command, you must create a new password file on the destination database.
Running utlrp.sql as part of the transportation script (mydb_script in our example)
recompiles all the invalidated objects in the database. Even if you don’t recompile the objects
with this script, it is OK, since Oracle dynamically recompiles any invalidated object when you
try to access it. The utlrp.sql script is invoked really to reduce latencies caused by on-the-fly
recompilation of objects. Once the new database is created, it’ll automatically be registered by
the currently running Oracle listener process.

 Transporting a Database by Converting Datafiles on the Target Platform

Problem

You want to perform a database transport but perform the datafile conversion on the target
database platform instead of the source database platform.

Solution

Performing a database transport by performing the file conversion on the target platform is
similar in many ways to the database transport shown in recipe 15-14, where we performed
the datafile conversion on the target platform. Here are the steps:

1. Make sure the source database is eligible for transporting to the destination operating
system platform by executing the dbms_tdb.check_db procedure, as shown here. The
source database is running on a Windows XP platform, and the target database is run-
ning on a Linux 32-bit platform.


SQL> connect sys/sammyy1 as sysdba
Connected.
SQL> set serveroutput on
SQL> declare
2> db_ready boolean;
3> begin
4> db_ready := dbms_tdb.check_db('Linux IA(32-bit)',
5> dbms_tdb.skip_readonly);
6* end;
SQL> /
PL/SQL procedure successfully completed.
SQL>
If you see the message “PL/SQL procedure successfully completed,” as is the case in
this example, it means you can migrate from the specified operating system platform
to the destination platform.

2. Since external tables aren’t automatically transported to the target platform, you must
invoke the dbms_tdb.check_external procedure again to get a list of the external tables
that you can then use to re-create those tables on the destination platform after the
database transportation.


SQL> declare
2> external boolean;
3> begin
4> external :=dbms_tdb.check_external;
5> end;
6> /
PL/SQL procedure successfully completed.
SQL>
Again, the output of the execution of the dbms_tdb package shows that you don’t have
any external tables in the parent database you’ll have to worry about.

3. Put the target database in read-only mode after shutting it down first and restarting it
in the mount state:


SQL> connect sys/sammyy1 as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup mount;
ORACLE instance started.
Total System Global Area 612368384
Fixed Size
1250452
Variable Size
180357996
Database Buffers
427819008
Redo Buffers
2940928
Database mounted.
SQL> alter database open read only;
Database altered.
SQL>
bytes
bytes
bytes
bytes
bytes
4. Execute the convert database command on the source database platform with the on
target platform clause, as shown here:
RMAN>
2>
3>
4>
5>
6>
convert database on target platform
convert script 'c:\temp\convert\convertscript.rman'
transport script 'c:\temp\convert\transportscript.sql'
new database 'youdb'
format 'c:\temp\convert\%U'
;
Starting convert at 21-FEB-07
using channel ORA_DISK_1
External table SH.SALES_TRANSACTIONS_EXT found in the database
Directory SYS.SUBDIR found in the database
Directory SYS.XMLDIR found in the database
Directory SYS.MEDIA_DIR found in the database
Directory SYS.LOG_FILE_DIR found in the database
Directory SYS.DATA_FILE_DIR found in the database
Directory SYS.WORK_DIR found in the database
Directory SYS.ADMIN_DIR found in the database
Directory SYS.DATA_PUMP_DIR found in the database
BFILE PM.PRINT_MEDIA found in the database
User SYS with SYSDBA and SYSOPER privilege found in password file
channel ORA_DISK_1: starting to check datafiles input datafile fno=00001
name=C:\ORACLE\PRODUCT\11.1.0\ORADATA\NICK\SYSTEM01.DBF
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
...
Run SQL script C:\TEMP\CONVERT\TRANSPORTSCRIPT.SQL on the target
platform to create database
Edit init.ora file C:\TEMP\CONVERT\INIT_00IAKAV1_1_0.ORA. This PFILE
will be used to create the database on the target platform
Run RMAN script C:\TEMP\CONVERT\CONVERTSCRIPT.RMAN on target platform
to convert datafiles
To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on the
target platform

To change the internal database identifier, use DBNEWID Utility

Finished backup at 21-FEB-07
RMAN>
The convert database command shown here creates three files to help in the database
transport:
A pfile to create the new database on the target platform, with identical parameters
as the source database.
• A SQL script named transportscript.sql with SQL*Plus commands to create the
new database. This script will first create the new instance using the pfile created
here.
• A datafile conversion script named convertscript.rman to help convert the source
datafiles on the target platform so they can be used by the new database you’re
going to create on that platform.
It’s important to understand that although you use a convert database command here,
no actual conversion of the datafiles takes place. That step will come after you trans-
port the original datafiles to the target platform.

5. Copy the datafiles of the source database while that database is still in the read-only
mode and move them to the target database platform.


6. Run the convertscript.rman script on the target database after first transporting all the
source database files to the target platform. Once you copy the necessary files, you can
put the source database in a read-write mode again.


7. You use a separate convert datafile command for each datafile you need to convert
from the source to the target platform. The format parameter of the convert datafile
command specifies the location of each file on the target platform.


$ rman target / cmdfile=CONVERTSCRIPT.RMAN
Recovery Manager: Release 11.1.0.1.0 - Beta on Thu Feb 22 11:13:09 2007
Copyright © 1982, 2005, Oracle. All rights reserved.
connected to target database: MYDB (DBID=2561840016)
RMAN> run
2>
{
3>
convert datafile '/u01/app/oracle/youdb/temp/SYSTEM01.DBF'
4>
from platform 'Microsoft Windows IA (32-bit)'
5>
format '/u01/app/oracle/youdb/SYSTEM01.DBF';
6>
7>
convert datafile '/u01/app/oracle/youdb/temp/SYSAUX01.DBF'
8>
from platform 'Microsoft Windows IA (32-bit)'
9>
format '/u01/app/oracle/youdb/SYSAUX01.DBF';
10>
11>
convert datafile '/u01/app/oracle/youdb/temp/EXAMPLE01.DBF'
12>
from platform 'Microsoft Windows IA (32-bit)'
13>
format '/u01/app/oracle/youdb/EXAMPLE01.DBF';
14>
15>
convert datafile '/u01/app/oracle/youdb/temp/UNDOTBS01.DBF'
16>
from platform 'Microsoft Windows IA (32-bit)'
17>
format '/u01/app/oracle/youdb/UNDOTBS01.DBF';
18>
19>
convert datafile '/u01/app/oracle/youdb/temp/USERS01.DBF'
20>
from platform 'Microsoft Windows IA (32-bit)'
21>
format '/u01/app/oracle/youdb/USERS01.DBF';
22>
}
Starting backup at 22-FEB-07
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=150 devtype=DISK
channel ORA_DISK_1: starting datafile conversion
input filename=/u01/app/oracle/youdb/temp/SYSTEM01.DBF
converted datafile=/u01/app/oracle/youdb/SYSTEM01.DBF
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:36
Finished backup at 22-FEB-07
Starting backup at 22-FEB-07
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile conversion
input filename=/u01/app/oracle/youdb/temp/SYSAUX01.DBFCHAPTER 15 ■ DUPLICATING DATABASES AND TRANSPORTING DATA
converted datafile=/u01/app/oracle/youdb/SYSAUX01.DBF
channel ORA_DISK_1: datafile conversion complete, elapsed
Finished backup at 22-FEB-07
Starting backup at 22-FEB-07
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile conversion
input filename=/u01/app/oracle/youdb/temp/EXAMPLE01.DBF
converted datafile=/u01/app/oracle/youdb/EXAMPLE01.DBF
channel ORA_DISK_1: datafile conversion complete, elapsed
Finished backup at 22-FEB-07
Starting backup at 22-FEB-07
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile conversion
input filename=/u01/app/oracle/youdb/temp/UNDOTBS01.DBF
converted datafile=/u01/app/oracle/youdb/UNDOTBS01.DBF
channel ORA_DISK_1: datafile conversion complete, elapsed
Finished backup at 22-FEB-07
Starting backup at 22-FEB-07
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile conversion
input filename=/u01/app/oracle/youdb/temp/USERS01.DBF
converted datafile=/u01/app/oracle/youdb/USERS01.DBF
channel ORA_DISK_1: datafile conversion complete, elapsed
Finished backup at 22-FEB-07
RMAN>
time: 00:00:26
time: 00:00:16
time: 00:00:04
time: 00:00:02
When the convertscript.rman script finishes executing, all your source database files
are converted into the target database format and are ready for use by the new
instance you’re going to create in the next step.
8. Make the necessary changes in the pfile and the transportscript.sql script produced
by the convert database script. Execute the transportscript.sql script from SQL*Plus
to produce a new database instance, and create the new database (named youdb in
the example):
$ sqlplus /nolog
SQL> @transportscript
The transportscript.sql script invokes the pfile to start a new instance and create the
control files to open the new database youdb. The script also invokes the utlrp.sql script to
recompile all the invalidated objects. When the script finishes executing, you’ll have your new
database on the target platform.

How It Works

If you are copying a database from the source platform to several different operating system
platforms, you must convert the source database datafiles on each of the target platforms. If
you’re copying a production database to multiple test platforms, converting the datafiles of
the parent database on each of the target platforms also eliminates the performance overhead
on the production system.
Once you finish executing the convert script, the database is ready for use, and the Oracle
listener process will automatically register your new instances and will accept connection
requests. You must transport the unconverted, original source data files to the target platform.
These datafiles are still in the format of the original platform and hence aren’t suitable for use
in the target platform unless they are converted to the target operating system format. The
convert script (convertscript.rman) contains the actual convert datafile commands for con-
verting each of the datafiles you transport to the target platform.