Oracle-nologging 应用

发布时间 2023-03-22 21:17:02作者: 丹心石

我们在使用 MS SqlServer 时,为了提高DML速度,往往会用no log 来设置语句不写日志,这样语句执行过程就会快一些。同样,在删除数据时,也会用truncate table tbName 来替代delete from tbName ,那么在oracle 中如何使用?

Oracle nologging 使用总结

  • 一、Oracle 对logging 与nologging的控制
Oracle 在4个级别提供对操作是否记录redo日志尽心控制
  1. 数据库级别
    Force_logging:数据库级别开启force_logging,将忽略一切nologging的操作,及时显式的加上nologging也不起作用。所以搭建物理standby时,一定要将force logging 开启。

开启关闭语句

 alter database force logging;
 alter database no force logging;
  1. 表空间级别
 alter tablespace users logging
 alter tablespace users nologging
 --查看表空间的日志记录
 select tablespace_name force_logging,logging from dba_tablespaces where tablespace_name=upper('users')
  1. 对象级别
--logging 属性取值为yes或no,对该对象的更改是否记录日志
--查询对象的nologging属性
select logging from dba_tables where table_name='T'
--对对象的logging 开启与关闭
alter table t logging;
alter table t nologging;
  1. 语句级别
--指定该sql语句是否记录日志,默认依赖对象的logging属性
insert into nologging select object_id,object_name from dba_ojects;
select * from tbName nologging where 1=1

二、nologging 的好处与影响

  • 好处
    (1)可以大大减少插入大型表的时间
    (2)提高并行创建大型表或索引的性能
    (3)减少日志生成量,节省磁盘空间
  • 影响
    (1)无法从重做日志中恢复更改,带来数据丢失的风险
    (2)对物理standby,数据库一旦应用了无效的重做日志,所有相应数据块将标记为逻辑坏块,查询引用时将报错
    (3)对于逻辑 standby,sql apply 会忽略无效的重做日志,因为它无法将其转换为有效的sql