oracle体系结构梳理---redo和undo文件解析

回滚段分类

1.系统回滚段

系统回滚段存放在系统表空间,用于记录系统数据字典的UNDO---不可以操作,是oracle自己操作的DML 

2.非系统回滚段

undo表空间 用于存放非系统数据字典对象的UNDO

3.延迟回滚段(defferd rollback segment

system专门一块区域存储offline之后的未提交数据,在online之后回滚段即会被撤销

select * from v$waitstat; ---save undo block   segment header 延迟回滚段的块和块头

undo表空间可以存在多个,但是只能使用一个

创建undo表空间

create undo tablespace undotbs02 datafile '/u01/oradata/orcl/undotbs2.dbf' size 20autoextend on.

裸设备不能自动扩展,可以增加数据文件

alter tablespace undotbs02 add datafile '/u01/oradata/orcl/undo2.dbf' size 20autoextend on;

drop tablespace undotbs2 INCLUDING CONTENTS AND DATAFILES;  ---因为删除表空间一般只是逻辑上的删除,所以该语句删除表空间时可以将物理文件一起删除掉

要想删除一个活动的UNDO TABLESPACE(当前undo),必须进行UNDO  TABLESPACE切换

alter system set undo_tablespace = undotbs2;---切换undo表空间

select tablespace_name,file_name,bytes/1024/1024,autoextensible from dba_data_files;

 

--- undo相关的数据字典和动态性能视图

决定undo tablespace大小的三个因素

1. db_block_size参数的大小

8K

2. UNDO_RETENTION参数的大小

3每秒钟产生的undo block的数量

select max(undoblks / ((end_time-begin_time)*24*3600)) from v$undostat;--峰值

select sum(undoblks)/sum((end_time-begin_time)*24*3600from v$undostat;---求平均值

---v$undostat V$undostat是最重要的UNDO数据字典

desc V$undostat

MAXQUERYLEN:这段统计时间内查询最长的时间,非常重要的值

◎  MAXQUERYID:这段统计时间内查询最长的时间SQLID,通过它来查看SQL语句。--根据sql_idv$sqlarea中可以查到具体的sql语句

---DBA_ROLLBACK_SEGS UNDO段的基本信息的数据字典视图

 SEGMENT_NAME 

 OWNER 

 TABLESPACE_NAME

 SEGMENT_ID

 FILE_ID

 BLOCK_ID

 INITIAL_EXTENT

 NEXT_EXTENT

 MIN_EXTENTS

 MAX_EXTENTS

 PCT_INCREASE

 STATUS

 INSTANCE_NUM

 RELATIVE_FNO

---V$TRANSACTION 事务表动态性能视图,它记录了事务信息,及回滚的数据量

---DBA_UNDO_EXTENTS 显示了回滚表空间的每个区的信息   SEGMENT_NAME   TABLESPACE_NAME  SEGMENT_ID FILE_ID BLOCK_ID

---V$rollstat 记录 LATCH WAITS GETS 等信息

---dba_hist_undostat 超过四天的数据可能会放在这里面

-----=================================================================================

redo log文件主要用于恢复

select max(lebsz) from x$kccle;---块大小512K和数据文件块大小不一样,所以在备份时不能一起备份

select distinct block_size from v$archived_log;----归档日志文件也是512M

redo log文件特点:

1它记录着所有的数据改变.

2提供了一种恢复机制

3它有组的概念,一定是成组出现,称为redo log日志组

4必须至少有两组联机重做日志文件

5.LGWR进程来写入

6组里的redo log文件称为member, 组里的每个成员有相同的log sequence number(LSN)和相同的大小.

--多路复用

1)推荐至少两个组,每组至少两个redo log成员,两个成员分别放在不同的磁盘上。

2)每组里面所有的成员,都包含相同的信息,而且大小相同。

3)每组里面所有的成员,被LGWR同时更新。

4)每组应该包含同样成员数量,和同样的文件大小,对称。

ALTER SYSTEM SWITCH LOGFILE;---手动切换日志组,会建立一个日志检查点,是增量检查点,不是完全检查点(在shutdown immediate normal关闭数据库才会触发完全检查点)

select GROUP#, SEQUENCE#,MEMBERS,ARCHIVED,STATUS from v$log; ---检查切换的效果

status=CURRENT 当前日志组

 

ACTIVE -->

Log is active but is not the current log. It is needed for crash recovery. It  may be in use for block recovery. It may or may not be archived.

联机重做日志组是活动的,但是并非当前联机重做日志组,崩溃恢复需要该状态的日志,它可能用于块恢复,它可能已经归档也可能未归档

UNUSED---

表明从未对联机重做日志组进行写入,这种状态的日志文件要么而是刚增加的, 要么是当日志不是current redo logRESETLOGS操作后的状态

INACTIVE--

表明实例恢复不再需要联机重做日志组,它可能已经归档也可能未归档。

CLEARING--

表明在ALTER DATABASE CLEAR LOGFILE 命令后正在将该日志重建为一个空日志,日志清除后其状态更改为UNUSED

CLEARING_CURRENT --

表明正在清除当前日志文件中的已关闭线程,如果切换时发生某些故障,如写入新日志标题时的I/O错误,则该日志可以停留在该状态。

增加redo log文件

select * from v$logfile;

STALE 

表明该文件内容不完全,例如正在添加一个日志文件成员

DELETED

该文件已不再使用

select * from v$log;

alter database add logfile group 7 ('E:\APP\ADMINISTRATOR\ORADATA\ORG11G\REDO04.LOG'size 50M;

select * from v$log;

alter database add logfile member 'E:\APP\ADMINISTRATOR\ORADATA\ORG11G\REDO04a.LOG' to group 7;---使用逗号可以同时向多个组增加多个成员

先增加组再增加组成员,删除则要先删除成员再删除组

删除一个redo log成员文件

alter database drop logfile member 'E:\APP\ADMINISTRATOR\ORADATA\ORG11G\REDO04.LOG';---组中的最后一个成员不能被删除

至少要保留两组,每组至少一个文件。否则无法删除。不能删除当前组 ,该文件的信息为归档完成

在删除日志文件时,物理文件并不能删除,只是删除了逻辑上的联系

删除日志组成员注意事项:

不能删除组内的最后一个有效成员

如果该组是当前组,那么在删除该成员之前,必须强制日志文件切换(即不能删除当前组成员)

如果数据库正运行在 ARCHIVELOG 模式下,并且未将该成员所属日志文件组归档,那么不能删除该成员文件

在删除联机重做日志成员时并未删除操作系统文件,需要手动删除。

---删除日志文件组

alter database drop logfile group 7;

删除日志组注意事项:

一个数据库至少2个日志组,不能删除完后少于2个日志组。

活动或当前日志组不允许删除

如果数据库运行在 ARCHIVELOG 模式下,并且日志文件组未归档,那么该组无法删除。 

当删除日志组时,文件没有正真的删除,需要人工删除

清除redo log文件

1. DROP LOGFILE MEMBER

2. ADD LOGFILE MEMBER

select * from v$log;

alter database clear logfile group 1;-----变成unused状态

alter database clear unarchived logfile group 1;----清除的时候不归档

重命名,或重分配redo log文件

第一步:shutdown  关闭数据库

第二步:在操作系统命令行方式下,将文件拷贝到相应的位置,

第三步:startup mount

alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORG11G\REDO04.LOG' to   'E:\APP\ADMINISTRATOR\ORADATA\ORG11G\REDO04.RDO';

第五步:alter database open;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30018455/viewspace-1416123/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30018455/viewspace-1416123/

你可能感兴趣的:(oracle体系结构梳理---redo和undo文件解析)