回退段和重做日志缓冲区的区别和联系
数据库恢复原理

数据库恢复原理
数据库恢复原理是指通过一系列操作来将数据库从损坏、崩溃或意外删除的状态恢复到可用状态的过程。
数据库恢复的目标是保证数据的一致性和完整性,以及最大限度地减少数据丢失。
数据库恢复的原理主要包括三个阶段:日志重做、日志撤销和内存恢复。
首先是日志重做阶段,也称为前滚操作。
在此阶段,数据库系统会通过读取事务日志来找到那些未完成的事务,然后重新执行这些事务来恢复到崩溃前的状态。
在执行事务时,会将所有的修改操作都重新应用到数据库中,以确保数据的一致性。
接下来是日志撤销阶段,也称为回滚操作。
在此阶段,数据库系统会通过日志的反向操作来撤销那些已经提交但在崩溃前还未持久化到磁盘上的事务。
这样可以避免未完成的事务对数据库的影响。
最后是内存恢复阶段,也称为重启恢复。
在此阶段,数据库系统会重新初始化内存中的数据结构和缓存,以便重新接收和处理用户请求。
这一阶段的目标是将数据库恢复到一个可用的状态,使得用户可以正常地访问和操作数据库。
总的来说,数据库恢复原理是通过对事务日志的分析和应用,以及对数据库的重建和内存的恢复,来将数据库从损坏或崩溃的状态恢复到可用状态。
这样可以保证数据的一致性和完整性,并最大限度地减少数据丢失。
表空间(TABLESPACE)

表空间(TABLESPACE)表空间(TABLESPACE)是ORACLE数据库中最大的逻辑结构。
ORACLE数据库是由一个或多个表空间组成的。
它在物理上与磁盘上的数据文件相对应(一个表空间由一个或多个数据文件组成,但一个数据文件只能属于一个表空间)。
从物理上说数据库的数据被存放在数据文件中,而从逻辑上说是被存放在表空间中的。
数据库的逻辑配置实际上就是指表空间的配置。
一、表空间概述表空间是ORACLE数据库中最大的逻辑结构。
数据库的所有对象和方案都被逻辑的保存在表空间中。
(一)表空间的特性与作用数据库管理系统(DBMS)是建立在操作系统(OS)基础上的,它的数据也必须存储在各个文件中,如数据文件、重做日志文件、归档日志文件等。
表不是文件,表不是空间。
表空间是组织结构和分配空间的逻辑结构。
除了数据文件之外,控制文件、重做日志文件、归档日志文件等其他文件都不属于任何表空间。
表空间的特性如下:1.一个数据库可以有多个表空间。
可以在数据库中创建、删除表空间;2.一个表空间只属于一个数据库;3.一个表空间必须要有一个数据文件;4.一个表空间的大小等于其中所有数据文件的大小之和。
数据库的大小等于其中所有表空间的大小之和;5.表空间可以被联机和脱机。
SYSTEM表空间不能被脱机;6.表空间可以在读写、只读状态之间切换;7.每个表空间由一个或多个物理存在的操作系统的数据文件组成。
这种数据文件可以具有固定的大小,或允许其自动变大。
可以在表空间中添加、删除数据文件;8.方案对象、表、索引的数据都被存储在表空间的数据文件中。
一个数据文件存储不下,就存储在另一个数据文件中,只要该数据文件是本表空间中的就可以;9.一个用户默认使用一个表空间,但他的不同方案对象的数据可以被存储在不同表空间中;10.一个用户使用的表空间的数量是有一定配额的,不能超出这个配额;11.可以根据使用目的,创建不同类型的表空间,如永久表空间、临时表空间、撤销表空间、大表空间等。
数据库复习要点2

SQL部分复习要点每个事务的处理必须满足ACID原则,即原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability.SQL中可被锁定的资源从小到大分别是行、页、扩展盘区、____表_________ 和______数据库___________。
Sql提供了6中锁定模式分别是:排他、共享、更新、意向、架构、键范围如果允许用户对视图进行更新和插入操作,但又要防止用户将不符合视图约束条件的记录添加到视图,应当在定义视图时指定下列哪个子句?在表中插入数据的语句是在表中创建视图的语句是为了去除结果集中的重复的行,可在select语句中使用以下哪个关键字?下列关于游标的说法,不正确的是(d )A)是从数据表中提取出来的数据B)以临时表的形式存放在内存中C)在游标中有一个数据指针D)利用goto语句可以移动该指针利用“fetch”游标的操作不包括(C )A)openB)fetchC)quitD)close12、不属于存储过程的优点有(D )A)存储过程的能力大大增强了SQL语言的功能和灵活性。
B)可以降低网络的通信量C)在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案D)存储过程可以使没有权限的用户不能直接或间接存取数据库数据,从而保证数据的安全。
系统安全性是指在系统级控制数据库的存取和使用的机制,包含:⑴有效的用户名/口令的组合。
⑵一个用户是否授权可连接数据库。
⑶用户对象可用的磁盘空间的数量。
⑷用户的资源限制。
⑸数据库审计是否是有效的。
⑹用户可执行哪些系统操作。
1.掌握sqlserver2005中用户的创建、删除和权限管理方法.(1)创建SQL SERVER登录名例如:以命令方式创建SQL SERVER认证方式登录名,登录名使用yan,密码是123456Create login yan with password=’123456’;(2)用户的创建例如:使用命令方式创建YGGL的数据库用户,用户名是yan,登录名是yanUse ygglGoCreate user yan for login yan(3)删除用户例如:使用命令方式删除YGGL的数据库用户yanUse ygglGoDrop user yan(4) 权限授予用户例如:以命令方式授予用户yan在YGGL数据库上salary表中的select,delete 权限。
第二章Oracle体系结构

2.表空间的使用
在数据库中使用多个表空间具有如下优势: (1)能够将数据字典与用户数据分离开来,避免 由于字典对象和用户对象保存在同一个数据文件 中而产生的1/0冲突。 (2)能够将回退数据与用户数据分离开来,避免 由于硬盘损坏而导致永久性的数据丢失。 (3)能够将表空间的数据文件分散保存到不同硬 盘上,平均分布物理1/0操作。
(4)LGWR日志文件写进程 该进程是日志缓冲区的管理进程,负责把日志缓冲区中 的日志项写入磁盘上的日志文件中。 (5)ARCH归档进程(archiver process) 该进程把已经填满的在线日志文件拷贝到一个指定的存 储设备上。 (6)RECO恢复进程 该进程是在具有分布式选项时使用的一个进程,主要用 于解决引用分布式事务时所出现的故障。 (7)LCKN封锁进程
2.4.2 进程
进程又称任务,是操作系统中一个极为重要的 概念。一个进程执行一组操作,完成一个特定 的任务。对Oracle数据库管理系统来说,进程由 用户进程、服务器进程和后台进程所组成。 进程与程序的区别在于前者是一个动态概念, 后者是一个静态实体;程序仅仅是指令的有序 集合,而进程则强调执行过程。进程可以动态 地创建,完成任务后即会消亡。
2.2.4 数据库块
数据库块也称逻辑块或Oracle块,它对应 磁盘上一个或多个物理块,它的大小由初 始化参数db_block_size(在文件init.ora中) 决定,典型的大小是2k。
Pckfree和Pctused两个参数用来优化数据 块空间的使用。 PCTFREE : 块 中 保 留 用 于 UPDATE 操作的空间百分比,当数据占用的空间达 到此上限时,新的数据将不能再插入到此 块中; PCTUSED:指定块中数据使用空间 的最低百分比;
oracle常见等待事件及处理方法

我们可以通过视图v$session_wait来查看系统当前的等待事件,以及与等待事件相对应的资源的相关信息看书笔记db file scattered read DB ,db file sequential read DB,free buffer waits,log buffer space,log file switch,log file sync我们可以通过视图v$session_wait来查看系统当前的等待事件,以及与等待事件相对应的资源的相关信息,从而可确定出产生瓶颈的类型及其对象。
v$session_wait的p1、p2、p3告诉我们等待事件的具体含义,根据事件不同其内容也不相同,下面就一些常见的等待事件如何处理以及如何定位热点对象和阻塞会话作一些介绍。
<1> db file scattered read DB 文件分散读取(太多索引读,全表扫描-----调整代码,将小表放入内存)这种情况通常显示与全表扫描相关的等待。
当全表扫描被限制在内存时,它们很少会进入连续的缓冲区内,而是分散于整个缓冲存储器中。
如果这个数目很大,就表明该表找不到索引,或者只能找到有限的索引。
尽管在特定条件下执行全表扫描可能比索引扫描更有效,但如果出现这种等待时,最好检查一下这些全表扫描是否必要。
因为全表扫描被置于LRU(Least Recently Used,最近最少适用)列表的冷端(cold end),所以应尽量存储较小的表,以避免一次又一次地重复读取它们。
==================================================该类事件的p1text=file#,p1是file_id,p2是block_id,通过dba_extents即可确定出热点对象(表或索引)select owner,segment_name,segment_typefrom dba_extentswhere file_id = &file_idand &block_id between block_id and block_id + &blocks - 1;==================================================<2> db file sequential read DB 文件顺序读取(表连接顺序不佳-----调整代码,特别是表连接)这一事件通常显示单个块的读取(如索引读取)。
ORACLE11g试题答案(陈冬亮)

目录第一章 Oracle 11g 介绍......................................... 错误!未定义书签。
第二章 ORACLE 11g 的体系结构................................... 错误!未定义书签。
第三章 ORACLE 11g 的数据库管理................................. 错误!未定义书签。
第四章 ORACLE 11g 的表空间管理................................. 错误!未定义书签。
第五章 ORACLE 11g 的表管理..................................... 错误!未定义书签。
第六章 ORACLE 11g 的数据查询................................... 错误!未定义书签。
第七章 ORACLE 数据的基本操作................................... 错误!未定义书签。
第八章索引 ................................................... 错误!未定义书签。
第九章视图 ................................................... 错误!未定义书签。
第十章 PL/SQL基础............................................. 错误!未定义书签。
第十一章存储过程与函数........................................ 错误!未定义书签。
第十二章触发器 ............................................... 错误!未定义书签。
第十三章游标 ................................................. 错误!未定义书签。
操作系统-缓冲区管理

操作系统-缓冲区管理操作系统缓冲区管理在计算机操作系统中,缓冲区管理是一个至关重要的组成部分。
它就像是一个默默工作的协调员,在提高系统性能、优化资源利用方面发挥着不可或缺的作用。
想象一下,你正在进行一场繁忙的文件传输操作。
数据源源不断地从一个地方流向另一个地方,如果没有缓冲区的存在,这个过程可能会变得异常混乱和低效。
缓冲区就像是一个临时的存储区域,它为数据的流动提供了一个缓冲的空间,使得数据的传输更加平稳和有序。
缓冲区管理的主要任务之一是解决设备之间速度不匹配的问题。
比如说,CPU 的处理速度通常要远远快于输入输出设备的速度。
如果没有缓冲区,CPU 可能会因为等待慢速设备而浪费大量的时间,导致整个系统的效率低下。
而缓冲区的存在可以让 CPU 在处理当前数据的同时,输入输出设备在缓冲区中准备后续的数据,从而实现了并行操作,大大提高了系统的性能。
缓冲区的类型多种多样,常见的有单缓冲区、双缓冲区和循环缓冲区。
单缓冲区是最简单的一种形式,只有一个缓冲区用于数据的存储和传输。
当数据被写入缓冲区时,必须等待缓冲区被清空后才能再次写入,这在一定程度上限制了数据传输的效率。
双缓冲区则在单缓冲区的基础上进行了改进,它有两个缓冲区。
一个用于数据的输入,另一个用于数据的输出。
这样,当一个缓冲区正在被使用时,另一个缓冲区可以准备新的数据,从而提高了数据处理的效率。
循环缓冲区则是一种更加灵活和高效的方式。
它将缓冲区看作一个环形的存储空间,当数据到达缓冲区的末尾时,会自动回到开头继续存储。
这种方式可以有效地利用缓冲区的空间,避免了数据的覆盖和丢失。
在缓冲区管理中,还有一个重要的概念是缓冲区的置换策略。
当缓冲区已满,而新的数据需要进入时,就需要选择一个合适的缓冲区中的数据进行置换。
常见的置换策略有先进先出(FIFO)、最近最少使用(LRU)和最不经常使用(LFU)等。
FIFO 策略就像是排队买东西,先进入队列的先处理。
这种策略实现简单,但可能会导致一些刚刚进入缓冲区但还未被使用的数据被置换出去,从而降低了系统的性能。
数据库物理设计经验谈

數据庫物理設計經驗談数据库物理分布设计作者: CCBZZP概述我们无论使用哪种数据库,无论怎样设计数据库,我想都会遵从一个原则:数据安全性和性能高效这两个主要方面,但是关于这两个方面的话题太多,在这里就不一一陈述,我只是从数据库物理分布设计方面和大家一起简单的探讨一下。
因为数据库良好的物理分布设计也是对数据安全性和性能高效影响比较大, 就象我们在建大楼之前一定要先打好地基一样。
現实中我们在应用各种不同数据库的时候,往往会忽略数据库的物理布局,只有在数据库性能遇到问题的时候才去考虑,但这是得不偿失的,这样一来不仅会导致与设计相关的问题出现,而且会影响性能的调整效果,所以我们在创建数据库之前先进行规划数据库的物理布局也是很必要的,这也符合人们常说的”磨刀不误砍柴工”的道理。
下面我就以Oracle为例从优化操作系统、磁盘布局优化和配置、数据库初始化参数的选择、设置和管理内存、设置和管理CPU、设置和管理表空间、设置和管理回滚段、设置和管理联机重做日志、设置和管理归档重做日志、设置和管理控制文件等几个方面作以陈述。
一. 优化操作系统为了获得最佳的服务器性能, 对操作系统的优化也是很必要的, 因为操作系统性能问题通常会涉及到进程管理、内存管理、调度等,所以用户需要确保有足够的I/O带宽、CPU的处理能力、交换空间来尽可能的降低系统时间。
如果应用程序在缓冲区出现过多的”忙”等待, 那么系统调用的进程将会增加, 虽然可以通过优化SQL语句等方法来降低调用的数目,但是这也是治病不治根的。
用户可以启动Oracle的初始化参数timed_statistics来增加系统调用的数目, 反之如果关闭此参数,那么系统调用的数目也会减少。
操作系统的缓存和Oracle自己的缓存管理是不相冲突的, 虽然它能消耗一定的资源, 但是它对性能还是有一定好处的, 因为一般所有数据库的I/O需要通过系统文件缓存来访问文件存储器。
Oracle的操作可能会用到许多的进程(有的系统叫线程), 所以用户应该确保所有Oracle的进程、后台进程、用户进程具有相同的优先级, 否则就会产生恶化的现象, 导致高优先级的进程等待低优先级的进程处理完毕释放出CPU资源后再处理, 更不能将Oracle的后台进程绑定到CPU中, 这样一来也会导致被绑定的进程被CPU资源饿死。
Oracle数据库-作业1-答案

第一次书面作业答案(作业请在2013.4.3之前提交)一、填空题1.Oracle数据库系统的物理存储结构主要由3类文件组成,分别为数据文件、日志文件、控制文件。
2.用户对数据库的操作如果产生日志信息,则该日志信息首先被存储在日志缓冲区,随后由LGWR 进程保存到日志文件组。
3.在物理上,一个表空间对应一个或多个数据文件。
4.在Oracle的逻辑存储结构中,根据存储数据的类型,可以将段分为数据段索引段、回退段、LOB段和临时段。
5.在Oracle的逻辑存储结构中,数据块是最小的I/O单元。
6.使用PROMPT 命令可以在屏幕上输出一行数据。
这种输出方式有助于在脚本文件中向用户传递相应的信息。
7.使用SPOOL 命令可以将查询结果保存在一个文件中。
8.通过使用COLUMN 命令,可以对控制查询结果集中列的显示格式。
9.在ORDER BY子句中,asc 关键字表示升序排列,desc 关键字表示降序排列。
10.子查询语句必须使用小括号括起来,否则无法判断子查询语句的开始和结束。
在子查询语句中,不能使用ORDER BY 子句。
二、选择题1.当用户与Oracle服务器的连接非正常中断时,哪个后台进程负责释放用户所锁定的资源?( D )A.DBWn B.LGWR C.SMON D.PMON 2.向数据库发出一个COMMIT命令提交事务时,哪个后台进程将重做日志缓冲区的内容写入联机重做日志文件?( B )A.DBWn B.LGWR C.CKPT D.CMMT 3.当启动Oracle实例时,默认情况下,哪个后台进程不会被启动?( D ) A.DBWn B.LGWR C.CKPT D.ARCn 4.在数据库逻辑结构中,按从大到小的次序排列是正确的是( B )。
A.表空间、区、段、块B.表空间、段、区、块C.段、表空间、区、块D.区、表空间、段、块5.在全局存储区SGA中,哪部分内存区域是循环使用的?( B )A.数据缓冲区B.日志缓冲区C.共享池D.大池6.解析后的SQL。
数据库习题

一、选择题。
1.在后台进程中,哪一个用于负责将重做日志缓冲区中的内容写入重做日志文件中BA. SMONB. DBWRC. LGWRD. PMON2.用来设置系统启动时重做日志缓冲区大小的初始化参数为 CA. SHARED_POOL_SIZEB. LARGE_POOL_SIZEC.LOG_SIZED.DB_BLOCK_SIZE3.下面哪一个不是数据库物理存储结构中的对象 DA. 数据文件B. 重作日志文件C. 控制文件D. 表空间原题:()用来记录和描述数据库的物理存储结构信息。
4.数据库至少需要几个控制文件 AA. 1个B. 2个C. 由初始化参数决定D. 4个5.一个基本的PL/SQL块中,SELECT子句必须和 B 配合使用A. INB. INTOC. TOD. ON6.当FETCH执行失败时,游标的属性值为TRUE的是 CA. %ISOPENB. %FOUNDC. %NOTFOUNDD. %ROWCOUNT7.你应在哪些列上建索引? CA. 列值少的列B. 经常修改的列C. 列值分布广泛的列D. 空值少的列8.启动实例STARTUP MOUNT的含义是 AA. 打开实例,并且打开数据库B. 打开实例,可以进行对用户数据库和数据字典的操作C. 打开实例,从控制文件中装载数据库的信息,但是数据库没有打开,还不能使用。
D. 打开实例,从初始化参数文件中装载数据库的信息,但是数据库没有打开,还不能使用9.在手工创建数据库的情况下,执行CREATE DATABASE语句前应该执行以下哪条命令来启动实例?BA. STARTUP INSTANCEB. STARTUP NOMOUNTC. STARTUP MOUNTD. STARTUP RESTRICT10.下面哪一个对象占用实际的存储空间? BA. 视图B. 索引C. 序列D. 存储过程11.用来设置系统启动时共享存储区(共享池)大小的初始化参数为AA.SHARED_POOL_SIZERGE_POOL_SIZEC.LOG_SIZED.DB_BLOCK_SIZE12.哪个命令属于隐含提交命令? BA. CREATEB. UPDATEC. COMMITD. SELECT13.开启或关闭具有自动扩展属性的数据文件可以使用关键字()。
redo 和undo区别

undo中数据的特点:
1。是数据修改前的备份,主要是保证用户的读一致性
2. 在事务修改数据时产生
3。至少保存到事务结束
undo数据的作用:
1.回滚(rollback)操作
2.实现读一致性与闪回查询
3.从失败的事务中还原数据
4. 非正常停机后的实例恢复
Redo作用:恢复已提交的事务,从而保证无论在介质失败还是实例失败时,都可以恢复用户已提交的事务,使数据库达到一致状态。
有时,会在ALERT中发现 Thread 1 cannot allocate new log, sequence 1466 Checkpoint not complete Current log# 3 seq# 1465 mem# 0: /home/ora10g/oradata/ora10g/redo03.log 这问题出现在系统尝试reuse online redo log file但是却没有可用的。可能是由于DBWR没有完成(Checkpoint not complete)或ARCH没有完成。
Redo功能的实现依赖于以下三个组件:
–Log Buffer
–LGWR
–联机重做日志文件和归档日志文件
commit 的开销存在两个因素:
A. 显然会增加与数据库的往返通信。如果每个记录都提交,生成的往返通信量就会大得多。
B. 每次提交时,必须等待redo写至磁盘。这会导致“等待”。在这种情况下,等待成为“日志文件同步”(log file sysnc)
提交事务(COMMIT)前完成的工作:
#在SGA区的回退缓存中生成该事务的回退条目。在回退条目中保存有该事务所修改的数据的原始版本。
Oracle体系结构(共79张PPT)

32
日期
第32页,共79页。
分析
在执行COMMIT操作时,后台进程LGWR要 开始工作,所以事务变化被记载到重做日志 中。因为只有在发出检查点时,才会将SCN 值写入控制文件和数据文件头部,所以控制 文件和数据文件的SCN值保持一致,并且存 放的是先前检查点的SCN值。
控制文件和数据文件的SCN值一致,与重做 日志不一致!
28
日期
第28页,共79页。
CKPT工作原理
当Oracle发出检查点时,系统会将检查点时刻的
SCN值写入到控制文件和数据文件头部,同时还会促
使DBWR进程将所有脏缓冲区写入到数据文件中。
29
日期
第29页,共79页。
检查点工作机制
在DBWR进程工作之前,LGWR进程首 先将重做日志缓冲区内容写入到重做日志文 件,即该时刻的SCN值会被写入重做日志。
Oracle使用的主要内存结构包括系统全局 区SGA和程序全局区PGA。
9
日期
第9页,共79页。
SGA区
日期
10 第10页,共79页。
数据高速缓存
保存最近从数据文件中读取的数据块。分为 脏缓存块、空闲缓存块和命中缓存块三类。
脏缓冲块:当执行INSERT、UPDATE以及 DELETE操作时,服务器进程修改数据高速 缓存的相应数据,此时缓冲区的内容与数据 文件中的内容不一致。
当CKPT进程工作的时候,会将当前时 刻的SCN值写入数据文件和控制文件。
在发出检查点时刻,数据文件、控制文 件和重做日志的SCN值完全一致。
30
日期
第30页,共79页。
系统恢复
当运行Oracle Server时,在访问数据 文件、控制文件和重做日志时,Oracle会定 期检查并比较每种文件的SCN值,确定文件 是否损坏、系统是否出现异常,最终确定系 统是否需要进行恢复。
自考数据库系统原理(第6章)(代码:4735)练习题6

练习题66.1 名词解释1)事务:事务是构成单一逻辑工作单元的操作集合。
要么完整地执行,要么完全不执行。
2)数据库的一致性:一个事务独立执行的结果,应保持数据库的一致性,即数据不会因事务的执行而遭受破坏。
3)数据库的可恢复性:系统能把数据库从被破坏、不确定的状态,恢复到最近一个正确的状态,DBMS的这种能力称为数据库的可恢复性(Recovery)4)并发操作:在多用户共享系统中,许多事务可能同时对同一数据进行操作,这种操作称为并发操作。
5)封锁:封锁是系统保证对数据项的访问以互斥方式进行的一种手段。
6)X锁:事务T对某数据加了X锁后,其他事务要等T解除X锁后,才能对这个数据进行封锁。
7)S锁:事务T对某数据加了S锁后,仍允许其他事务再对该数据加S锁,但在对该数据的所有S锁都解除之前决不允许任何事务对该数据加X锁。
8)调度:事务的执行次序称为“调度”。
9)串行调度:多个事务依次执行,称为事务的串行调度。
10)并发调度:利用分时的方法,同时处理多个事务,则称为事务的并发调度。
11)可串行化调度:如果一个并发调度的执行结果与某一串行调度的执行结果等价,那么这个并发调度称为“可串行化的调度”。
12)不可串行化调度:如果一个并发调度的执行结果不与某一串行调度的执行结果等价,那么这个并发调度称为“不可串行化调度”。
6.2事务的COMMIT语句和ROLLBACK语句各做什么事情?答:COMMIT(提交):语句表示事务执行成功地结束,此时告诉系统,DB要进入一个新的正确状态,该事务对DB的所有更新都已交付实施(写入磁盘)。
ROLLBACK(“回退”或“回滚”):语句表示事务执行不成功地结束,此时告诉系统,已发生错误,DB可能处在不正确的状态,该事务对DB的所有更新必须被撤消,DB应恢复该事务到初始状态。
6.3试叙述事务的四个性质,并解释每一个性质由DBMS的哪个子系统实现?每一个性质对DBS有什么益处?答:①事务的原子性:是指一个事务对DB的所有操作,是一个不可分割的工作单元。
【2018-2019】日志缓冲区-范文word版 (19页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==日志缓冲区篇一:回退段和重做日志缓冲区的区别和联系回退段和重做日志缓冲区的区别和联系一直被回退段和重做日志缓冲区所困扰,现在总算有些明白,现在总结一下,其中的错误请大家指正。
从名字上看就可以看出回退段主要用于UNDO的,而重做日志缓冲区主要用于REDO的。
Oracle崩溃恢复步骤如下:首先rolling forward 前滚:由于oracle failure,sga中的内存信息丢失了,但是online redo log中还是存储了transaction信息,包括commited or uncommited data。
可能这些修改信息并没有被oracle正确的来处理,包含两种情况:已经提交的还没有写入数据文件,或者没有提交的却被写入了数据文件。
针对已经提交的还没有写入数据文件就要发生前滚,在前滚过程中,smon会根据online redo log中的记录来完成对datafile的修改。
保证已经提交的数据已经写入数据文件。
(SMON负责系统监视已经一些系统清理及恢复工作,这些工作主要包括:1.清理临时空间以及临时段SMON负责在数据库启动时清理临时表空间中的临时段,或者一些异常操作过程遗留下来的临时段,例如,当创建索引过程中,创建期间分配给索引的Segment被标志为TEMPORARY,如果Create Index (或rebuild Index等)会话因某些原因异常中断,SMON负责清理这些临时段。
2.接合空闲空间在DMT(字典管理表空间)中,SMON负责把那些在表空间中空闲的并且互相是邻近的Extent接合成一个较大的空闲扩展区,这需要表空间的pctincrease设置为非零值。
3.执行实例恢复(Instance recovery)在实例恢复过程中,SMON的工作包括三个环节:应用Redo执行前滚、打开数据库提供访问、回滚未提交数据)接下来,前滚结束后,数据库正常open,此时用户可以正常连接,可以访问已经recover的commited data,但是对于那些属于uecoverable transaction的uncommited data,会被oracle 加锁,是不可以访问的。
Oracle 重做日志简介

Oracle 重做日志简介日志文件也称为重做日志文件(Redo Log File),重做日志文件用于记载事务操作所引起的数据库变化。
执行DDL或DML操作时,Oracle会将事务变化的信息顺序写入重做日志。
当丢失或损坏数据库中的数据时,Oracle会根据重做日志文件中的记录,恢复丢失的数据。
1.重做记录重做日志文件是由重做记录组成,重做记录又称为重做条目,它由一组修改向量组成。
每个修改向量都记录了数据库中某个数据块所做的修改。
例如,如果用户执行了一条UPDATE语句对某个表中的一条记录进行修改,同时将生成一条重做记录。
这条重做记录可能由多个变更向量组成,在这些变更向量中记录了所有被这条语句修改过的数据块中的信息,被修改的数据块包括表中存储这条记录的数据块,以及回退段中存储的相应的回退条目的数据块。
如果由于某种原因导致数据库丢失了这条UPDA TE语句操作的结果,则可以通过与这条UPDATE语句对应的重做记录找到被修改结果并复制到各个数据块中,从而完成数据恢复。
利用重做记录,不仅能够恢复对数据文件所做的修改操作,还能够恢复对回退段所做的修改操作。
因此,重做日志文件不仅可以保护用户数据库,还能够保护回退段数据。
在进行数据库恢复时,Oracle会读取每个变更向量,然后将其中记录的修改信息重新应用到相应的数据块上。
重做记录将以循环方式在SGA区的重做日志高速缓存中进行缓存,并且由后台进程LGWR写入到重做日志文件中。
当一个事条被提交时,LGWR进程将与该事务相关的所有重做记录全部写入重做日志文件中,同时生成一个“系统变更码SCN”。
系统变更码SCN 会随重做记录一起保存到重做日志文件中,以标识与重做记录相关的事务。
只有当某个事务所产生的重做记录全部被写入重做日志文件后,Oracle才会认为该事务提交成功。
2.写入重做日志文件在Oracle中,用户对数据库所做的修改首先被保存在内存中,这样可以提高数据库的性能,因为对内存中的数据进行操作要比对磁盘进行操作快得多。
1数据库的物理结构有哪几种文件组成

1数据库的物理结构有哪几种文件组成?数据文件重做日志文件控制文件其他文件2简要说明例程与数据库之间的联系与区别、ORACLE数据库是安装在磁盘上的ORACLE数据库文件和相关的数据库管理系统的集合。
磁盘上比较重要的文件包括数据文件,控制文件重做日志文件初始化参数文件口临文件。
鬼档重做日志文件例程是由在内从中的一组后台京城和内存结构组成。
3说明数据库,表空间和数据文件之间的关系。
ORACLE数据库的逻辑结构和物理结构的对应关系,一个ORACLE数据库可以拥有多个表空间,每个表空间有多个段组成,每个段由若干个区间组成,每个区间包含多个ORACLE 数据块,每个ORACLE数据块包含多个OS屋里磁盘快。
表空间有多个物理文件支持,具体存储表空间中的个对象。
4说明ORACLE 例程的系统全局区包括哪几部分?风别存储什么?主要包括数据库缓冲存储区,崇左日志缓冲区共享池三部分。
1用于存放最近访问的数据块。
2数据进行的所有更改都存储在崇左日志缓冲区,这些记录在以后会备考摆到重做日志文件中。
3共享池用于存放最近执行的SQL语句和数据字典信息,它的尺寸是由初始化参数SHARED_PLLL_SIZE来定义的。
大池用于为大的内存需求提供内存空间,它的尺寸有初始化参数LARGE_POOL SIZE定义。
6有几种日志操作模式?扎那几种日志操作模式下会生成归档日志?7ORACLE罗技存储结构有哪几部分构成?由表空间,段,区间,ORACLE块构成。
8 ORACLE数据库系统中的进程主要由用户进程和服务器端进程,服务器端进程又可以分为后台进程和服务器进程两类。
服务器端后台进程:数据库写入进程,日志写入进程,日志归档进程(不必要),检查带你进程,系统监控进程和进程监控进程三章ORACLE NET 是ORACLE网络产品的基础,他用需服务和他们的应用程序驻留在不同的计算机上,其主要功能是在客户机和服务器之间活在两个服务器之间建立网络绘画和传输数据。
Oracle Undo和Redo

Oracle UndoUNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATE和DELETE)时,oracle会将这些操作执行前的旧数据写入到UNDO段,在oracle9i之前,管理UNDO数据时使用(Rollback Segment)完成的。
从oracle9i开始,管理UNDO数据不仅可以使用回滚段,还可以使用UNDO表空间.因为规划和管理回滚段比较复杂,所有oracle database 10g 已经完全丢弃用回滚段,并且使用UNDO表空间来管理UNDO数据。
回滚段可以说是用来保持数据变化前映象而提供一致读和保障事务完整性的一段磁盘存储区域。
当一个事务开始的时候,会首先把变化前的数据和变化后的数据先写入日志缓冲区,然后把变化前的数据写入回滚段,最后才在数据缓冲区中修改(日志缓冲区内容在满足一定的条件后可能被写入磁盘,但在事务提交的时候日志必须写入磁盘,而数据缓冲区中的数据依赖于检查点的发生和DBWR进程的活动)。
Rollback是一个代价昂贵的操作,如果一个系统的事务回退率过高,应该检查系统是否正常或者程序设计思路是否存在问题。
查询数据库启动依赖的事务回退率,如果发现太高,一定要引起重视。
--查询回退率的sqlSELECT NAME, VALUE FROM v$sysstat WHERE NAME IN ('user commits','transaction rollbacks');关于回滚段的数据,如果是delete操作,则回滚段将回记录整个行的数据;如果是update,则只记录被修改了的字段的变化前的数据(前映像);如果是insert,则只记录插入记录的rowid。
所以,假如commit,那么回滚段中简单标记该事务已经提交;假如rollback,则操作是delete 的话,把回滚段中的数据重新写回数据块,操作是update的话则把变化前的数据修改回去,操作是insert的话则根据rowid把该记录删除。
REDO LOG 与 UNDO LOG这两个概念的区别

REDO LOG 与 UNDO LOG这两个概念的区别--转载转自:[url]/jonescheng/archive/2008/05/08/1189063.ht ml[/url]redo log 重做日志/undo log 撤消日志重做日志:每当有操作执行前,将数据真正更改时,先前相关操作写入重做日志。
这样当断电,或者一些意外,导致后续任务无法完成时,系统恢复后,可以继续完成这些更改撤消日志:当一些更改在执行一半时,发生意外,而无法完成,则可以根据撤消日志恢复到更改之前的壮态网上找到一些解说:以便以后自己参考有两个概念:前滚与回退比如某一时刻数据库DOWN机了,有两个事务,一个事务已经提交,另一个事务正在处理数据库重启的时候就要根据日志进行前滚及回退,把已提交事务的更改写到数据文件,未提交事务的更改恢复到事务开始前的状态。
redo--> undo-->datafileinsert一条记录时, 表跟undo的信息都会放进 redo 中, 在commit 或之前, redo 的信息会放进硬盘上. 故障时, redo 便可恢复那些已经commit 了的数据.redo->每次操作都先记录到redo日志中,当出现实例故障(像断电),导致数据未能更新到数据文件,则数据库重启时须redo,重新把数据更新到数据文件undo->记录更改前的一份copy,但你系统rollback时,把这份copy重新覆盖到原来的数据redo->记录所有操作,用于恢复(redo records all the database transaction used for recovery)undo->记录所有的前印象,用于回滚(undo is used to store uncommited data infor used for rollback)redo->已递交的事务,实例恢复时要写到数据文件去的undo->未递交的事务.redo的原因是:每次commit时,将数据的修改立即写到online redo中,但是并不一定同时将该数据的修改写到数据文件中。
Oracle数据库简答题-考试重点

1.简单描述Oracle数据库体系结构的组成及其关系?答:Oracle数据库体系结构由物理存储结构、逻辑存储结构和实例组成。
其中物理存储结构描述了操作系统层次数据的存储与管理,包括数据文件、日志文件、重做日志文件等组成.逻辑结构描述了数据库内部数据的组织与管理,由表空间、段、区、块组成.实例是数据库运行的软件结构,由内存结构和后台进程组成。
数据库运行过程中,用户的操作在内存区中进行,最终通过后台进行转化为对数据库的操作。
2、说明Oracle数据库物理存储结构的组成?Oracle数据库物理结构包括数据文件、控制文件、重做日志文件、初始化参数文件、归档文件、口令文件等。
在控制文件中记录了当前数据库所有的数据文件的名称与位置、重做日志文件的名称与位置,以及数据文件、重做日志文件的状态等。
3、说明Oracle数据库数据文件的作用?数据文件中保存了数据库中的所有数据,包括数据字典以及用户数据。
4、说明Oracle数据库控制文件的作用?控制文件保存数据库的物理结构信息,包括数据库名称、数据文件的名称与状态、重做日志文件的名称与状态等。
在数据库启动时,数据库实例依赖初始化参数定位控制文件,然后根据控制文件的信息加载数据文件和重做日志文件,最后打开数据文件和重做日志文件.5、说明Oracle数据库重做日志文件的作用?重做日志文件是以重做记录的形式记录、保存用户对数据库所进行的修改操作,包括用户执行DDL、DML语句的操作。
如果用户只对数据库进行查询操作,那么查询信息是不会记录到重做日志文件中的。
6、说明数据库逻辑存储结构的组成和相互关系.Oracle9i数据库的逻辑存储结构分为数据块、区、段和表空间四种。
其中,数据块是数据库中的最小I/O单元,由若干个连续的数据块组成的区是数据库中最小的存储分配单元,由若干个区形成的段是相同类型数据的存储分配区域,由若干个段形成的表空间是最大的逻辑存储单元,所有的表空间构成一个数据库.7、说明数据库表空间的种类,以及不同类型表空间的作用.数据库表空间分为系统表空间和非系统表空间两类,其中非系统表空间包括撤销表空间、临时表空间和用户表空间等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
回退段和重做日志缓冲区的区别和联系一直被回退段和重做日志缓冲区所困扰,现在总算有些明白,现在总结一下,其中的错误请大家指正。
从名字上看就可以看出回退段主要用于UNDO的,而重做日志缓冲区主要用于REDO的。
Oracle崩溃恢复步骤如下:首先rolling forward 前滚:由于oracle failure,sga中的内存信息丢失了,但是online redo log 中还是存储了transaction信息,包括commited or uncommited data。
可能这些修改信息并没有被oracle正确的来处理,包含两种情况:已经提交的还没有写入数据文件,或者没有提交的却被写入了数据文件。
针对已经提交的还没有写入数据文件就要发生前滚,在前滚过程中,smon会根据online redo log中的记录来完成对datafile的修改。
保证已经提交的数据已经写入数据文件。
(SMON负责系统监视已经一些系统清理及恢复工作,这些工作主要包括:1.清理临时空间以及临时段SMON负责在数据库启动时清理临时表空间中的临时段,或者一些异常操作过程遗留下来的临时段,例如,当创建索引过程中,创建期间分配给索引的Segment被标志为TEMPORARY,如果Create Index (或rebuild Index等)会话因某些原因异常中断,SMON负责清理这些临时段。
2.接合空闲空间在DMT(字典管理表空间)中,SMON负责把那些在表空间中空闲的并且互相是邻近的Extent接合成一个较大的空闲扩展区,这需要表空间的pctincrease设置为非零值。
3.执行实例恢复(Instance recovery)在实例恢复过程中,SMON的工作包括三个环节:应用Redo执行前滚、打开数据库提供访问、回滚未提交数据)接下来,前滚结束后,数据库正常open,此时用户可以正常连接,可以访问已经recover 的commited data,但是对于那些属于unrecoverable transaction的uncommited data,会被oracle 加锁,是不可以访问的。
rolling back:假如有进程访问这些加锁的data,此时smon会对这些数据块做rollback回滚,从数据文件中撤销没有提交却被写入数据文件的数据。
回退段:把未提交事务的更改恢复到事务开始前的状态。
内部结构:回退段中的数据是以“回退条目”方式存储。
回退条目=块信息(在事务中发生改动的块的编号)+在事务提交前存储在块中的数据在每一个回退段中oracle都为其维护一张“事务表”在事务表中记录着与该回退段中所有回退条目相关的事务编号(事务SCN&回退条目)undo的原因:在oracle正常运行时,为了提高效率,加入用户还没有commit,但是空闲内存不多或设置了CHECKPOINT时,会由DBWR进程将脏数据块写入到数据文件中,以便腾出宝贵的内存供其它进程使用。
这就是需要UNDO的原因。
因为还没有发出commit语句,但是oracle的dbwr进程已经将没有提交的数据写到数据文件中去了,此时数据文件中存放commit和uncommit的数据。
也就是说即使数据已经写入了数据文件,仍然能回滚,只要回滚段的内部事务表标记为active(事务未提交),若标记为inactive(事务已提交)就不能回滚了。
事务分配策略:oracle基于两个原则给事务分配回滚段。
首先oracle试图将一个新的事务指派给某个拥有最少活动事务数的回滚段;如果没有单个段能满足这个需求,那么该事务将被指派给某个段来保存undo信息,以便此undo信息能够尽可能长的时间内被用于读一致性视图保留。
事务可以用以下语句申请指定的回滚段:SET TRANSTRACTION USE ROLLBACK SEGMENT rollback_segment事务将以顺序,循环的方式使用回滚段的区(EXTENTS),当前区用满后移到下一个区。
几个事务可以写在回滚段的同一个区,但每个回滚段的块只能包含一个事务的信息。
回滚段的扩张(EXTEND):当前回滚段区的所有块用完而事务还需要更多的回滚空间时,回滚段的指针将移到下一个区。
当最后一个区用完,指针将移到第一个区的前面。
回滚段指针移到下一个区的前提是下一个区没有活动的事务,同时指针不能跨区。
当下一个区正在使用时,事务将为回滚段分配一个新的区,这种分配称为回滚段的扩展。
回滚段将一直扩展到该回滚段区的个数到达回滚段的参数MAXEXTENTS的值时为止。
重做日志缓冲区:把已提交事务的更改写到数据文件内部结构:数据库的更改的最小记录单位是变更向量,一连串的变更向量集合起来称为重做记录(REDO Record)。
每个变更向量中记录了事务对数据库中某个块所做的修改。
包括修改对象、前值、后值、该修改操作的事务号和该事务是否已提交等信息。
有些事务(transaction)会产生不止一个重做记录。
redo的原因:每次commit时,将数据的修改立即写到online redo中,但是并不一定同时将该数据的修改写到数据文件中。
因为该数据已经提交,但是只存在联机日志文件中,所以在恢复时需要将数据从联机日志文件中找出来,重新应用一下,使已经更改数据在数据文件中也改过来!发生时刻:对于数据库内所有被更改的数据块(segment),Oracle会把所有更改内容清楚记录在REDO 日志缓冲中。
所谓所有更改内容,当然包括数据段,还有索引段和回滚段(rollback segment)。
数据库内任意数据块所发生的一个更改,会被写成一个变更向量(Change V ector)。
例子:──SQL语句──*************************************************************UPDATE WORK03SET EMPNO = 9999WHERE EMPNO = 1111 ;※EMPNO项目尚未创建索引*************************************************************运行上面的UPDATE语句之后,会产生下面的变更向量。
1. 对于回滚段的事务表(标题)的变更向量当含有修改的数据块的地址、该事务的状态(commit或active)、以及存有该事务的UNDO 的回滚段的位置的事务表被修改的时候,就会产生变更向量。
2. 对于回滚段的数据块的变更向量将修改前的值(1111)存储(修改)到回滚段里的数据块时,就会产生变更向量。
3. 对于WORK03表内的数据块的变更向量将修改后的值(9999)覆盖(修改)到WORK03表内的数据块时,就会产生变更向量。
由上面的例子可知,对于这个事务,重做记录理会有三个修改向量。
当然可能有其他情况会产生重做记录,例如修改的项目如果有索引,就必须修改索引,这时候就会产生第二个重做记录。
这时候的重做记录还是和第一个重做记录一样,包含不止一个变更向量。
此外,在事务之后运行commit语句,就会产生第三个重做记录。
那么,重做日志缓冲区中的内容何时才被写进重做日志文件中呢,当满足以下4个条件任一条时:(1).Commit操作(2).Redo buffer log 使用超过1/3(3).Redo buffer log 使用超过1 MB(4).在DBWR开始写之前(当DBWn启动,而且发现要写的脏数据还没有写入redo file的时候,也会先启动LGWR,等待写入Redo file才即系执行的。
)LGWR写进程就会被触发,从而把重做日志缓冲区中的内容写进重做日志文件。
COMMIT时两者的动作(纯属个人理解):下面看一下,当执行"UPDATE emp SET sal=2000 WHERE empno=7788;"这条语句时的过程:1. Oracle将emp表中empno=7788的记录的sal的值的变化记录到重做日志缓冲区中(也把UNDO段的变更记录到重做日志缓冲区中)2. 将旧值1000记录到UNDO段所对应的缓冲区中;3. 在为该事务指定的回退段中的内部事务表内记录下这个事务已经被提交,并且生成一个惟一的SCN记录在内部事务表中,用于惟一标识这个事务;(表明事务已提交的数据无法undo,只能作redo操作)4.将新值2000存放到EMP段所对应的数据高速缓冲区中;5.将重做日志缓冲区的内容写入重做日志文件;6.Oracle服务进程释放事务所使用的所有记录锁与表锁;7.Oracle通知用户事务提交完成;(只有把重做日志缓冲区的重做记录成功写入重做日志文件中后,才被认为事务成功提交)8.Oracle将该事务标记为已完成;mit,写入到数据文件。
无论是写入缓冲区还是文件中,都是遵循先写入UNDO段、重做日志缓冲区,再写入数据高速缓冲区;先写入重做日志文件,再写入数据文件。
(应该是:重做日志缓冲区、UNDO 段)当出现修改时,对数据库的所有修改(含所有段)首先写入重做日志缓冲区,当后面操作时数据丢失时可做重做操作。
然后才是写入回退段,记录可能要回退的修改,若事务已经提交,则回退段的内部事务表会有标记,表示相应的回退条目不参与回退操作。
然后才是写重做日志文件和数据文件。
不明白处:1、当变更向量写入重做日志缓冲区后,数据库出现问题倒是内存数据消失,那就来不及写入重做日志文件了,那如何才能恢复数据呢。
还有能否根据重做日志缓冲区的记录来redo?(答:重做日期缓冲区也是属于内存的,当系统发生故障的时候里面的部分内容应该也是会丢失的,也就是说这部分数据时没办法恢复的。
不过LGWR这个进程会频繁的将LOG BUFFER里的内容写入LOG FILE,所以说即便发生你说的这种情况,那么丢失的数据量也是很少的。
注意到红色字体标出来的部分内容,因为有些在重做日期缓冲区内的内容是已经写到LOG FILE里了,比如说已经COMMIT了的那部分。
触发LGWR把日志内容从LOG BUFFER写到LOG FILE的条件有很多,LGWR进程将日志缓冲区的日志信息写入联机日志文件,触发的5个条件:一,前台进程触发1.用户发出commit,rollback语句。
2.日志缓冲区找不到足够的内存来放日志信息。
二,每隔3秒钟三,日志信息的数量达到日志缓冲区的1/3.四,日志信息数量达到1MB五,DBWn启动时,如果发现有脏数据块对应的重做条目还没写到联机日志文件,则触发LGWR,并等LGWR写完,DBWn才继续。
回复:只有把重做日志缓冲区的重做记录成功写入重做日志文件中后,才被认为事务成功提交,若出现1的问题,那么事务就是提交失败,所以不存在REDO问题。
并且写入重做日志文件的记录含COMMIT和UNCOMMIT的,没有插入提交记录的事务相关重做记录是不会引起redo操作的)2、既然重做日志缓冲区已经记录了所有的修改记录,那么为什么不直接用它就好了,还要用回滚段呢?(回滚段记录的是修改的数据的前镜像,而重做日志缓冲区记录的就是你当前的操作。