6. Log File Management
6.1 Due to the expected high volume of transactions. the database should have the following configuration:
6.1.1 A minimum of 5 redo log groups.
6.1.2 Each redo log group should not be a single point of failure.
6.1.3 File size of 100MB
6.1.4 Specify the location such that it minimizes contention and reduces the risk of a single point of failure in case of disk driver failure
6.2 Triplex the controlfile to minimize recovery in case of disk drive failure.
6. Log File Management
- 6.1 Due to the expected high volume of transactions. the database should have the following configuration:
- 6.1.1 A minimum of 5 redo log groups. 5个组
- 6.1.2 Each redo log group should not be a single point of failure.每个组至少2个成员,最好分别在两个盘上,不会出现单点故障
- 6.1.3 File size of 100MB 文件大小100M
- 6.1.4 Specify the location such that it minimizes contention and reduces the risk of a single point of failure in case of disk driver failure
每个组有两个成员,两个成员在两个磁盘,最小化争用,最小风险。
参考联机文档:
Administrator's Guide ==> 6 Managing the Redo Log==>Creating Redo Log Members,Creating Redo Log
Groups
ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2b.rdo' TO GROUP 2;
ALTER DATABASE ADD LOGFILE GROUP 4 ('/oracle/dbs/log1c.rdo', '/oracle/dbs/log2c.rdo') SIZE 100m;
从题意可知,有5个日志组,每个日志组至少包含两个成员,每个成员都不在相同的磁盘里,文件大小为100M。
操作如下:
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
1 STALE ONLINE /u01/app/oracle/oradata/PROD/Disk1/redo01.log NO
2 STALE ONLINE /u01/app/oracle/oradata/PROD/Disk1/redo02.log NO
3 ONLINE /u01/app/oracle/oradata/PROD/Disk1/redo03.log NO
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 4 104857600 1 NO INACTIVE 117224 18-MAR-14
2 1 5 104857600 1 NO INACTIVE 168127 18-MAR-14
3 1 6 104857600 1 NO CURRENT 199956 19-MAR-14
目前已经有3个组,每个组里有一个成员,故现在向每个组分别增加一个成员,另外再增加两个组4和5,组里有2个成员。
SQL> alter database add logfile member '/u01/app/oracle/oradata/PROD/Disk2/redo01_1.log' to group 1;
Database altered.
SQL> alter database add logfile member '/u01/app/oracle/oradata/PROD/Disk2/redo02_1.log' to group 2;
Database altered.
SQL> alter database add logfile member '/u01/app/oracle/oradata/PROD/Disk2/redo03_1.log' to group 3;
Database altered.
SQL> alter database add logfile group 4 ('/u01/app/oracle/oradata/PROD/Disk1/redo04.log','/u01/app/oracle/oradata/PROD/Disk2/redo04_1.log') size 100m;
Database altered.
SQL> alter database add logfile group 5 ('/u01/app/oracle/oradata/PROD/Disk1/redo05.log','/u01/app/oracle/oradata/PROD/Disk2/redo05_1.log') size 100m;
Database altered.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 4 104857600 2 NO INACTIVE 117224 18-MAR-14
2 1 5 104857600 2 NO INACTIVE 168127 18-MAR-14
3 1 6 104857600 2 NO CURRENT 199956 19-MAR-14
4 1 0 104857600 2 YES UNUSED 0
5 1 0 104857600 2 YES UNUSED 0
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
1 STALE ONLINE /u01/app/oracle/oradata/PROD/Disk1/redo01.log NO
2 STALE ONLINE /u01/app/oracle/oradata/PROD/Disk1/redo02.log NO
3 ONLINE /u01/app/oracle/oradata/PROD/Disk1/redo03.log NO
1 INVALID ONLINE /u01/app/oracle/oradata/PROD/Disk2/redo01_1.log NO
2 INVALID ONLINE /u01/app/oracle/oradata/PROD/Disk2/redo02_1.log NO
3 INVALID ONLINE /u01/app/oracle/oradata/PROD/Disk2/redo03_1.log NO
4 ONLINE /u01/app/oracle/oradata/PROD/Disk1/redo04.log NO
4 ONLINE /u01/app/oracle/oradata/PROD/Disk2/redo04_1.log NO
5 ONLINE /u01/app/oracle/oradata/PROD/Disk1/redo05.log NO
5 ONLINE /u01/app/oracle/oradata/PROD/Disk2/redo05_1.log NO
10 rows selected.
或者使用一下查询:查询结果有10行,每个GROUP#有两行,BYTES是100M
SQL> select a.group#,member,bytes/1024/1024 from v$logfile a,v$log b where a.group#=b.group# order by a.group#;
GROUP# MEMBER BYTES/1024/1024
---------- -------------------------------------------------- ---------------
1 /u01/app/oracle/oradata/PROD/Disk2/redo01_1.log 100
1 /u01/app/oracle/oradata/PROD/Disk1/redo01.log 100
2 /u01/app/oracle/oradata/PROD/Disk1/redo02.log 100
2 /u01/app/oracle/oradata/PROD/Disk2/redo02_1.log 100
3 /u01/app/oracle/oradata/PROD/Disk2/redo03_1.log 100
3 /u01/app/oracle/oradata/PROD/Disk1/redo03.log 100
4 /u01/app/oracle/oradata/PROD/Disk1/redo04.log 100
4 /u01/app/oracle/oradata/PROD/Disk2/redo04_1.log 100
5 /u01/app/oracle/oradata/PROD/Disk2/redo05_1.log 100
5 /u01/app/oracle/oradata/PROD/Disk1/redo05.log 100
10 rows selected.
SQL>
- 6.2 Triplex the controlfile to minimize recovery in case of disk drive failure.
三元化控制文件,即控制文件有三个。
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /u01/app/oracle/oradata/PROD/D
isk1/control01.ctl, /u01/app/o
racle/oradata/PROD/Disk1/contr
ol02.ctl, /u01/app/oracle/orad
ata/PROD/Disk1/control03.ctl
SQL> alter system set control_files='/u01/app/oracle/oradata/PROD/Disk1/control01.ctl','/u01/app/oracle/oradata/PROD/Disk2/control02.ctl','/u01/app/oracle/oradata/PROD/Disk3/control03.ctl' scope=spfile;
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
[oracle@ocm1 Disk2]$ cd /u01/app/oracle/oradata/PROD/Disk1/
[oracle@ocm1 Disk1]$ ll
total 1878124
-rw-r----- 1 oracle oinstall 6832128 Mar 19 13:22 control01.ctl
-rw-r----- 1 oracle oinstall 6832128 Mar 19 13:22 control02.ctl
-rw-r----- 1 oracle oinstall 6832128 Mar 19 13:22 control03.ctl
-rw-r----- 1 oracle oinstall 419438592 Mar 19 13:22 example01.dbf
-rw-r----- 1 oracle oinstall 41951232 Mar 19 13:22 indx01.dbf
-rw-r----- 1 oracle oinstall 50339840 Mar 19 13:22 oltp01.dbf
-rw-r----- 1 oracle oinstall 104858112 Mar 19 09:09 redo01.log
-rw-r----- 1 oracle oinstall 104858112 Mar 19 09:09 redo02.log
-rw-r----- 1 oracle oinstall 104858112 Mar 19 13:22 redo03.log
-rw-r----- 1 oracle oinstall 104858112 Mar 19 13:11 redo04.log
-rw-r----- 1 oracle oinstall 104858112 Mar 19 13:11 redo05.log
-rw-r----- 1 oracle oinstall 340795392 Mar 19 13:22 sysaux01.dbf
-rw-r----- 1 oracle oinstall 340795392 Mar 19 13:22 system01.dbf
-rw-r----- 1 oracle oinstall 20979712 Mar 18 10:57 temp01.dbf
-rw-r----- 1 oracle oinstall 20979712 Mar 19 09:21 temp11.dbf
-rw-r----- 1 oracle oinstall 20979712 Mar 19 09:22 temp12.dbf
-rw-r----- 1 oracle oinstall 10493952 Mar 19 13:22 tools01.dbf
-rw-r----- 1 oracle oinstall 121643008 Mar 19 13:22 undotbs01.dbf
-rw-r----- 1 oracle oinstall 50339840 Mar 19 13:22 users01.dbf
[oracle@ocm1 Disk1]$ mv control02.ctl /u01/app/oracle/oradata/PROD/Disk2/control02.ctl
[oracle@ocm1 Disk1]$ mv control03.ctl /u01/app/oracle/oradata/PROD/Disk3/control03.ctl
SQL> startup
ORACLE instance started.
Total System Global Area 524288000 bytes
Fixed Size 1220360 bytes
Variable Size 159383800 bytes
Database Buffers 360710144 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
查询结果有三行,分别在DISK1至DISK5的三个目录中,这里分别在1,2,3Disk中。
SQL> select name from v$controlfile;
NAME
------------------------------------------------------------
/u01/app/oracle/oradata/PROD/Disk1/control01.ctl
/u01/app/oracle/oradata/PROD/Disk2/control02.ctl
/u01/app/oracle/oradata/PROD/Disk3/control03.ctl