发表于: 2006.11.22 15:14
分类: Oracle技术讨论
出处: http://brotherxiao.itpub.net/post/3712/231207
---------------------------------------------------------------
主要内容:
数据库服务结构
备份与恢复组件相关术语
数据库的ACID属性
REDO与UNDO的区别
1、实例与数据库
实例=进程+内存结构,启动和关闭的都是实例
数据库=磁盘上的物理文件的集合:数据文件+控制文件+日志文件(参数文件,密码文件和归档日志文件属辅助文件)
一个完整的数据库备份应包括以上所有文件。
进程:DBWR,LGWR,CKPT,SMON,PMON,ARCn
归档模式:非归档模式+一定备份策略一般来说可以保障数据安全性,但是在故障恢复时有较多局限性。例如不能脱机数据文件,不能进行热备。
前几天刚刚处理的一个现场故障就是因为非归档下的一个数据文件损坏而不得不重建相应表空间,如果是归档模式而且归档日志存在的话就不需要重建表空间了。
BLOCK and DATA BLOCK:oracle数据库文件由块组成(通常是一个块由多个操作系统块组成)。块根据存储内容的不同可分为:data block,index block,segment header,bitmap header,file header。通常用data block来取代block以区别于redo和controlfile的block
数据文件与表空间:
多元化控制文件与日志文件:oracle推荐使用多元化的控制文件和日志文件(不是磁盘镜像),因为磁盘镜像不能保护delete操作带来的文件丢失风险。
2、常见数据库操作
select:select操作也可能导致数据库发生写操作。服务器进程读取数据到缓冲区,提取数据,返回给客户端。在这个过程中需要分配空间以容纳读取的数据块,因此可能导致已经commit的脏数据块写入数据文件已腾出空间。(oracle定义一些规则空间脏数据的写入,例如:达到阀值,扫描40%的数据块仍没找到可用空闲块,checkpoint等等)。
DML:服务器进程读取相应的数据块到缓冲区,更新日志缓冲区和数据块.更新数据块时需要首先更新回滚段和段头,这些操作均需要产生redo信息.在需要的时候数据块被写入文件.
commit:服务器进程更新回滚段头(以释放回滚段),产生少量的redo,然后请求LGWR进程empty日志缓存区,完成后返回‘complete’给用户。
Rollback:服务器进程读取事务所属的回滚段信息,将老的数据放回数据块中(偶尔会将改数据块向前移,因为可能有其他事务修改了该块中的其他行,不能恢复到原来的状态)。这里对块的改变只产生redo,不产生undo信息。同commit一样,最后会产生标记并请求flush redo buffer。
DDL:与DML类似,在字典缓冲区完成。
3、备份与恢复
实例恢复:在断电或shutdown abort之后数据重新启动时自动执行,只需要在线日志文件。未提交的数据的延迟回归将在数据库打开之后完成。
媒体恢复:使用recover命令执行。可能需要归档和在线日志文件。数据库在发现数据文件头与控制文件不一致,或数据文件未正常关闭时将请求进行媒体恢复。未提交的延迟事务回滚在数据库打开之后完成。
冷备(脱机备份):数据库关闭情况下手工备份文件或使用RMAN在mount状态下进行
热备(联机备份):数据库必须运行在归档模式下。手工备份前需要将表空间置于热备模式。使用RMAN将采用特殊的机制已保证块的一致性,因此不需要处于热备模式。
恢复:分成两部分restore和recover。restore从备份中恢复拷贝到数据库路径。recover应用归档或在线日志。
不一致类型:
约束不一致:例如外健约束,这种情况一般发生在约束被disable或enable novalidate时,属于应用上的不一致,可通过analyze table validate structure检测到
结构一致:例如数据文件丢失,数据库找不到字典中描述的文件时将无法启动数据库。另外一种情况是索引叶结点没有指向正确的数据行,通常是异常或bug引起,可通用analyze检测到错误
物理不一致:在数据块的内部,除了包含了表的内容的数据行之外,还有很多结构,例如指向外健、ITL槽的指针等,如果这些指针指向了错误的块或不存在,就会产生物理不一致。
另外数据库的不同部分,例如物理文件中的块和内存结构中的被修改过的块在发生异常关闭后将导致数据库不一致,数据文件的各个块也可能由于某些原因不在同一个时间点(SCN)。这些都是物理不一致。
数据库的ACID属性--Atomicity(原子性),Consistency(一致性),Isolation(独立性),Durability(容错性)
A-事务对数据库状态的修改具有原子性。要么成功,要么失败回退到修改之前的状态
C-事务对数据库状态的修改不违反任何完整性约束
I-对并发事务的支持,oracle的读一致性通过undo构建block的不同版本来实现
D-事务故障恢复,oracle实例恢复保障事务容错,任何提交或未提交的事务均可得到恢复
REDO与UNDO
redo--后映像,用于重复一个数据库的修改,在修改结果丢失后重做,保障数据库的容错性,任何数据块的改动(包括表,索引,undo数据,控制文件,数据块结构指针,文件等等)都将产生redo信息除非采用nologging忽略日志记录。注意temp data不产生日志。global temporary table不记录数据修改日志,但是会产生undo,进而产生redo信息.
undo--前映像,用于获取修改前的原数据,回滚事务时需要用以保障事务原子性,保障数据库的独立性。任何用户或数据字典数据的改动都将产生undo信息。undo信息是不能被忽略的,undo data的改变也会产生redo信息.
恢复与事务
恢复的特点:使用redo,用于非预料的数据库崩溃,通常需要手工干预
事务的特点:需要undo作读一致性,产生redo和undo,使用undo作rollback











