Oracle® Database Backup and Recovery User's Guide 11g Release 1 (11.1) Part Number B28270-01 |
|
|
View PDF |
The preceding chapters in Part V, "Diagnosing and Responding to Failures" cover the most basic recovery scenarios and are intended to be as generic as possible. The scenarios in this chapter are advanced in the sense that they are not as common or are more complicated than the basic scenarios.
This chapter contains the following topics:
Restore of a database running in NOARCHIVELOG
mode is similar to restore of a database in ARCHIVELOG
mode. The main differences are:
Only consistent backups can be used in restoring a database in NOARCHIVELOG
mode.
Media recovery is not possible because no archived redo logs exist.
You can perform limited recovery of changes to a database running in NOARCHIVELOG
mode by applying incremental backups. The incremental backups must be consistent, like all backups of a database run in NOARCHIVELOG
mode, so you cannot make backups of the database when it is open.
When recovering a NOARCHIVELOG
database, specify the NOREDO
option on the RECOVER
command to indicate that RMAN should not attempt to apply archived redo logs. Otherwise, RMAN returns an error.
To recover a NOARCHIVELOG
database with incremental backups:
After connecting to trgt
and the catalog database, place the database in a mounted state:
STARTUP FORCE MOUNT
Restore and recover the database.
For example, you can perform incomplete recovery with the following commands:
RESTORE DATABASE FROM TAG "consistent_whole_backup"; RECOVER DATABASE NOREDO;
Open the database with the RESETLOGS
option.
For example, enter the following command:
ALTER DATABASE OPEN RESETLOGS;
If you lose the server parameter file, then RMAN can restore it to its default location or to a location of your choice. Unlike the loss of the control file, the loss of the server parameter file does not cause the instance to immediately stop. The instance may continue operating, although you will have to shut it down and restart it after restoring the server parameter file.
Note the following considerations when restoring the server parameter file:
If the instance is already started with the server parameter file, then you cannot overwrite the existing server parameter file.
When the instance is started with a client-side initialization parameter file, RMAN restores the server parameter file to the default location if the TO
clause is not used. The default location is platform-specific, for example, ?
/dbs/spfile.ora
on Linux.
A recovery catalog simplifies the recovery procedure because you can avoid the step of having to record and remember the DBID. This procedure assumes that you are not using a recovery catalog.
To restore the server parameter file from autobackup:
If the database is up at the time of the loss of the server parameter file, then connect to the target database. For example, enter the following command:
% rman
RMAN> CONNECT TARGET SYS/password@trgt
If the database is not up when the server parameter file is lost, and if you are not using a recovery catalog, then you must set the DBID of the target database. See "Determining the DBID of the Database" for details on determining your DBID.
Shut down the instance and restart it without mounting.
When the server parameter file is not available, RMAN starts the instance with a dummy parameter file. For example, enter the following command:
STARTUP FORCE NOMOUNT;
Execute a RUN
command to restore the server parameter file.
Depending on the situation, you may need to execute multiple commands in the RUN
command. Note the following considerations:
If restoring from tape, then use ALLOCATE CHANNEL
to allocate an SBT channel manually. If restoring from disk, then RMAN uses the default disk channel.
If the autobackups were not produced with the default format (%F
), then use the SET CONTROLFILE AUTOBACKUP FOR DEVICE TYPE
command to specify the format in effect when the autobackup was performed.
If the most recent autobackup was not created today, then use SET UNTIL
to specify the date from which to start the search.
If RMAN is not connected to a recovery catalog, then you need to use SET DBID
to set the DBID for the target database.
If you want to restore the server parameter file to a nondefault location, then specify the TO
clause or TO PFILE
clause on the RESTORE SPFILE
command.
If you know that RMAN never produces more than n autobackups each day, then you can set the RESTORE SPFILE FROM AUTOBACKUP ... MAXSEQ
parameter to n to speed up the search on tape. To terminate the restore operation if you do not find the autobackup in the current day (or specified day), then you can set MAXDAYS 1
on the RESTORE
command.
The following example illustrates a RUN
command that restores a server parameter file from an autobackup on tape:
RUN { ALLOCATE CHANNEL c1 DEVICE TYPE sbt PARMS ...; SET UNTIL TIME 'SYSDATE-7'; SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE sbt TO '/disk1/control_files/autobackup_%F'; SET DBID 123456789; RESTORE SPFILE TO '/tmp/spfileTEMP.ora' FROM AUTOBACKUP MAXDAYS 10; }
Restart the instance with the restored file.
If restarting with a server parameter file in a nondefault location, then create a new initialization parameter file with the line SPFILE=
new_location
, where new_location
is the path name of the restored server parameter file. Then, restart the instance with the client-side initialization parameter file.
For example, create a file /tmp/init.ora
which contains the single line:
SPFILE=/tmp/spfileTEMP.ora
You can use the following RMAN command to restart the instance with the restored server parameter file:
STARTUP FORCE PFILE=/tmp/init.ora;
If you have configured control file autobackups, then the server parameter file is backed up with the control file whenever an autobackup is taken.
To restore the server parameter file from the control file autobackup, you must first set the DBID for your database and then use the RESTORE SPFILE FROM AUTOBACKUP
command. If the autobackup is in a nondefault format, then first use the SET CONTROLFILE AUTOBACKUP FORMAT
command to specify the format.
Example 19-1 sets the DBID and restores the server parameter file from a control file autobackup in a nondefault location.
Example 19-1 Restoring the Server Parameter File from a Control File Autobackup
SET DBID 320066378;
RUN
{
SET CONTROLFILE AUTOBACKUP FORMAT
FOR DEVICE TYPE DISK TO 'autobackup_format';
RESTORE SPFILE FROM AUTOBACKUP;
}
RMAN uses the autobackup format and DBID to hunt for control file autobackups. If a control file autobackup is found, then RMAN restores the server parameter file from that backup to its default location.
To learn how to determine the correct value for autobackup_format
, see the description of CONFIGURE CONTROLFILE AUTOBACKUP FORMAT
in the entry for CONFIGURE
in Oracle Database Backup and Recovery Reference.
See Also:
"Determining the DBID of the Database" for details on how to determine your DBIDYou can also restore the server parameter file as a client-side initialization parameter file with the TO
PFILE
'filename'
clause. The filename you specify should be on a file system accessible from the host where the RMAN client is running. This file need not be accessible directly from the host running the instance.
The following RMAN command creates an initialization parameter file named /tmp/initTEMP.ora
on the system running the RMAN client:
RESTORE SPFILE TO PFILE '/tmp/initTEMP.ora';
To restart the instance with the initialization parameter file, use the following command, again running RMAN on the same client host:
STARTUP FORCE PFILE='/tmp/initTEMP.ora';
This section explains what to do when all current control files are lost and you must restore a control file backup.
If all copies of the current control file are lost or damaged, then you must restore and mount a backup control file. You must then run the RECOVER
command, even if no datafiles have been restored, and open the database with the RESETLOGS
option. If some copies of the current control file are usable, however, then you can follow the procedure in "Responding to the Loss of a Subset of the Current Control Files" and avoid the recovery and RESETLOGS
.
During recovery, RMAN automatically searches for online and archived logs that are not recorded in the RMAN repository and catalogs any that it finds. RMAN attempts to find a valid archived redo log in any current archiving destination with the current log format. The current format is specified in the initialization parameter file used to start the instance (or all instances in an Oracle RAC configuration). Similarly, RMAN attempts to find the online redo logs by using the filenames listed in the control file.
If you changed the archiving destination or format during recovery, or if you added new online log members after the backup of the control file, then RMAN may not be able to automatically catalog a needed online or archived log. Whenever RMAN cannot find online redo logs and you did not specify an UNTIL
time, RMAN reports errors similar to the following:
RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 08/29/2007 14:23:09 RMAN-06054: media recovery requesting unknown log: thread 1 scn 86945
In this case, you must use the CATALOG
command to manually add the required redo logs to the repository so that recovery can proceed.
See Also:
The discussion ofRESTORE CONTROLFILE
in Oracle Database Backup and Recovery Reference For more details on restrictions on using RESTORE CONTROLFILE
in different scenarios (such as when using a recovery catalog, or restoring from a specific backup)When restoring the control file, the default destination is all of the locations defined in the CONTROL_FILES
initialization parameter. If you do not set the CONTROL_FILES
initialization parameter, then the database uses the same rules to determine the destination for the restored control file that it uses when creating a control file if the CONTROL_FILES
parameter is not set. These rules are described in Oracle Database SQL Language Reference in the description of the CREATE CONTROLFILE
statement.
One way to restore the control file to one or more new locations is to change the CONTROL_FILES
initialization parameter, and then use the RESTORE CONTROLFILE
command with no arguments to restore the control file to the default locations. For example, if you are restoring your control file after a disk failure made some but not all CONTROL_FILES
locations unusable, you can change CONTROL_FILES
to replace references to the failed disk with path names pointing to another disk, and then run RESTORE CONTROLFILE
with no arguments.
You can also restore the control file to any location you choose other than the CONTROL_FILES
locations, by using the form RESTORE CONTROLFILE TO '
filename' [FROM AUTOBACKUP]
:
RESTORE CONTROLFILE TO '/tmp/my_controlfile';
You can perform this operation with the database in NOMOUNT
, MOUNT
or OPEN
states, because you are not overwriting any of the control files currently in use. Any existing file named '
filename
'
is overwritten. After restoring the control file to a new location, you can then update the CONTROL_FILES
initialization parameter to include the new location.
When RMAN is connected to a recovery catalog, the recovery procedure with a backup control file is identical to recovery with a current control file. The RMAN metadata missing from the backup control file is available from the recovery catalog. The only exception is if the database name is not unique in the catalog, in which case you must use SET DBID
command before restoring the control file.
If you are not using a recovery catalog, then you must restore your control file from an autobackup. To restore the control file from autobackup, the database must be in a NOMOUNT
state. As shown in Example 19-2, you must first set the DBID for your database, and then use the RESTORE CONTROLFILE FROM AUTOBACKUP
command.
Example 19-2 Setting the DBID and Restoring the Control File from Autobackup
SET DBID 320066378;
RUN
{
SET CONTROLFILE AUTOBACKUP FORMAT
FOR DEVICE TYPE DISK TO 'autobackup_format';
RESTORE CONTROLFILE FROM AUTOBACKUP;
}
RMAN uses the autobackup format and DBID to determine where to hunt for the control file autobackup. If one is found, RMAN restores the control file to all control file locations listed in the CONTROL_FILES
initialization parameter.
See Also:
The description ofCONFIGURE CONTROLFILE AUTOBACKUP FORMAT
in the entry for CONFIGURE
in Oracle Database Backup and Recovery Reference to learn how to determine the correct value for the autobackup format. See "Determining the DBID of the Database" to learn how to determine your DBID.The commands for restoring a control file are the same whether or not the database uses a flash recovery area. If the database uses a recovery area, then RMAN updates a control file restored from backup by crosschecking all disk-based backups and image copies recorded in the control file. RMAN catalogs any backups in the recovery area that are not recorded. As a result, the restored control file has a complete and accurate record of all backups in the recovery area and any other backups known to the control file at the time of the backup.
RMAN does not automatically crosscheck tape backups after restoring a control file. If you are using tape backups, then you can restore and mount the control file, and optionally crosscheck the backups on tape, as shown in the following example:
CROSSCHECK BACKUP DEVICE TYPE sbt;
This section assumes that you have RMAN backups of the control file, but do not use a recovery catalog. It also assumes that you enabled the control file autobackup feature for the target database and can restore an autobackup of the control file.
Because the autobackup uses a well-known format, RMAN can restore it even though it does not have a repository available that lists the available backups. You can restore the autobackup to the default or a new location. RMAN replicates the control file to all CONTROL_FILES
locations automatically.
Note:
If you know the backup piece name (for example, from the media manager or because the piece is on disk), then you can specify the piece name using theRESTORE
CONTROLFILE
FROM
'filename'
command. The database records the location of every autobackup in the alert log.Because you are not connected to a recovery catalog, the RMAN repository contains only information about available backups at the time of the control file backup. If you know the location of other usable backup sets or image copies, then add them to the control file RMAN repository with the CATALOG
command.
To recover the database with a control file autobackup in NOCATALOG
mode:
Start an RMAN session on the target database and then start the target instance without mounting the database. For example:
% rman
RMAN> CONNECT TARGET SYS/password@trgt
RMAN> STARTUP NOMOUNT;
Set the database identifier for the target database with SET
DBID
.
RMAN displays the DBID whenever you connect to the target. You can also obtain it by inspecting saved RMAN log files, querying the catalog, or looking at the filenames of control file autobackup. For example, run:
SET DBID 676549873;
Write an RMAN command file to restore the autobackup control file and perform recovery.
The command file should contain the following steps:
Optionally, specify the most recent backup time stamp that RMAN can use when searching for a control file autobackup to restore.
If you know that a different control file autobackup format was in effect when the control file autobackup was created, then specify a nondefault format for the restore of the control file.
If an SBT channel created the control file autobackup, then allocate one or more SBT channels. Because no recovery catalog is available, you cannot use preconfigured channels.
Restore the autobackup of the control file, optionally setting the maximum number of days backward that RMAN can search and the initial sequence number that it should use in its search for the first day.
If you know that the control file contained information about configured channels that will be useful to you in the rest of the restore process, then you can exit RMAN to clear manually allocated channels from step c.
If you restart the RMAN client and mount the database, then these configured channels are available for your use. If you do not care about using configured channels from your control file, then you can simply mount the database.
This step depends on whether the online redo logs are available. Note that OPEN RESETLOGS
is always required after recovery with a backup control file, regardless of whether logs are available.
If the online redo logs are usable, then RMAN can find and apply these logs. Perform a complete restore and recovery as described in "Performing Complete Database Recovery".
If the online redo logs are unusable, then perform DBPITR as described in "Performing Database Point-in-Time Recovery". An UNTIL
clause is required to specify a target time, SCN or log sequence number for the recovery prior to the first SCN of the online redo logs (otherwise, RMAN issues the RMAN-6054
error).
Note:
When specifying log sequences, if the last created archived redo log has sequence n, then specifyUNTIL
SEQUENCE
n
+1
so that RMAN will apply n and then stop.In Example 19-3, the online redo logs have been lost, and the most recent archived log sequence number is 13243. This example shows how to restore the control file autobackup and recover through the latest log.
Example 19-3 Control File Recovery Script
RUN { # Optionally, set upper limit for eligible time stamps of control file # backups # SET UNTIL TIME '09/10/2007 13:45:00'; # Specify a nondefault autobackup format only if required # SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK # TO '?/oradata/%F.bck'; ALLOCATE CHANNEL c1 DEVICE TYPE sbt PARMS '...'; # allocate manually RESTORE CONTROLFILE FROM AUTOBACKUP MAXSEQ 100 # start at sequence 100 and count down MAXDAYS 180; # start at UNTIL TIME and search back 6 months ALTER DATABASE MOUNT DATABASE; } # Now use automatic channels configured in restored control file RESTORE DATABASE UNTIL SEQUENCE 13244; RECOVER DATABASE UNTIL SEQUENCE 13244;
If recovery was successful, then open the database and reset the online logs:
ALTER DATABASE OPEN RESETLOGS;
Disaster recovery includes the restore of and recovery of the target database after the loss of the entire target database, the recovery catalog database, all current control files, all online redo log files, and all parameter files.
To perform a disaster recovery, you must have the following:
Backups of all datafiles
All archived redo logs generated after the creation time of the oldest backup that you intend to restore
At least one control file autobackup
A record of the DBID of the database
The procedure for disaster recovery is similar to the procedure for recovering the database with a backup control file in NOCATALOG
mode. If you are restoring the database to a new host, then you should also review the considerations described in "Restoring a Database on a New Host".
This scenario assumes that the Linux server on which your database was running has been damaged beyond repair. Fortunately, you backed up the database to Oracle Secure Backup and have the tapes available. The scenario assumes the following:
Oracle Database is already installed on the new host.
You are restoring the database to a new Linux host with the same directory structure as the old host.
You have one tape drive containing backups of all the datafiles and archived redo logs through log 1124, as well as autobackups of the control file and server parameter file.
You do not use a recovery catalog with the database.
To recover the database on the new host:
If possible, restore or re-create all relevant network files such as tnsnames.ora
and listener.ora
and a password file.
Start RMAN and connect to the target instance.
At this stage, no initialization parameter file exists. If you have set ORACLE_SID
and ORACLE_HOME
, then you can use operating system authentication to connect as SYSDBA
. For example, start RMAN as follows:
% rman
RMAN> CONNECT SYS/password
Specify the DBID for the target database with the SET
DBID
command, as described in "Restoring the Server Parameter File".
For example, enter the following command:
SET DBID 676549873;
Run the STARTUP
NOMOUNT
command.
When the server parameter file is not available, RMAN attempts to start the instance with a dummy server parameter file.
Allocate a channel to the media manager and then restore the server parameter file from autobackup.
For example, enter the following command to restore the server parameter file from Oracle Secure Backup:
RUN { ALLOCATE CHANNEL c1 DEVICE TYPE sbt; RESTORE SPFILE FROM AUTOBACKUP; }
Restart the instance with the restored server parameter file.
STARTUP FORCE NOMOUNT;
Write the a command file to perform the restore and recovery, and then execute the command file. The command file should do the following:
Allocate a channel to the media manager.
Restore a control file autobackup (see "Performing Recovery with a Backup Control File and No Recovery Catalog").
Mount the restored control file.
Catalog any backups not recorded in the repository with the CATALOG
command.
Restore the datafiles to their original locations. If volume names have changed, then run SET
NEWNAME
commands before the restore and perform a switch after the restore to update the control file with the new locations for the datafiles (refer to"Performing Disaster Recovery").
Recover the datafiles. RMAN stops recovery when it reaches the log sequence number specified.
RMAN> RUN { # Manually allocate a channel to the media manager ALLOCATE CHANNEL t1 DEVICE TYPE sbt; # Restore autobackup of the control file. This example assumes that you have # accepted the default format for the autobackup name. RESTORE CONTROLFILE FROM AUTOBACKUP; # The set until command is used in case the database # structure has changed in the most recent backups, and you wish to # recover to that point-in-time. In this way RMAN restores the database # to the same structure that the database had at the specified time. ALTER DATABASE MOUNT; SET UNTIL SEQUENCE 1124 THREAD 1; RESTORE DATABASE; RECOVER DATABASE; }
The following example of the RUN
command shows the same scenario except with new filenames for the restored datafiles:
RMAN> RUN { # If you need to restore the files to new locations, # use SET NEWNAME commands: SET NEWNAME FOR DATAFILE 1 TO '/dev/vgd_1_0/rlvt5_500M_1'; SET NEWNAME FOR DATAFILE 2 TO '/dev/vgd_1_0/rlvt5_500M_2'; SET NEWNAME FOR DATAFILE 3 TO '/dev/vgd_1_0/rlvt5_500M_3'; ALLOCATE CHANNEL t1 DEVICE TYPE sbt; RESTORE CONTROLFILE FROM AUTOBACKUP; ALTER DATABASE MOUNT; SET UNTIL SEQUENCE 124 THREAD 1; RESTORE DATABASE; SWITCH DATAFILE ALL; # Update control file with new location of datafiles. RECOVER DATABASE; }
If recovery was successful, then open the database and reset the online logs:
ALTER DATABASE OPEN RESETLOGS;
If your goal is to perform a test run of your disaster recovery procedures, or to permanently move a database to a new host, then you can use the procedure in this section. This procedure uses the RESTORE
and RECOVER
commands.
If you use the procedure in this section, then the DBID for the restored database will be the same as the DBID for the original database. You should not register a test database created in this way in the same recovery catalog as the source database. Because the DBID of the two databases is the same, the metadata for the test database can interfere with RMAN's ability to restore and recover the source database.
If your goal is to create a new copy of your target database for ongoing use on a new host, then use the RMAN DUPLICATE
command instead of this procedure. The DUPLICATE
command assigns a new DBID to the database it creates, enabling it to be registered in the same recovery catalog as the original database.
See Also:
"Overview of RMAN Database Duplication" to learn how to duplicate a databaseTo prepare for the restore of the database to a new host, take the following steps:
Record the DBID for your source database. If you do not know the DBID for your database, then see "Determining the DBID of the Database" to learn how to determine the DBID.
Make the source database initialization parameter file accessible on the new host. Copy the file from the old host to a new host by using an operating system utility.
If you perform a test restore only, then make sure that RMAN is not connected to the recovery catalog. Otherwise, RMAN records metadata about the restored datafiles in the recovery catalog. This metadata interferes with future attempts to restore and recover the primary database.
If you must use a recovery catalog because the control file is not large enough to contain the RMAN repository data on all of the backups that you need to restore, then use Oracle Data Pump to export the catalog and import it into a different schema or database. Afterward, use the copied recovery catalog for the test restore. Otherwise, the recovery catalog considers the restored database as the current target database.
Make sure backups used for the restore are accessible on the restore host. For example, if the backups were made with a media manager, then make sure the tape device is connected to the new host. If you are using disk copies, then use the procedure in the following section.
If you are performing a trial restore of the production database, then perform either of the following actions before restoring the database in the test environment:
If the test database will use a flash recovery area that is physically different from the recovery area used by the production database, then set DB_RECOVERY_FILE_DEST
in the test database instance to the new location.
If the test database will use a flash recovery area that is physically the same as the recovery area used by the production database, then set DB_UNIQUE_NAME
in the test database instance to a different name from the production database.
If you do not perform either of the preceding actions, then RMAN assumes that you are restoring the production database and deletes flashback logs from flash recovery area because they are considered unusable.
To move the database to a new host by means of datafile copies or backup sets on disk, you must transfer the files manually to the new host. This example assumes that RMAN is using a recovery catalog.
To restore backup files to a new host:
After connecting to the target database and recovery catalog, run a LIST
command to see a listing of backups of the datafile and control file autobackups:
For example, enter the following command to view datafile copies:
LIST COPY;
For example, enter the following command to view control file backups:
LIST BACKUP OF CONTROLFILE;
The piece name of the autobackup must use the %F
substitution variable, so the autobackup piece name will include the string c-IIIIIIIIII-YYYYMMDD-QQ
, where IIIIIIIIII
stands for the DBID, YYYYMMDD
is a time stamp in the Gregorian calendar of the day the backup is generated, and QQ
is the sequence in hexadecimal.
Copy the backups to the new host with an operating system utility.
For example, enter a command such as the following to copy all datafile copies to the ?/oradata/trgt
directory on the new host:
% cp -r /disk1/*dbf /net/new_host/oracle/oradata/trgt
For example, enter a command such as the following to copy the autobackup backup piece to the /tmp
directory on the new host:
% cp -r /disk1/auto_bkp_loc/c-1618370911-20070208-00 /net/new_host/tmp
As explained in "Restoring the Server Parameter File from a Control File Autobackup", you will need to use the SET CONTROLFILE AUTOBACKUP FORMAT
command when restoring an autobackup from a nondefault location.
This scenario assumes that you want to test whether you can restore your database to a new host. The scenario assumes that you have two networked Linux hosts, hosta
and hostb
. A target database named trgta
is on hosta
and is registered in recovery catalog catdb
. You want to test the restore and recovery of trgta
on hostb
, while keeping database trgta
up and running on hosta
.
For the sake of illustration, assume that the directory structure of hostb
is different from hosta
. The target database is located in /net/hosta/dev3/oracle/dbs
, but you want to restore the database to /net/hostb/oracle/oradata/test
. You have tape backups of datafiles, control files, archived redo logs, and the server parameter file on a media manager accessible by both hosts. The ORACLE_SID
for the trgta
database is trgta
and will not change for the restored database
Caution:
If you are restoring the database for test purposes, then never connect RMAN to the test database and the recovery catalog.To restore the database on a new host:
Ensure that the backups of the target database are accessible on the new host.
To test disaster recovery, you need to have a recoverable backup of the target database. When preparing your disaster recovery strategy, ensure that the backups of the datafiles, control files, and server parameter file are restorable on hostb
. Thus, you must configure the media management software so that hostb
is a media manager client and can read the backup sets created on hosta
. Consult the media management vendor for support on this issue.
Configure the ORACLE_SID
on hostb
.
This scenario assumes that you want to start the RMAN client on hostb
and authenticate yourself through the operating system. However, you must be connected to hostb
either locally or through a net service name.
After logging in to hostb
with administrator privileges, edit the /etc/group
file so that you are included: in the DBA group:
dba:*:614:<your_user_name>
Set the ORACLE_SID
environment variable on hostb
to the same value used on hosta
:
% setenv ORACLE_SID trgta
Start RMAN on hostb
and connect to the target instance without connecting to the recovery catalog.
For example, enter the following command:
% rman NOCATALOG RMAN> CONNECT TARGET /
Set the DBID and start the instance without mounting it.
For example, run SET
DBID
to set the DBID, then run STARTUP
NOMOUNT
:
SET DBID 1340752057; STARTUP NOMOUNT
RMAN will fail to find the server parameter file, which has not yet been restored, but will start the instance with a "dummy" file. Sample output follows:
startup failed: ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/net/hostb/oracle/dbs/inittrgta.ora' trying to start the Oracle instance without parameter files ... Oracle instance started
Restore and edit the server parameter file.
Because you enabled the control file autobackup feature when making your backups, the server parameter file is included in the backup. If you are restoring an autobackup that has a nondefault format, then use the SET CONTROLFILE AUTOBACKUP FORMAT
command to indicate the format.
Allocate a channel to the media manager, then restore the server parameter file as a client-side parameter file and use the SET
command to indicate the location of the autobackup (in this example, the autobackup is in /tmp
):
RUN { ALLOCATE CHANNEL c1 DEVICE TYPE sbt PARMS '...'; SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/tmp/%F'; RESTORE SPFILE TO PFILE '?/oradata/test/inittrgta.ora' FROM AUTOBACKUP; SHUTDOWN ABORT; }
Edit the restored initialization parameter file.
Change any location-specific parameters, for example, those ending in _DEST
, to reflect the new directory structure. For example, edit the following parameters:
- IFILE - LOG_ARCHIVE_DEST_1 - CONTROL_FILES
Restart the instance with the edited initialization parameter file.
For example, enter the following command:
STARTUP FORCE NOMOUNT PFILE='?/oradata/test/inittrgta.ora';
Restore the control file from an autobackup and then mount the database.
For example, enter the following command:
RUN { ALLOCATE CHANNEL c1 DEVICE TYPE sbt PARMS '...'; RESTORE CONTROLFILE FROM AUTOBACKUP; ALTER DATABASE MOUNT; }
RMAN restores the control file to whatever locations you specified in the CONTROL_FILES
initialization parameter.
Catalog the datafile copies that you copied in "Restoring Disk Backups to a New Host", using their new filenames or CATALOG START
WITH
(if you know all the files are in directories with a common prefix easily addressed with a CATALOG START WITH
). For example, run:
CATALOG START WITH '/oracle/oradata/trgt/';
If you want to specify files individually, then you can execute a CATALOG
command as follows:
CATALOG DATAFILECOPY '/oracle/oradata/trgt/system01.dbf', '/oracle/oradata/trgt/undotbs01.dbf', '/oracle/oradata/trgt/cwmlite01.dbf', '/oracle/oradata/trgt/drsys01.dbf', '/oracle/oradata/trgt/example01.dbf', '/oracle/oradata/trgt/indx01.dbf', '/oracle/oradata/trgt/tools01.dbf', '/oracle/oradata/trgt/users01.dbf';
Start a SQL*Plus session on the new database and query the database filenames recorded in the control file.
Because the control file is from the trgta
database, the recorded filenames use the original hosta
filenames. You can query V$
views to obtain this information. Run the following query in SQL*Plus:
COLUMN NAME FORMAT a60 SPOOL LOG '/tmp/db_filenames.out' SELECT FILE# AS "File/Grp#", NAME FROM V$DATAFILE UNION SELECT GROUP#,MEMBER FROM V$LOGFILE; SPOOL OFF EXIT
Write the RMAN restore and recovery script. The script must include the following steps:
For each datafile on the destination host that is restored to a different path than it had on the source host, use a SET
NEWNAME
command to specify the new path on the destination host. If the file systems on the destination system are set up to have the same paths as the source host, then do not use SET NEWNAME
for those files restored to the same path as on the source host.
For each online redo log that is to be created at a different location than it had on the source host, use SQL ALTER
DATABASE
RENAME
FILE
commands to specify the pathname on the destination host. If the file systems on the destination system are set up to have the same paths as the source host, then do not use ALTER DATABASE RENAME FILE
for those files restored to the same path as on the source host.
Perform a SET UNTIL
to limit recovery to the end of the archived redo logs. Note that recovery stops with an error if no SET UNTIL
is specified.
Restore and recover the database.
Run SWITCH DATAFILE ALL
so that the control file recognizes the new path names as the official new names of the datafiles.
Example 19-4 shows the RMAN script reco_test.rman
that can perform the restore and recovery.
Example 19-4 Restoring a Database on a New Host
RUN { # allocate a channel to the tape device ALLOCATE CHANNEL c1 DEVICE TYPE sbt PARMS '...'; # rename the datafiles and online redo logs SET NEWNAME FOR DATAFILE 1 TO '?/oradata/test/system01.dbf'; SET NEWNAME FOR DATAFILE 2 TO '?/oradata/test/undotbs01.dbf'; SET NEWNAME FOR DATAFILE 3 TO '?/oradata/test/cwmlite01.dbf'; SET NEWNAME FOR DATAFILE 4 TO '?/oradata/test/drsys01.dbf'; SET NEWNAME FOR DATAFILE 5 TO '?/oradata/test/example01.dbf'; SET NEWNAME FOR DATAFILE 6 TO '?/oradata/test/indx01.dbf'; SET NEWNAME FOR DATAFILE 7 TO '?/oradata/test/tools01.dbf'; SET NEWNAME FOR DATAFILE 8 TO '?/oradata/test/users01.dbf'; SQL "ALTER DATABASE RENAME FILE ''/dev3/oracle/dbs/redo01.log'' TO ''?/oradata/test/redo01.log'' "; SQL "ALTER DATABASE RENAME FILE ''/dev3/oracle/dbs/redo02.log'' TO ''?/oradata/test/redo02.log'' "; # Do a SET UNTIL to prevent recovery of the online logs SET UNTIL SCN 123456; # restore the database and switch the datafile names RESTORE DATABASE; SWITCH DATAFILE ALL; # recover the database RECOVER DATABASE; } EXIT
Execute the script created in the previous step.
For example, start RMAN to the target database and run the @
command:
% rman TARGET / NOCATALOG RMAN> @reco_test.rman
Open the restored database with the RESETLOGS
option.
From the RMAN prompt, open the database with the RESETLOGS
option:
ALTER DATABASE OPEN RESETLOGS;
Caution:
When you re-open your database in the next step, do not connect to the recovery catalog. Otherwise, the new database incarnation created is registered automatically in the recovery catalog, and the filenames of the production database are replaced by the new filenames specified in the script.Optionally, delete the test database with all of its files.
Note:
If you used an ASM disk group, thenDROP DATABASE
is the only way to safely remove the files of the test database. If you restored to non-ASM storage then you can also use operating system commands to remove the database.Use the DROP DATABASE
command to delete all files associated with the database automatically. The following example deletes the database files:
STARTUP FORCE NOMOUNT PFILE='?/oradata/test/inittrgta.ora'; DROP DATABASE;
Because you did not perform the restore and recovery when connected to the recovery catalog, the recovery catalog contains no records for any of the restored files or the procedures performed during the test. Likewise, the control file of the trgta
database is completely unaffected by the test.