目录
ORACLE—图灵小队—redo与undo—核心知识点2——能关掉重做日志吗?
答案是不能!不能!不能!如果能关闭重做日志,那oracle最核心的技术就没有了。所以有关闭重做日志的想法,直接扼杀掉即可。
有些情况执行某些操作时,确实可以不生产重做日志。
一、ORACLE的日志记录模式
1、有三种日志记录模式
(1)LOGGING:
--当创建一个数据库对象时将记录日志信息到联机重做日志文件。LOGGING实际上是对象的一个属性,用来表示在创建对象时是否记录REDO日志,包括在做DML时是否记录REDO日志。
(2)NOLOGGING
--正好与LOGGING、FORCE LOGGING 相反,尽可能的记录最少日志信息到联机日志文件。,一般表上不建议使用NOLOGGING,在创建索引或做大量数据导入时,可以使用NOLOGGING 。
(3)FORCE LOGGING:
--简言之,强制记录日志,即对数据库中的所有操作都产生日志信息,并将该信息写入到联机重做日志文件。 --这个特性是为了支持Data Guard,在9i r2可以启用。
2、NOLOGGING方式
(1)在SQL中设置
NOLOGGING方式并不意味对象的操作都不产生重做日志,而是说有些特定操作生产队redo会比平常(即不使用NOLOGGING子句时)少的多。
注意:在进行测试时,我们应当按生产环境中所采用的模式来进行测试,因为不同的模式可能导致数据库的行为有所差别。
因为生产环境采用的archivelog模式下,会产生大量的redol,而在noarchivelog模式下不会生产redo,所以测试环境也要开在archivelog模式下。
(2)在索引中设置
在段(索引或表)上设置NOLOGGING属性,从而隐式地采用NOLOGGING模式来执行某些操作。
(3)NOLOGGING总结--如下可以使用NOLOGGING模式
--索引的创建 --标的批量insert(通过/*+APPDN*/提示使用直接路径INSERT,或采用SQL*Loader直接路径加载)。表数据不会生成redo,但是所有的索引修改会生成redo.(尽管表不生产redo,但这个表上的索引却会!) --LOB操作(对大对象的更新不必生成日志) --通过create table as select 创建表 --各种alter table宝座,如MOVE和split;
(4)举例:
在一个archivelog模式的数据库上,如果NOLOGGING使用得当,可以加快许多操作的速度,因为它能显著减少重做日志的产生。如:
有一个表,需要从一表空间A移动到表空间B,这是可以:
--把表改为nologging模式 --移动表 --重建索引(也不生成日志) --再把表改回LOGGING模式
其他详见链接:
https://www.topunix.com/post-1454.html