增加日志組
要創(chuàng)建一個新的聯(lián)機重做日志文件組窄俏,請使用下面的SQL 命令:
ALTER DATABASE [database] ADD LOGFILE [GROUP integer] filespec [, [GROUP integer] filespec]...]
可以通過filespec 來指定成員名稱和位置蹂匹。可以選擇每個重做日志文件組的GROUP 參數(shù)值凹蜈。如果省略了該參數(shù)限寞,Oracle 服務器自動生成其值忍啸。
SQL> alter database add logfile group 1 ('/u01/app/oracle/oradata/orcl/redo01a.log', '/u01/app/oracle/oradata/orcl/redo01b.log') size 8m;
增加日志成員
有時,DBA 可能需要為已有重做日志組添新的成員日志文件履植,比如计雌,由于某個磁盤損壞,導致每個重做日志組都丟失了一個成員日志文件玫霎,這時凿滤,需通過手工方式為每重做日志組增加一個新日志成員文件∈可以使用下面的ALTER DATABASE ADD LOGFILE MEMBER
命令向現(xiàn)有的重做日志文件組添加新成員翁脆,命令格式如下:
ALTER DATABASE [database] ADD LOGFILE MEMBER [ 'filename' [REUSE][, 'filename' [REUSE]]...TO {GROUP integer|('filename'[, 'filename']...)}]...
最好使用日志文件成員的絕對路徑名;否則將在數(shù)據(jù)庫服務器缺省目錄下創(chuàng)建該文件鼻种。
如果該文件已經(jīng)存在反番,其大小必須與指定值相同,并且必須指定REUSE 選項叉钥“崭祝可以通過指定一個或多個組內(nèi)成員或者指定組號來識別目標組。
SQL> alter database add logfile member '/u01/app/oracle/oradata/orcl/redo01c.log' to group 1;
日志文件重定位
在重做日志文件創(chuàng)建以后沼侣,有時還需改變它們名稱和位置祖能,假設原來數(shù)據(jù)庫系統(tǒng)中只有一個硬盤歉秫,因此重做日志的所有成員都保存在同一個硬盤中蛾洛,后來又增加一個硬盤,這時可將重做日志組中的一部分成員移動到新的硬盤中雁芙。有兩種方法可實現(xiàn)重定位或重命名重做日
志文件:
1)ALTER DATABASE RENAME FILE 命令轧膘。
2)添加新成員并刪除舊成員。
使用ALTER DATABASE RENAME FILE 命令的步驟如下:
1)關(guān)閉數(shù)據(jù)庫
2)使用操作系統(tǒng)命令COPY 重做日志文件到新位置
3)啟動數(shù)據(jù)庫到mount 狀態(tài)
4)執(zhí)行ALTER DATABASE RENAME FILE 命令
5)打開數(shù)據(jù)庫
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> !mv '/u01/app/oracle/oradata/orcl/redo01.log' '/u01/app/oracle/arch/log/redo01.log'
SQL> startup
ORACLE instance started.
Total System Global Area 368263168 bytes
Fixed Size 1345016 bytes
Variable Size 255855112 bytes
Database Buffers 104857600 bytes
Redo Buffers 6205440 bytes
Database mounted.
ORA-03113: end-of-file on communication channel
Process ID: 24106
Session ID: 1 Serial number: 5
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@ocm ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Mon Jul 24 22:30:09 2017
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup mount
ORACLE instance started.
Total System Global Area 368263168 bytes
Fixed Size 1345016 bytes
Variable Size 255855112 bytes
Database Buffers 104857600 bytes
Redo Buffers 6205440 bytes
Database mounted.
SQL> alter database rename file '/u01/app/oracle/oradata/orcl/redo01.log' to '/u01/app/oracle/arch/log/redo01.log';
Database altered.
SQL> alter database open ;
Database altered.
刪除重做日志
如果日志組尺寸設置不合理兔甘,需要改日志組尺寸谎碍,但是ORACLE 數(shù)據(jù)庫中,已存在的日志組的尺寸是不能改變的洞焙,這時可通過增加新日志組蟆淀,然后刪除原有的日志組來實現(xiàn)改變?nèi)罩窘M尺寸的目的。如果某個重做日志組不再需要使用澡匪,也可以將整個重做日志組刪除熔任。刪除一個重做日志組時,其中成員日志文件將都被刪除唁情。在刪除重做日志組之前疑苔,應首先考慮如下幾個問題:
? 無論組中有多少成員,一個數(shù)據(jù)庫至少需要使用兩個重做日志組甸鸟,因此惦费,如果在數(shù)據(jù)庫中只包含兩個日志組時兵迅,不能進行刪除日志組的操作。
? 只能刪除處于INACTIVE 狀態(tài)的重做日志組薪贫,如果要刪除CURRENT 狀態(tài)的重做日志組恍箭,必須執(zhí)行一次手工日志切換,將它切換到INACTIVE 狀態(tài)后雷。
? 如果數(shù)據(jù)庫處于歸檔模式下季惯,在刪除重做日志組之前,必須確定它已經(jīng)被歸檔臀突。
SQL> select group#,archived,status from v$log;
GROUP# ARC STATUS
---------- --- ----------------
1 YES INACTIVE
2 YES INACTIVE
3 NO CURRENT
4 YES INACTIVE
5 YES INACTIVE
6 YES INACTIVE
6 rows selected.
SQL> alter database drop logfile group 1;
Database altered.
SQL> alter database drop logfile group 2;
Database altered.
SQL> alter database drop logfile group 4;
Database altered.
SQL> alter database drop logfile group 6;
Database altered.
若要增大或者減小聯(lián)機重做日志文件組的大小勉抓,請?zhí)砑有碌穆?lián)機重做日志文件組(具有新的大小)候学,然后刪除原來日志組藕筋。
注意:刪除日志組時并不刪除操作系統(tǒng)文件。
除了需要刪除重做日志組外梳码,更為常見的情況是僅需要刪除重做日志組中的某個成員日志文件隐圾。比如,由于存放日志文件的硬盤發(fā)生物理損壞導致日志成員發(fā)生損壞或丟失時掰茶,該日志成員將無法訪問暇藏,此時需要將它從重做日志組中刪除。如果要刪除一個或多個特定的聯(lián)機重做日志文件
SQL> set linesize 300
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ------------------------------------------------------------ ---
3 ONLINE /u01/app/oracle/oradata/orcl/redo03.log NO
5 ONLINE /u01/app/oracle/oradata/orcl/redo05a.log NO
5 ONLINE /u01/app/oracle/oradata/orcl/redo05b.log NO
SQL> alter database drop logfile member '/u01/app/oracle/oradata/orcl/redo05b.log';
Database altered.
刪除日志組成員有如下限制:
? 如果要刪除的日志組只包含一個成員或者只包含一個有效的成員時濒蒋,那么不能刪除該成員盐碱。
? 如果該組是當前組,那么必須先強制執(zhí)行日志文件切換沪伙,然后才能刪除該成員瓮顽。
? 如果數(shù)據(jù)庫正運行在ARCHIVELOG 模式下并且未將該成員所屬日志文件組歸檔,那么無法刪除該成員围橡。
清除重做日志
在數(shù)據(jù)庫運行過程中暖混,聯(lián)機重做日志文件可能會因為某些原因而損壞。如果出現(xiàn)這種情況翁授,數(shù)據(jù)庫最終會由于無法將損壞的重做日志文件歸檔而停止拣播。或者當一個聯(lián)機重做日志文件組中的所有成員都已經(jīng)被破壞時收擦,數(shù)據(jù)庫會因為無法切換到損壞的日志組而停止贮配。如果發(fā)生種情況,可以在不關(guān)閉數(shù)據(jù)庫情況下炬守,手工清空損壞的重做日志文件的內(nèi)容牧嫉,以避免出現(xiàn)
停止運行的情況。
清空重做日志文件就是將重做日志文件中的內(nèi)容全部初始化,相當于刪除該重做日志文件酣藻,然后各方面重建它曹洽。即使數(shù)據(jù)庫只擁有兩個重做日志組,或者要清空的重做日志組是當前日志組辽剧,都可以成功執(zhí)行清空操作送淆。
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ------------------------------------------------------------ ---
3 ONLINE /u01/app/oracle/oradata/orcl/redo03.log NO
5 ONLINE /u01/app/oracle/oradata/orcl/redo05a.log NO
SQL> select group#,archived,status from v$log;
GROUP# ARC STATUS
---------- --- ----------------
3 NO CURRENT
5 YES INACTIVE
SQL> alter database clear logfile group 5;
Database altered.
-- 如果日志組5 尚未歸檔,則必須指定UNARCHIVED 子句怕轿。指定UNARCHIVED 子句后偷崩,Oracle 將避免對5 號日志組進行歸檔。
SQL> alter database clear unarchived logfile group 5;
Database altered.
在數(shù)據(jù)庫打開時不能清除當前日志組撞羽,為了清除當前日志組阐斜,可以對日志進行切換或?qū)?shù)據(jù)庫置成MOUNT 狀態(tài)。
SQL> select group#,archived,status from v$log;
GROUP# ARC STATUS
---------- --- ----------------
3 NO CURRENT
5 YES INACTIVE
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 368263168 bytes
Fixed Size 1345016 bytes
Variable Size 255855112 bytes
Database Buffers 104857600 bytes
Redo Buffers 6205440 bytes
Database mounted.
SQL> alter database clear unarchived logfile group 3;
Database altered.
SQL> alter database open;
Database altered.