我们在使用 MS SqlServer 时,为了提高DML速度,往往会用no log 来设置语句不写日志,这样语句执行过程就会快一些。同样,在删除数据时,也会用truncate table tbName
来替代delete from tbName
,那么在oracle 中如何使用?
Oracle nologging 使用总结
- 一、Oracle 对logging 与nologging的控制
Oracle 在4个级别提供对操作是否记录redo日志尽心控制
- 数据库级别
Force_logging:数据库级别开启force_logging,将忽略一切nologging的操作,及时显式的加上nologging也不起作用。所以搭建物理standby时,一定要将force logging 开启。
开启关闭语句
alter database force logging;
alter database no force logging;
- 表空间级别
alter tablespace users logging
alter tablespace users nologging
--查看表空间的日志记录
select tablespace_name force_logging,logging from dba_tablespaces where tablespace_name=upper('users')
- 对象级别
--logging 属性取值为yes或no,对该对象的更改是否记录日志
--查询对象的nologging属性
select logging from dba_tables where table_name='T'
--对对象的logging 开启与关闭
alter table t logging;
alter table t nologging;
- 语句级别
--指定该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