To protect against a failure involving the redo log itself,
Oracle Database allows a multiplexed redo log, meaning that two or
more identical copies of the redo log can be automatically
maintained in separate locations. For the most benefit, these
locations should be on separate disks. Even if all copies of the
redo log are on the same disk, however, the redundancy can help
protect against I/O errors, file corruption, and so on. When redo
log files are multiplexed, LGWR concurrently writes the same redo
log information to multiple identical redo log files, thereby
eliminating a single point of redo log failure.
Multiplexing is implemented by creating groups of redo log
files. A group consists of a redo log file and its multiplexed
copies. Each identical copy is said to be a member of the group.
Each number defines a redo log group. Such as group 1, group 2, and
so on. ( More information on
finding online
redolog files )
1. Adding A New redo log Group
|
sql> ALTER DATABASE ADD LOGFILE( '/oracledata/test/redo3a.log' , '/test_multiplex/redo3b.log' ) SIZE 52429312;
|
The command above will add a new redo log group to your
database. The group will have two members with size 52429312. A
group number will automatically be assigned to your new group. If
you want to set it explicitly you may use command below.
|
sql> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 15 ( '/oracledata/test/redo3a.log' , '/test_multiplex/redo3b.log' ) SIZE 52429312;
|
In a RAC (Real Application Clusters) environment you have to
specify which instance the redo log group will belong to by setting
thread number. Every instance in a RAC database has a thread
number. For ex: the command below will add the redo log group to
instance with thread number 1.
|
sql> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 15 ( '/oracledata/test/redo3a.log' , '/test_multiplex/redo3b.log' ) SIZE 52429312;
|
2. Dropping A redo log Group
Before dropping a redo log group, make sure that at the moment,
logwriter process is not writing to the redo log file you plan to
drop.
|
sql> SELECT GROUP #, THREAD#,ARCHIVED, STATUS FROM V$LOG ;
|
GROUP# |
THREAD# |
ARC |
STATUS |
1 |
1 |
YES |
INACTIVE |
2 |
1 |
NO |
CURRENT |
3 |
1 |
YES |
INACTIVE |
The value for "ARCHIVED" column must be "YES" and STATUS column
must be "INACTIVE".
If the status is "CURRENT" it means that logwriter is currently
using this group to store redo records. After the redo files in
this group is filled it will switch to next group. You may wait
till next log switch operation or you may manually trigger it by
command below:
|
SQL> alter system switch logfile ;
|
If status is "ACTIVE" it means that there are some redo log
records, which have not been applied to datafiles yet. The status
is supposed to turn to INACTIVE soon after the next checkpoint
operation. If you do not want to wait till then you may manually
trigger checkpoint by command below.
|
sql> alter system checkpoint ;
|
If the status has turned to INACTIVE you may drop it by
specifying the group number.
|
sql> ALTER DATABASE DROP LOGFILE GROUP 6;
|
This command will drop the redo log group, which is identified
by number 6.
Logwriter writes to redo log files in a circular fashion. When a
group is filled it moves to next group. After all groups in
database are filled it returns back to first redo log group.
Because of that, there has to be at least 2 groups in an instance.
Oracle won't permit dropping a group if there are only two groups
in the instance.
After dropping a group, you may delete relevant files from
operating system.
3. Adding A New Member To An Existing Group
As mentioned at the beginning of article it is recommended to
multiplex redo log members for fault tolerance. You can accomplish
this by adding new members to an existing group.
|
sql> ALTER DATABASE ADD LOGFILE MEMBER '/u02/oradata/mydb/redo02.log' TO GROUP 2;
|
The above command adds a new redo log file to redo log group
with number 2.
4. Dropping A Member From An Existing Group
As stated in subject 3 (Dropping A redo log Group) again the
group, whose member you want to drop should be inactive.
|
sql> ALTER DATABASE DROP LOGFILE MEMBER '/u03/oradata/mydb/redo03.log'
|
5. Relocating A redo log Group
You may want to relocate your existing redo log group and change
the path of redo log files. Here are the steps to accomplish it
Step 1: Shutdown database
|
sql> shutdown immediate ;
|
Step 2: Backup your existing control
file and redo log file at operating system level.
Step 3: Move your redo log member to a
new location. You may also change the file name if you want.
Step 4: Startup in mount mode
Step 5: Path of redo log files is kept
in control file. You have to update that record by command
below:
|
sql> ALTER DATABASE RENAME FILE '/u02/oradata/mydb/redo02.log' TO '/u03/oradata/mydb/redo03.log'
|
Control file is modified and the path of redo log member is
updated. Now you can open your database.
|
sql> alter database open ;
|
As you see this way of relocating
online redo log files requires downtime. You may also change
the path of your redo log files by adding a new group at desired
location and dropping the ones at former location. This approach
requires no downtime.
No comments:
Post a Comment