Oracle数据库 的 回滚段 用于对数据库修正时, 保留原有的数据, 以便稍后能够穿越利用ROLLBACK来还原到修正前的数据; 另外, 回滚段可感受数据库中的所有历程供给读统一性. 本文我们主要Oracle数据库的回滚段方面的知识,接下来就让我们来一起了解一下这部分内容吧。
回滚段的种类
回滚段可分为系统回滚段和非系统回滚段, 其中非系统回滚段又分为PUBLIC回滚段和PRIVATE回滚段.
系统回滚段用于处理波及系统的catALOG的事物(例如大多数的DDL), 它位于SYSTEM表空间, 由于只有SYSTEM表空间能够随时坚持可用, 因而, 不要把SYSTEM回滚段放在其他的表空间中.
分寸1: 系统回滚段应放在SYSTEM表空间中, 并且该当永远坚持ONLINE事态.
PUBLIC回滚段对于数据库的所有实例(INSTANCE)都是可用的, 除非将其显式设置为OFFLINE.
PRIVATE回滚段是指对于数据库的某个实例是私有的, 为了利用PRIVATE回滚段, 某个实例该当在其INITsid.ORA的ROLLBACK_SEGMENTS中标明所有要利用的PRIVATE回滚段, 或穿越利用ALTER ROLLBACK SEGMENT XXX ONLINE来利用某一个回滚段.
提倡1: 在单实例系统中,提倡将所有回滚段设为PUBLIC.
提倡2: 在多实例系统中(如OPS), 提倡将每个实例的PRIVATE回滚段放置到拜会比拟快的本地装备上.
回滚段的数量、大小及存储参数
准确的回滚段的数量及大小的计算波及许多方面: 利用的种类(OLTP/OLAP/BATCH), 同时举行的事物的数量, DML语句的种类, 每个事物处理的数据量等等.
分寸2: OLTP系统应利用小但较多的回滚段, OLAP系统/批处理系统应利用少量的大回滚段
提倡3: OLTP/OLAP混杂型系统中, 应专程设置一个或几个大的回滚段, 平时设置为OFFLINE, 利用时穿越利用Set TRANSACTION USE ROLLBACK SEGMENT XXX来利用它. 这些回滚段应利用OPTIMAL参数,以便在不利用时,能够SHRINK到一个较小的尺寸。
提倡4: 在很难计算准确的数量、大小时,可用”偏大不偏小”的分寸。
分寸3: 所有的回滚段的INITIAL/NEXT参数应设为雷同, 只有提倡3中提到的大回滚段例外.
分寸4: 不要将回滚段的MAXEXTENTS设为UNLIMITED, 回滚段所在表空间也不要设为AUTOEXTEND
措施, 否则将会使得由于某个不正常的事务导致全副数据库处于失控事态.
回滚段的维护及查询
1.创立回滚段
2.改动ONLINE/OFFLINE事态
3.改动OPTIMAL参数
4.缩小回滚段
(有OPTIMAL参数时, 缩小到OPTIMAL值; 未曾OPTIMAL参数时, 缩小到MINEXTENTS所对应的尺寸)
5.修正INITIAL/NEXT参数
提倡5: 依据分寸3, 修正NEXT时, 总该当同时修正INITIAL.
INITIAL参数无法直接修正, 只能先DROP, 然后再CREATE.
6.在事务中利用特定的回滚段
7.常用的有关回滚段的系统数据字典
关于Oracle数据库回滚段的知识就介绍到这里,希望能够带给您一些收获!
【编辑推荐】
sql的事务处理与orcale中有何不同
1.在Oracle中,没有Read Uncommitted及Repeatable Read隔离级别,这样在Oracle中不允许一个会话读取其他事务未提交的数据修改结果,从而避免了由于事务回滚发生的读取错误。 Oracle中的Read Committed和Serializable级别,其含义与SQL Server类似,但是实现方式却大不一样。 缺省的设置是Read Committed隔离级别(也称为语句级别的隔离),在这种隔离级别下,如果一个事务正在对某个表进行DML操作,而这时另外一个会话对这个表的记录进行读取操作,则Oracle会去读取回滚段或撤销段中存放的更新之前的记录,而不会象SQL Server一样等待更新事务的结束。 在Serializable隔离级别(也称为事务级别的隔离),事务中的读取操作只能读取这个事务开始之前已经提交的数据结果。 如果在读取时,其他事务正在对记录进行修改,则Oracle就会在回滚段或撤销段中去寻找对应的原来未经更改的记录(而且是在读取操作所在的事务开始之前存放于回滚段或撤销段的记录),这时读取操作也不会因为相应记录被更新而等待。 3.在SQL Server中,DDL语句对事务的影响与其他DML语句相同,也就是说,在DML语句发出之前或之后,都不会自动发出Commit命令。 而在Oracle执行Create table语句之前进行了提交,而在Create table执行后也会自动发出Commit命令,所以只有插入After的行被回滚,而插入Before的行不会被回滚,Create table命令的结果也不会被回滚,即使Create table语句失败,所进行的Before插入也会被提交。 如果最后发出Commit命令,因为插入Before及Create table的操作结果已经在之前提交,所以Commit命令影响的只有插入After的操作。
详解Oracle DELETE和TrunCATE 的区别
展开全部语法delete from aa truncate table aa 区别 from后面可以写条件,truncate不可以。 from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少。 from删空表后,会保留一个空的页,truncate在表中不会留有任何页。 4.当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。 truncate始终锁定表和页,而不是锁定各行。 5.如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变,而truncate后,种子会恢复初始。 不会触发delete的触发器,因为truncate操作不记录各个行删除。 总结和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态。 语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。 语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 显然drop语句将表所占用的空间全部释放 truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始)。 4.速度,一般来说: drop> truncate > delete。 5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及。 6.使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表,当然用drop 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
oracle数据库中有哪些字符集,字符集之间的子集和超集关系是怎么样的?
oracle数据库的字符集有很多的,具体的也不能一一详细地列举出来了,但是,建库的时候,会有选择字符集的界面,点开下拉条,将会列出oracle所支持的所有字符集(10/12)。 超集与子集是包含和被包含的关系,超集兼容子集。
发表评论