Oracle 日志与重做日志的区别是怎样的

Oracle 日志与重做日志的区别是怎样的,第1张

一、Oracle中的几类日志文件

Redo log files -->联机重做日志

Archive log files -->归档日志

Alert log files -->告警日志

Trace files -->跟踪日志

user_dump_dest -->用户跟踪日志

backupground_dump_dest -->进程跟踪日志

--查看后台进程相关目录

SQL>show parameter dump

NAME TYPEVALUE

------------------------------------ ----------- ------------------------------

background_core_dump string partial

background_dump_dest string /u01/app/oracle/admin/orcl/bdump

core_dump_dest string /u01/app/oracle/admin/orcl/cdump

max_dump_file_size string UNLIMITED

shadow_core_dump string partial

user_dump_dest string /u01/app/oracle/admin/orcl/udump

关于Oracle 常用目录及路径请参考:Oracle 常用目录结构(10g)

关于Oracle 体系结构请参考:Oracle实例和Oracle数据库(Oracle体系结构)

二、联机重做日志的规划管理

1.联机重做日志

记录了数据的所有变化(DML,DDL或管理员对数据所作的结构性更改等)

提供恢复机制(对于意外删除或宕机利用日志文件实现数据恢复)

可以被分组管理

2.联机重做日志组

由一个或多个相同的联机日志文件组成一个联机重做日志组

至少两个日志组,每组一个成员(建议每组两个成员,分散放开到不同的磁盘)

由LGWR后台进程同时将日志内容写入到一个组的所有成员

LGWR的触发条件

在事务提交的时候(COMMIT)

Redo Log Buffer 三分之一满

Redo Log Buffer 多于一兆的变化记录

在DBWn写入数据文件之前

3.联机重做日志成员

重做日志组内的每一个联机日志文件称为一个成员

一个组内的每一个成员具有相同的日志序列号(log sequence number),且成员的大小相同

每次日志切换时,Oracle服务器分配一个新的LSN号给即将写入日志的日志文件组

LSN号用于唯一区分每一个联机日志组和归档日志

处于归档模式的联机日志,LSN号在归档时也被写入到归档日志之中

4.日志文件的工作方式

日志文件采用按顺序循环写的方式

当一组联机日志组写满,LGWR则将日志写入到下一组,当最后一组写满则从第一组开始写入

写入下一组的过程称为日志切换

切换时发生检查点过程

检查点的信息同时写入到控制文件

5.联机日志文件的规划

总原则

分散放开,多路复用

日志所在的磁盘应当具有较高的I/O

一般日志组大小应满足自动切换间隔至少15-20分钟左右业务需求

建议使用rdo结尾的日志文件名,避免误删日志文件。如redo1.rdo,redo2.rdo

规划样例

Redo Log Group1 Redo Log Group2 Redo Log Group3

Member1 Member1 Member1-->Physical Disk 1

Member2 Member2 Member2-->Physical Disk 2

Member3 Member3 Member3-->Physical Disk 3

6.日志切换和检查点切换

ALTER SYSTEM SWITCH LOGFILE --强制手动切换

ALTER SYSTEM CHECKPOING

强制设置检查点间隔

ALTER SYSTEM SET FAST_START_MTTR_TARGET = n

7.添加日志文件组

ALTER DATABASE ADD LOGFILE [GROUP n]

('$ORACLE_BASE/oradata/u01/logn1.rdo',

'$ORACLE_BASE/oradata/u01/logn2.rdo')

SIZE mM

8.添加日志成员

ALTER DATABASE ADD LOGFILE MEMBER

'$ORACLE_BASE/oradata/u01/logn1.rdo' TO GROUP 1,

'$ORACLE_BASE/oradata/u01/logn2.rdo' TO GROUP 2

9.删除日志成员

不能删除组内的唯一一个成员

不能删除处于active 和current 状态组内的成员

删除处于active 和current 状态组内的成员,应使用日志切换使其处于INACTIVE状态后再删除

对于组内如果一个成员为NULL 值,一个为INVALID,且组处入INACTIVE,仅能删除INVALID状态成员

删除日志成员,物理文件并没有真正删除,需要手动删除

删除日志文件后,控制文件被更新

对于处于归档模式下的数据库,删除成员时确保日志已被归档,查看v$log视图获得归档信息

ALTER DATABASE DROP LOGFILE '$ORACLE_BASE/oradata/u01/logn1.rdo'

10.删除日志组

一个实例至少需要两个联机日志文件组

活动或当前的日志组不能被删除

组内成员状态有NULL 值或INVALID状态并存,组不可删除

日志组被删除后,物理文件需要手动删除(对于非OMF)

ALTER DATABASE DROP LOGFILE GROUP n

11.日志的重定位及重命名

所需权限

ALTER DATABASE 系统权限

复制文件到目的位置 *** 作系统权限(写权限)

CURRENT状态组内的成员不能被重命名

建议该行为之前备份数据库

重命名或重定位之后建议立即备份控制文件

重定位及重命名的两种方法

添加一个新成员到日志组,然后删除一个旧的成员

使用ALTER DATABASE RENAME FILE 命令(不区分归档与非归档模式)

复制联机日志文件到新路径:ho cp <oldfile><newfile>

执行ALTER DATABASE RENAME FILE '<oldfile>' TO '<newfile>'

对于处于CURRENT状态的需要改名且不切换的情况下

办法是切换到MOUNT状态下再执行上述 *** 作

12.清空日志文件组

ALTER DATABASE CLEAR LOGIFLE GROUP n

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n --使用unarchived 避免归档

13.日志周期循环及切换分析

Group 1 Group 2 Group 3

Current Inactive Inactive

---------- Log Switch -------------

Active Current Inactive

---------- Log Switch -------------

Active Active Current

---------- Log Switch -------------

Current Inactive Inactive

--Active 和Current 称之为在一个循环周期之内(按顺序写日志)

--Inactive 称为一个周期之外(一个新的循环)

--新一轮循环开始如在归档状态则先归档再清空,否则直接清空日志

--数据库启动时Active 和Current 状态的日志不能丢失,否则出错

14.日志的监视

查看日志视图中的物理日志文件是否存在、位置、大小等

SELECT 'ho cp '||member FROM v$logfile

查看日志文件所处的磁盘空间是否足够

SQL>ho df -h

查看组内是否存在多个成员,如为单一成员应考虑增加日志成员

日志切换的间隔时间,应满足15-20分钟业务需求,如果切换间隔很短,应当增加日志文件的大小

增加方法,先删除日志组,再重建该组(对于current和active的需要切换再做处理)

--查看切换时间间隔(下面的示例中为手工切换的时间,不作考虑)

SQL>SELECT TO_CHAR(first_time,'yyyy-mm-dd hh24:mi:ss'),group# FROM v$log

TO_CHAR(FIRST_TIME, GROUP#

------------------- ----------

2010-07-20 09:43:18 1

2010-07-19 22:44:30 2

2010-07-19 22:44:32 3

15.日志的异常处理(参照演示中9小节)

不一致的情况(启动时)

ALTER DATABASE CLEAR LOGFILE GROUP n

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n

1。alter tablespace users add datafile '/userdata03.dbf' size 50m2。alter tablespace users set datafile '/userdata03.dbf' autoextend on next 5m maxsize 100m3。alter tablespace users offline *** 作系统下修改userdata03.dbf更名userdata04.dbf alter tablespace users rename datafile '/userdata03.dbf' to '/userdata04.dbf' alter tablespace users online4。alter database backup controlfile to '/controlfile_bak'5。alter database add logfile group 2 ('/redo4a.log','/redo4b.log') size 5m6。alter database add logfile member '/redo4c.log' to group 2后面问题也能回答,但是不爱写了太长了。其中有几个问题需要说明下。一、我手里没环境,只是按照记忆直接写的,有可能有细微错误;二、你没有说你的oracle版本,具体版本不同可能对应语句会有变化;三、特别是最后的7,8跟数据库版本更有关系。你问的不具体, *** 作系统?数据库版本?再有,告诉你一个办法可以自己方便查询命令,你安装个10g的版本,然后登陆db console。都是界面方式的处理,而且可以去执行你问题里面的 *** 作,在DB CONSOLE里面可以看见每个执行命令的SQL语句。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/bake/11935846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存