数据库管理系统对库中的一行数据进行写操作时,需要将这行数据用排他锁锁上。除了正在进行操作的进程之外,其他的任何进程(用户)不能访问上了排他锁的数据行的。
当一个进程正在写某一行数据时,其他的进程可以读这行但是不能写操作。此时其他进程读的是写之前的数据。oracle通过在所有的dml操作之前将原来的数据复制到还原段(9i版本之前叫回滚段)上来实现这一功能的。从9i开始,管理还原数据可以手动,也可以由oracle服务器自动管理还原段的创建分配和优化。而9i之前只能手动。
回滚段:9i版本之前,还原段叫回滚段,不叫undo而是rollback。
还原段:解决了某一个进程写某行数据时,其他进程不能读的问题。但是当某个进程修改数据时候,先把原始值(还原数据)存入一个还原段中。一个事务只能将全部还原数据存放在同一个还原段中。但是多个并行的事务可以写一个还原段。每个还原段都有一个段头,在该段头中包含一个事务表,其中存放着有关使用这一还原段的当前事务的信息。
系统还原段system:仅为系统表空间中的对象变化所用。他是在数据库创建时在系统表空间中创建的。系统还原段既可以存在并工作在手动模式下。
非系统还原段non-system:包括自动和手动管理的还原段。手动管理的还原段分为私有和公有。
延迟还原段deferred:
两种方法可以创建还原表空间:
CREATE DATABASE 命令中加入一个子句,在创建数据库时建立还原表空间。
2.在已经创建数据库后,使用CREATE UNDOTABLESPACE 命令来建立还原表空间。
v$undostat 获取还原数据统计信息。
本文深入探讨了Oracle数据库中的排他锁机制,解释了如何通过排他锁确保数据写操作的独占性,同时保持其他进程的读取能力。文章详细介绍了9i版本前后还原段(Undo Segment)的演变,包括其作用、类型及管理方式,并对比了回滚段的概念。此外,还介绍了创建还原表空间的方法和获取还原数据统计信息的途径。
916

被折叠的 条评论
为什么被折叠?



