Thông tin tài liệu
CHAPTER 26 • HIGH AVAILABILITY
1082
Configuring the Primary Instance
To implement managed recovery, you will need to configure the primary instance to
archive redo logs to the standby host. If you plan to use manual recovery, you do not
need to make any configuration changes to the primary instance.
To configure the primary instance to archive redo logs to the standby host, you
will need to set up the init.ora file for the primary instance with information about
where to archive these logs. You do not need to shut down the primary instance to
enable these parameters. Instead, you can manually enable them using the ALTER
SYSTEM command, as described in the “Enabling Parameters for the Primary
Instance” section later in this chapter.
The archive destination is specified by using the LOG_ARCHIVE_DEST_n parame-
ter, where n is an integer from 1 to 5. Up to five destinations may be defined, but one
destination must be a local device. When setting these parameters, the keyword
LOCATION specifies a valid path for the local archive destination, and the keyword
SERVICE specifies a service name referenced in the tnsnames.ora file. The SERVICE
keyword must be specified for all standby archive destinations, whether local or
remote. Here is an example of using the LOG_ARCHIVE_DEST_n parameters in the
init.ora file of the primary instance:
log_archive_dest_1 = ‘location=/u02/arch/PRMRY’
log_archive_dest_2 = ‘service=stdby’
There are several options that you can set with the LOG_ARCHIVE_DEST_n param-
eter, as described in the following sections.
Setting a Mandatory or Optional Destination
You can specify whether a destination is mandatory or optional by using the
MANDATORY or OPTIONAL keyword, respectively. Oracle recommends that you
specify the local archived redo log destination as MANDATORY. The following is an
example of using the MANDATORY and OPTIONAL keywords:
log_archive_dest_1 = ‘location=/u02/arch/PRMRY MANDATORY’
log_archive_dest_2 = ‘service=stdby OPTIONAL’
Specifying Access after a Failed Write
By default, Oracle will not attempt to access a destination following an error. You can
specify that Oracle should attempt to access an archived redo log destination again
after a failed write using the REOPEN keyword. The REOPEN keyword specifies the
number of seconds Oracle will wait before the archiver process should attempt to
access a failed destination again. The default value of the REOPEN keyword when
specified without qualification is 300 seconds. (If you do not specify the REOPEN key-
word, the default value is 0.) You can override the default by using REOPEN=n, where
C
opyright ©2002 SYBEX, Inc., Alameda, CA
www.sybex.com
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
1083
n is the number of seconds to wait. The following is an example of using the REOPEN
keyword:
log_archive_dest_2 = ‘service=stdby OPTIONAL REOPEN=60’
Setting the Minimum Successful Write Destinations
The LOG_ARCHIVE_MIN_SUCCEED_DEST parameter specifies the minimum number
of destinations where the archiver process must successfully write archived redo logs
before the source redo log is available for new writes. When archived redo logs are
written, the count of successful writes to all MANDATORY destinations and OPTIONAL
nonstandby destinations is measured to satisfy the setting of the LOG_ARCHIVE_
MIN_SUCCEED_DEST parameter. The default setting for LOG_ARCHIVE_MIN_
SUCCEED_DEST is 1, and valid values are 1 through 5.
Enabling or Deferring a Destination
It is possible to define archived redo log destinations without enabling those destina-
tions. Whether or not an archived redo log destination is enabled is specified using
the LOG_ARCHIVE_DEST_STATE_n parameter, where n is an integer from 1 to 5, cor-
responding to the respective LOG_ARCHIVE_DEST_n parameter. Valid values are
ENABLE or DEFER. ENABLE, the default setting, tells Oracle to archive to the defined
destination. The DEFER setting allows you to define the destination without actually
archiving to that destination. The deferred destination can later be enabled dynami-
cally using the ALTER SESSION or ALTER SYSTEM command. The following example
illustrates how to define an archived redo log destination without enabling it:
log_archive_dest_state_2 = DEFER
log_archive_dest_2 = ‘service=stdby’
Configuring the Standby Instance
You can create the initialization parameter file for the standby instance by copying
the initialization parameter file from the primary instance. With a few exceptions, the
initialization parameters for the primary instance and the standby instance should
have the same settings.
Setting Standby Initialization Parameters
The following parameters are particularly important when you are configuring the
standby instance:
• The COMPATIBLE parameter settings should be identical for the primary and
standby instances.
• The DB_NAME parameter settings should also be identical in both files.
• The CONTROL_FILES parameter for the standby instance should be set to the
fully qualified name of the standby control file.
USING A STANDBY DATABASE
Oracle8i Distributed
Database
PART
IV
C
opyright ©2002 SYBEX, Inc., Alameda, CA
www.sybex.com
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
CHAPTER 26 • HIGH AVAILABILITY
1084
• The LOG_ARCHIVE_DEST_n (described earlier in the “Configuring the Primary
Instance” section) specifies the location of the archived redo logs for manual
recovery. This parameter should be set whether you are configuring managed or
manual recovery.
• The optional parameter LOG_ARCHIVE_TRACE causes an audit trail of archived
redo logs received from the primary database to be written to a trace file.
• In a managed recovery environment, the STANDBY_ARCHIVE_DEST parameter
sets the location to write the archived redo logs received from the primary data-
base. Set LOG_ARCHIVE_DEST_n and STANDBY_ARCHIVE_DEST to identical
values for easier maintenance.
Setting Parameters for a Standby on the Same Host as the Primary
When the primary and standby databases reside on the same host, several other
standby initialization parameters are important. These include the DB_FILE_NAME_
CONVERT, LOG_FILE_NAME_CONVERT, and LOCK_NAME_SPACE parameters.
The DB_FILE_NAME_CONVERT and LOG_FILE_NAME_CONVERT parameters in
the standby initialization parameter file enable automatic name conversion of
datafiles and archived redo logs, respectively. Ideally, the directory structures in the
primary and standby databases should be identical. However, if they are not (because
the primary and standby databases reside on the same host or for some other reason),
you will need to update the standby control file with the new filenames.
The DB_FILE_NAME_CONVERT and LOG_FILE_NAME_CONVERT parameters each
specify two strings. The first string is that portion of the path structure of the primary
database to be converted. The second string is the new path structure to replace the
structure specified by the first string. Here’s an example of the DB_FILE_NAME_
CONVERT parameter set in the standby database initialization parameter file:
db_file_name_convert = /u01/oradata/PRMRY, /u01/oradata/STDBY
The LOCK_NAME_SPACE parameter also must be set for the standby instance
when the primary and standby databases reside on the same host, as follows:
lock_name_space = stdby
If this parameter is not set for the two instances, you will receive an ORA-1102 error.
Mounting the Standby Database
When you are ready to start the standby database, follow these steps:
1. Connect to Oracle from SQL*Plus:
$ sqlplus /NOLOG
SQL> CONNECT INTERNAL
C
opyright ©2002 SYBEX, Inc., Alameda, CA
www.sybex.com
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
1085
2. Start the instance without mounting the database:
SQL> STARTUP NOMOUNT
3. Mount the database as a standby database:
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
Renaming Files on the Standby Site
If you are unable to correctly rename all of the datafiles and redo log files for the
standby database using conversion parameters, you will need to manually rename
these files before starting recovery. For example, suppose that the DB_FILE_NAME_
CONVERT parameter was set to convert the path /u01/oradata/PRMRY to /u01/
oradata/STDBY. However, a datafile was erroneously created following the path
/u01/app/oracle/admin/PRMRY, and you are unable to take the downtime to correct
this error. You can still move this datafile on the standby site to the correct path, but
you will need to manually rename this datafile in the standby control file.
To manually rename a datafile, with the standby database mounted, use the ALTER
DATABASE RENAME FILE command, as follows:
SQL> ALTER DATABASE RENAME FILE
2> ‘/u01/app/oracle/admin/PRMRY/temp01.dbf’ to
3> ‘/u01/oradata/STDBY/temp01.dbf’;
Enabling Parameters for the Primary Instance
If you are implementing managed recovery, you have configured the initialization
parameter file of the primary instance to archive redo logs to the standby site (as
described in the “Configuring the Primary Instance” section earlier in this chapter).
However, if you have not shut down and restarted the instance, these new settings
have not taken effect. You can enable these new parameter settings dynamically with-
out shutting down the instance by using the ALTER SYSTEM command.
For example, suppose that you set the LOG_ARCHIVE_DEST_2 parameter as follows:
log_archive_dest_2 = “service=stdby”
You can now enable this parameter with the following command:
SQL> ALTER SYSTEM SET log_archive_dest_2 = “service=stdby”;
Enabling Recovery
Your next step is to start the recovery process of the standby database. How you start
the recovery depends on the type of recovery you have chosen for your environment.
USING A STANDBY DATABASE
Oracle8i Distributed
Database
PART
IV
C
opyright ©2002 SYBEX, Inc., Alameda, CA
www.sybex.com
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
CHAPTER 26 • HIGH AVAILABILITY
1086
Enabling Manual Recovery
If you chose to use the manual recovery process, you can initiate recovery by issuing
the following command:
SQL> RECOVER STANDBY DATABASE;
This command tells Oracle to use the location specified in the initialization file.
Alternatively, you can start manual recovery with this command:
SQL> RECOVER FROM ‘/u02/arch/STDBY’ STANDBY DATABASE;
As you can see, this command gives the location of the archived log files to be used
for the current recovery session.
You can also use the above commands with the UNTIL CANCEL option:
SQL> RECOVER STANDBY DATABSE UNTIL CANCEL;
SQL> RECOVER FROM ‘/u02/arch/STDBY’ STANDBY DATABASE UNTIL CANCEL;
When using this command, Oracle will prompt you for each archived redo log file
that it wants to apply and wait for you to acknowledge the prompt before continuing.
Enabling Managed Recovery
If you are using the managed recovery option, you will first need to check to see if a
gap sequence exists. Since Oracle rolls the standby database forward by sequentially
applying the archived redo log files, it cannot enter into a managed recovery session
if there is a missing log. A gap sequence exists when the primary database generated a
log sequence that was not archived to the standby site. A gap sequence may occur for
a number of reasons, such as the following:
• The standby database was created from an old backup or from an inconsistent
(online) backup.
• You shut down the standby database(s) before shutting down the primary
database.
• There was a network failure.
If a gap sequence exists, you will need to manually apply the missing archived redo
log files to bring the standby database in synch with the primary site.
You can query the standby database to see if a gap sequence exists using SQL*Plus,
as follows:
SELECT high.thread#, “LowGap#”, “HighGap#”
FROM
(
SELECT thread#, MIN(sequence#)-1 “HighGap#”
FROM
C
opyright ©2002 SYBEX, Inc., Alameda, CA
www.sybex.com
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
1087
(
SELECT a.thread#, a.sequence#
FROM
(
SELECT *
FROM v$archived_log
) a,
(
SELECT thread#, MAX(next_change#)gap1
FROM v$log_history
GROUP BY thread#
) b
WHERE a.thread# = b.thread#
AND a.next_change# > gap1
)
GROUP BY thread#
) high,
(
SELECT thread#, MIN(sequence#) “LowGap#”
FROM
(
SELECT thread#, sequence#
FROM v$log_history, v$datafile
WHERE checkpoint_change# <= next_change#
AND checkpoint_change# >= first_change#
)
GROUP BY thread#
) low
WHERE low.thread# = high.thread#;
This query will generate an output similar to the following:
THREAD# LowSeq# HighSeq#
1 171 174
This shows that a gap sequence exists for thread #1 and that logs 171 through 174
should be manually applied to the standby database. If the HIGHSEQ# and LOWSEQ#
columns both show the same number, a gap sequence does not exist for that particu-
lar thread.
USING A STANDBY DATABASE
Oracle8i Distributed
Database
PART
IV
C
opyright ©2002 SYBEX, Inc., Alameda, CA
www.sybex.com
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
CHAPTER 26 • HIGH AVAILABILITY
1088
If there is a gap sequence, query the V$ARCHIVED_LOG view in the primary data-
base to obtain the names of the log files that need to be manually applied, as follows:
SQL> SELECT name
2> FROM v$archived_log
3> WHERE sequence# >= 171
4> AND sequence# <= 174;
NAME
/u02/arch/primary/arch_PRMRY_1_171.log
/u02/arch/primary/arch_PRMRY_1_172.log
/u02/arch/primary/arch_PRMRY_1_173.log
/u02/arch/primary/arch_PRMRY_1_174.log
You will then need to copy these archived log files from the primary database’s
archiving destination to the standby database’s receiving destination. After the files
have been copied, issue either the RECOVER STANDBY DATABASE UNTIL CANCEL
or RECOVER AUTOMATIC STANDBY DATABASE command to apply the necessary
log files.
Once the gap sequence has been resolved, you can initiate a managed recovery ses-
sion for your standby database, as follows:
SQL> RECOVER MANAGED STANDBY DATABASE;
When you use this statement, Oracle will wait indefinitely for the new archived log
files to be received and automatically apply them to your standby database.
If you want to specify a waiting period, use the TIMEOUT option and specify the
length of time to wait, in minutes:
SQL> RECOVER MANAGED STANDBY DATABASE TIMEOUT 10;
In this example, Oracle will wait for 10 minutes for new archived log files to arrive
before it will time out and cancel the managed recovery session.
Testing the Standby Database
You are now ready to test the failover functionality of your newly created standby
database. However, if you simply activated the standby database, you would need to
open the database using the RESETLOGS command. Of course, once the standby data-
base has been opened with RESETLOGS, the only way to resume in standby mode is
to re-create the standby database. The solution to this problem is to test your standby
database failover functionality by first using cancel-based recovery, and then starting
the standby database in read-only mode.
C
opyright ©2002 SYBEX, Inc., Alameda, CA
www.sybex.com
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
1089
For a managed recovery process, cancel the recovery session and shut down the
standby instance by issuing this command:
SQL> RECOVER MANAGED STANDBY DATABASE CANCEL
For manual recovery, use the following commands:
SQL> RECOVER CANCEL
SQL> SHUTDOWN IMMEDIATE
Next, start the standby database and put it in MOUNT mode:
SQL> STARTUP NOMOUNT
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
Then, in MOUNT mode, open the database in read-only mode:
SQL> ALTER DATABASE OPEN READ ONLY;
Once the standby database has been opened in read-only mode, you can query the
standby database to verify that the transactions executed on the primary site are
propagated to the standby site.
Maintaining a Standby Database
The previous sections walked you through a step-by-step process of creating a standby
database. So now that you have a fully operational standby database, what’s next?
Like everything else, your standby database will require some administration and
maintenance. Generally, the only maintenance that is required for a standby database
is to keep it in synch with the primary database. Some problems you may run into
while managing standby databases include the need to resolve redo log sequence
number gaps as they occur. Other tasks include making sure that the physical struc-
ture of the standby database matches that of the primary database and manually
propagating any data that was applied to the primary site via the DIRECT or UNRE-
COVERABLE mode. Let’s take a closer look at these situations.
TIP The standby database can also be backed up, but not while the database is in
recovery mode. Either shut down the standby database or open it in read-only mode.
Make the backups. Then resume recovery.
Resolving Gap Sequences
Common causes for gap sequences (after the standby database is operational) are net-
work failures and shutting down the standby database while the primary database is
still open. You will need to be aware of these situations and regularly monitor the
USING A STANDBY DATABASE
Oracle8i Distributed
Database
PART
IV
C
opyright ©2002 SYBEX, Inc., Alameda, CA
www.sybex.com
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
CHAPTER 26 • HIGH AVAILABILITY
1090
standby database to ensure that a gap sequence does not occur. If you do find a gap
sequence, you will need to manually resolve it, as explained in the “Enabling Man-
aged Recovery” section earlier in this chapter.
Matching Changes in the Physical Structure
Standby database recovery is possible only as long as the physical structure matches
that of the primary database. Certain physical structure changes are transmitted auto-
matically to the standby database via redo application. Such changes include renam-
ing a primary database’s datafile, changing the mode of a tablespace from offline to
online or vice versa, changing the status of a tablespace from read-only to read/write
or vice versa, and dropping a tablespace.
Other structural changes require a certain degree of manual maintenance on the
standby database. Such changes include re-creating the control file and adding a
tablespace/datafile to the primary database.
Re-creating the Standby Control File
Creating new members or groups on the primary database does not affect the standby
database. Similarly, enabling or disabling threads does not affect the standby database
either. However, it is recommended that if you enable or disable threads, or add or
drop groups or members on the primary database, you re-create the standby control
file. This keeps the redo log file configuration on the primary and the standby data-
bases in synch.
WARNING If for some reason, the unarchived log files need to be cleared on the pri-
mary instance, you will invalidate the entire standby database. Your only option at that
time will be to re-create the standby database.
Changing certain initialization parameters requires re-creating the control file. If
you re-create the primary database’s control file, you will invalidate the standby data-
base’s control file. Therefore, you will need to re-create the standby database’s control
file. Follow these steps to re-create a standby control file (note that these steps assume
that the primary database’s control files have been re-created):
1. Cancel the recovery session and shut down the standby instance.
• For managed recovery, issue:
SQL> RECOVER MANAGED STANDBY DATABASE CANCEL
• For manual recovery, use:
SQL> RECOVER CANCEL
SQL> SHUTDOWN IMMEDIATE
C
opyright ©2002 SYBEX, Inc., Alameda, CA
www.sybex.com
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
1091
2. Log in to the primary instance and use the following statement to create a
standby control file:
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS ‘/tmp/stdby.ctl’;
3. Archive the online redo log file on the primary database:
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
4. Copy the newly created standby control file from the primary host to the
standby host and start the standby instance in recovery mode:
SQL> STARTUP NOMOUNT
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> RECOVER STANDBY DATABASE
NOTE If you restored a control file from backup on the primary database or opened the
primary database with the RESETLOGS command, you will need to re-create the standby
database.
Adding Tablespaces/Datafiles
Whenever a new datafile is added to the primary site, the same file needs to be added
to the standby site (or sites) as well. Suppose that you add a new datafile to the pri-
mary site like this:
SQL> ALTER TABLESPACE TEMP ADD DATAFILE ‘/u01/oradata/PRMRY/temp02.dbf’
SIZE 200M;
Redo generated from this statement will add the name of the new datafile to the
standby control file. However, in order for the standby database to continue recovery,
you must copy the file to its corresponding location. You can also cancel the recovery
session on the standby site and create the datafile.
To switch log files on the primary site to initiate archival of the redo logs to the
standby site, issue the following statement:
SQL> ALTER SYSTEM SWITCH LOGFILE;
Next, ensure that the standby database is running in recovery mode. Initiate man-
ual recovery, if necessary:
SQL> CONNECT INTERNAL
SQL> STARTUP NOMOUNT
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> RECOVER MANAGED STANDBY DATABASE;
USING A STANDBY DATABASE
Oracle8i Distributed
Database
PART
IV
C
opyright ©2002 SYBEX, Inc., Alameda, CA
www.sybex.com
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Ngày đăng: 26/01/2014, 19:20
Xem thêm: Tài liệu ORACLE8i- P28 docx, Tài liệu ORACLE8i- P28 docx, Migrating an Existing 7.1+ Database to Oracle8i