您的位置:首页 > 数据库 > Oracle

《Oracle从入门到精通》读书笔记第七章 管理控制文件和日志文件之二

2014-02-08 10:30 495 查看
7.2 管理重做日志文件(redo log file)
重做日志文件也称为日志文件,是数据库安全和恢复的最基本保障重做日志文件记录DDL或DML操作
1、日志文件的内容及数据恢复重做日志文件不仅可以恢复对数据文件的修改操作,还可以恢复对回滚段所作的操作
2、写入重做日志文件创建oracle数据库的过程中,默认创建3个重做日志文件组,每个组包含两个日志文件,每个日志文件都有序号,按照序号从小到大向日志文件组中写入日志信息。循环覆盖写。当前正在被LGWR进程写入日志记录的某组重做日志文件被称为“联机重做日志文件”(online redo log file)重做日志文件的状态:current:正在被LGWR进程写入的重做日志文件active:正在被实例用于数据库恢复的重做日志文件inactive:其他重做日志文件的状态SQL> col member for a40;SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE---------- ------- ------- ---------------------------------------- --------------------- 1 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO01.LOG NO 2 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO02.LOG NO 3 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO03.LOG NO
7.2.5 查看重做日志文件信息查询重做日志文件信息常用的数据字典视图
字典视图说明
v$log日志组
v$logfile日志文件
v$log_history日志历史信息
SQL> desc v$log;Name Type Nullable Default Comments------------- ------------ -------- ------- --------GROUP# NUMBER YTHREAD# NUMBER YSEQUENCE# NUMBER YBYTES NUMBER YBLOCKSIZE NUMBER YMEMBERS NUMBER YARCHIVED VARCHAR2(3) YSTATUS VARCHAR2(16) YFIRST_CHANGE# NUMBER YFIRST_TIME DATE YNEXT_CHANGE# NUMBER YNEXT_TIME DATE Y
Status列中各值的意义:
Current:当前组。
Inactive:实例恢复已不需要这组日志了
Activie:这组日志是活动的,但非当前组。例如正在归档。
Unused:此组从未被写过。是日志刚被添加到DB中的状态
SQL> desc v$logfile;Name Type Nullable Default Comments--------------------- ------------- -------- ------- --------GROUP# NUMBER YSTATUS VARCHAR2(7) YTYPE VARCHAR2(7) YMEMBER VARCHAR2(513) YIS_RECOVERY_DEST_FILE VARCHAR2(3) Y
Status列中各值的含义:
空白:此文件正在使用。
Stale:该文件内容是不完全的。
Invalid:该文件不可以被访问。例如刚建立
Deleted:该文件已不再有用
SQL> desc v$log_history;Name Type Nullable Default Comments----------------- ------ -------- ------- --------RECID NUMBER YSTAMP NUMBER YTHREAD# NUMBER YSEQUENCE# NUMBER YFIRST_CHANGE# NUMBER YFIRST_TIME DATE YNEXT_CHANGE# NUMBER YRESETLOGS_CHANGE# NUMBER YRESETLOGS_TIME DATE Y

7.2.2 增加日志组及其成员一个oracle数据库中,至少需要两个重做日志文件组,每个组包含一个或多个重做日志文件成员
1、添加新的重做日志文件组SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME---------- ---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- ----------- ------------ ----------- 1 1 70 52428800 512 1 NO INACTIVE 1389919 2013/12/9 1 1423244 2013/12/12 2 1 71 52428800 512 1 NO INACTIVE 1423244 2013/12/12 1443812 2013/12/13 3 1 72 52428800 512 1 NO CURRENT 1443812 2013/12/13 281474976710SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE---------- ------- ------- ---------------------------------------- --------------------- 1 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO01.LOG NO 2 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO02.LOG NO 3 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO03.LOG NOSQL> alter database add logfile ('D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_A.LOG','D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_B.LOG') size 20M;Database alteredSQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE---------- ------- ------- ---------------------------------------- --------------------- 1 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO01.LOG NO 2 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO02.LOG NO 3 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO03.LOG NO 4 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_A.LOG NO 4 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_B.LOG NOSQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME---------- ---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- ----------- ------------ ----------- 1 1 70 52428800 512 1 NO INACTIVE 1389919 2013/12/9 1 1423244 2013/12/12 2 1 71 52428800 512 1 NO INACTIVE 1423244 2013/12/12 1443812 2013/12/13 3 1 72 52428800 512 1 NO CURRENT 1443812 2013/12/13 281474976710 4 1 0 20971520 512 2 YES UNUSED 0 0
2、创建日志成员文件SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE---------- ------- ------- ---------------------------------------- --------------------- 1 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO01.LOG NO 2 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO02.LOG NO 3 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO03.LOG NO 4 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_A.LOG NO 6 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_B.LOG NO 5 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO05.LOG N
SQL> alter database add logfile member 'D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_C.LOG' to group 4;Database alteredSQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE---------- ------- ------- ---------------------------------------- --------------------- 1 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO01.LOG NO 2 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO02.LOG NO 3 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO03.LOG NO 4 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_A.LOG NO 6 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_B.LOG NO 5 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO05.LOG NO 4 INVALID ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_C.LOG NO7 rows selected
7.2.3 删除重做日志1、删除日志成员SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE---------- ------- ------- ---------------------------------------- --------------------- 1 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO01.LOG NO 2 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO02.LOG NO 3 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO03.LOG NO 4 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_A.LOG NO 6 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_B.LOG NO 5 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO05.LOG NO 4 INVALID ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_C.LOG NO7 rows selectedSQL> alter database drop logfile member 'D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_C.LOG';Database alteredSQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE---------- ------- ------- ---------------------------------------- --------------------- 1 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO01.LOG NO 2 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO02.LOG NO 3 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO03.LOG NO 4 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_A.LOG NO 6 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_B.LOG NO 5 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO05.LOG NO6 rows selectedSQL> host del D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_C.LOG;
2、删除日志文件组删除日志组时需注意一下几点:a、一个数据库至少需要两个日志组,删除时不能超过这个限制b、只能删除处于inactive状态的日志组,如果要删除处于current状态的日志组,必须执行一个手动切换日志,将它切换到inactive状态。c、如果数据库处于归档模式,在删除重做日志组前必须确定它已经被归档
SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE---------- ------- ------- ---------------------------------------- --------------------- 1 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO01.LOG NO 2 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO02.LOG NO 3 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO03.LOG NO 4 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_A.LOG NO 6 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_B.LOG NO 5 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO05.LOG NO6 rows selectedSQL> alter database drop logfile group 6;Database alteredSQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE---------- ------- ------- ---------------------------------------- --------------------- 1 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO01.LOG NO 2 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO02.LOG NO 3 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO03.LOG NO 4 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO04_A.LOG NO 5 ONLINE D:\\APP\\ACIC\\ORADATA\\STONE\\REDO05.LOG NO
3、清空重做日志将日志文件中的内容清空SQL> alter database clear logfile group 5;Database altered
7.2.4 更改重做日志的位置或名称
mv redo01.log redo01_01.log
ora11g@RHEL53 /oracle/u02/oradata/ora11g$mv redo02.log redo02_01.log
ora11g@RHEL53 /oracle/u02/oradata/ora11g$mv redo03.log redo03_01.log

GROUP# STATUS TYPE MEMBER IS_
---------- ------- -------------------- ------------------------------------------ ---
1 ONLINE /oracle/u02/oradata/ora11g/redo01.log NO
2 ONLINE /oracle/u02/oradata/ora11g/redo02.log NO
3 ONLINE /oracle/u02/oradata/ora11g/redo03.log NO
4 ONLINE /oracle/u02/oradata/ora11g/redo04_01.log NO
4 ONLINE /oracle/u02/oradata/ora11g/redo04_02.log NO
1 ONLINE /oracle/u02/oradata/ora11g/redo01_02.log NO
2 ONLINE /oracle/u02/oradata/ora11g/redo02_02.log NO
3 ONLINE /oracle/u02/oradata/ora11g/redo03_02.log NO

NotConnected@>alter database rename file '/oracle/u02/oradata/ora11g/redo01.log' to '/oracle/u02/oradata/ora11g/redo01_01.log';

NotConnected@>alter database rename file '/oracle/u02/oradata/ora11g/redo02.log' to '/oracle/u02/oradata/ora11g/redo02_01.log';

NotConnected@>alter database rename file '/oracle/u02/oradata/ora11g/redo03.log' to '/oracle/u02/oradata/ora11g/redo03_01.log';

alter database open;

sys@ora11g> select * from v$log;

sys@ora11g> select * from v$logfile order by 1,4;

8 rows selected.
alter database backup controlfile to trace;

7.3 管理归档日志文件归档日志文件保存重做日志文件oracle有两种日志模式:第一种:非归档日志模式(noarchivelog),原日志文件内容会被新的日志内容覆盖第二种:归档日志模式(archivelog),先对原日志文件进行归档存储,归档未完成之前不允许覆盖原有日志
1、归档模式(archivelog)归档日志的作用:
a.恢复数据库
b.更新备用数据库
c.使用logMiner获得数据库的历史信息
归档模式:
a.会对在线重做日志进行归档,因此被填满的日志文件只有被归档后才能使用。
b.在出现操作系统或磁盘故障时只要有数据库备份+在线和归档日志文件就能保证数据库能恢复所有已提交事务。
c.如果保存有归档日志,当数据处于开启状态时也能备份。
d.只要不断往备用库中应用归档日志就能保持备用库是最新的
归档操作由后台进程ARCN自动完成
2、非归档模式(noarchivelog)非归档模式:
a.不能对在线重做日志进行归档,因此被填满的日志文件当出现日志交换时将会被LGWR再使用和覆盖,而不是等被填满的日志文件归档后才能再使用。
b.不能使用在线表空间备份,只能使用备份整个数据库方式恢复已关闭的数据库,因此在非归档模式下,要定期进行整库备份。
7.3.2 管理归档操作默认情况下,数据库处于非归档日志模式显示当前数据库的归档信息:SQL> archive log list;数据库日志模式 非存档模式自动存档 禁用存档终点 D:\\app\\acic\\product\\11.2.0\\dbhome_3\\RDBMS最早的联机日志序列 70当前日志序列 72
1、日志模式切换(1)查看当前日志模式SQL> select log_mode from v$database;LOG_MODE------------------------------------NOARCHIVELOG
(2)关闭并重新启动数据库改变日志操作模式必须在mount状态下进行改变日志模式时,关闭数据库不能使用shutdown abort命令SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> startup mount;ORACLE instance started.Total System Global Area 342388736 bytesFixed Size 2213216 bytesVariable Size 209717920 bytesDatabase Buffers 125829120 bytesRedo Buffers 4628480 bytesDatabase mounted.
(3)改变日志模式SQL> alter database archivelog;Database altered.(4)打开数据库SQL> alter database open;Database altered.SQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination /ora/app/oracle/product/11.2.0/dbhome_1/dbs/archOldest online log sequence 16Next log sequence to archive 18Current log sequence 18
2、配置归档进程如果oracle系统的后台进程LGWR经常出现等待的状态,可以考虑启动多个ARCN进程,修改系统初始化参数log_archive_max_processes调整启动ARCN进程数量SQL> col name for a20;SQL> col type for a10;SQL> show parameter log_archive_max_processes;NAME TYPE VALUE------------------------------------ ---------- ------------------------------log_archive_max_processes integer 4
SQL> alter system set log_archive_max_processes=3;System altered.SQL> show parameter log_archive_max_processes;NAME TYPE VALUE------------------------------------ ---------- ------------------------------log_archive_max_processes integer 3
7.3.3 设置归档文件位置归档目标在初始化参数log_archive_dest_n中进行设置,其中n为1到31的整数,即可以为数据库指定1到31个归档目标。
1、本地归档目标(location )SQL> alter system set log_archive_dest_1='location=/ora/app/oracle/oradata/stone1/archive1';System altered.SQL> alter system set log_archive_dest_2='location=/ora/app/oracle/oradata/stone1/archive2 optional';System altered.SQL> alter system set log_archive_dest_3='location=/ora/app/oracle/oradata/stone1/archive3 mandatory';System altered.SQL> alter system set log_archive_dest_4='location=/ora/app/oracle/oradata/stone1/archive4 mandatory reopen=400';System altered.
选项含义如下:optional:默认选项,无论归档是否执行成功,都可以覆盖重做日志文件mandatory:强制进行归档,只有在归档成功后,重做日志文件才能被覆盖reopen:设定重新归档的时间间隔,默认值为300秒,reopen属性必须跟在mandatory选项后
使用初始化参数log_archive_min_success_dest控制本地成功归档的“最小个数”,如果成功生成的归档日志文件少于“最小个数”,那么重做日志将不能被覆盖。SQL> show parameter log_archive_min_succeed_dest;NAME TYPE VALUE------------------------------------ ---------- ------------------------------log_archive_min_succeed_dest integer 1SQL> alter system set log_archive_min_succeed_dest=2;System altered.SQL> show parameter log_archive_min_succeed_dest;
NAME TYPE VALUE------------------------------------ ---------- ------------------------------log_archive_min_succeed_dest integer 2
使用初始化参数log_archive_dest_state_n设置归档位置是否可用为enable,表示激活相应的归档位置为defer,表示禁用相应的归档位置SQL> show parameter log_archive_dest_state_4;NAME TYPE VALUE------------------------------------ ---------- ------------------------------log_archive_dest_state_4 string enableSQL> alter system set log_archive_dest_state_4=defer;System altered.SQL> show parameter log_archive_dest_state_4;NAME TYPE VALUE------------------------------------ ---------- ------------------------------log_archive_dest_state_4 string DEFER
一般归档日志所在的磁盘损坏或填满时,数据库管理员应该暂时禁用该归档位置在设置禁用归档位置时,要求参数log_archive_dest_state_n的序号n的值要大于log_archive_min_succeed_dest的值
2、远程归档目标(server)SQL> alter system set log_archive_dest_5='service=192.168.1.103';System altered.
7.3.4 查看归档信息两种方法:(1)使用数据字典和动态性能视图常用的包含各种归档信息的数据字典和动态性能视图如下表:
字典与视图说明
v$database用于查询数据库是否处于归档状态
v$archived_log包含控制文件中所有已经归档的日志信息
v$archive_dest包含所有归档目标信息
v$archive_processes包含已经启动的ARCN进程状态信息
v$backup_redolog包含所有已经备份的归档日志信息
(2)使用archive log list命令SQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination /ora/app/oracle/oradata/stone1/archive4Oldest online log sequence 17Next log sequence to archive 19Current log sequence 19
本文出自 “石头记” 博客,请务必保留此出处http://stonebox.blog.51cto.com/5409313/1357206
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: