Nologging到底何时才能生效? link: http://www.itpub.net/242761.html http://www.itpub.net/239905.html ?...我们知道,Nologging只在很少情况下生效 通常,DML操作总是要生成redo的 这个我们不多说. 关于Nologging和append,一直存在很多误解....经过一系列研究,终于发现了Nologging的真相....我们来看一下测试: 1.Nologging的设置跟数据库的运行模式有关 a.数据库运行在非归档模式下: SQL> archive log list; Database log mode???????...我们注意到这里是DIRECT INSERT,而且是10470条记录,也就是每条记录都记录了redo. 2.对于Nologging的table的处理 a.
一般表上不建议使用NOLOGGING,在创建索引或做大量数据导入时,可以使用 NOLOGGING 。...NOLOGGING:正好与LOGGING、FORCE LOGGING 相反,尽可能的记录最少日志信息到联机日志文件。...注:FORCE LOGGING并不比一般的LOGGING记录的日志多,数据库在FORCE LOGGING 状态下,NOLOGGING选项将无效,因为NOLOGGING将破坏DATAGUARD的可恢复性...基于NOLOGGING模式操作所产生的日志远小于LOGGING模式产生的日志,即NOLOGGING模式最小化日志记录。...2.NOLOGGING模式 此模式不是不记录日志,而是最小化日志产生的数量,通常在下列情况下使用NOLOGGING SQL*Loader in direct mode INSERT /*+APPEND
158 SQL> @redo SQL> select * from redo_size; VALUE ---------- 80892 SQL> create table test nologging...SQL> @redo SQL> select * from redo_size; VALUE ---------- 35768 SQL> create table test nologging...结论: 显然ctas的Nologging在archivelog模式下才会不记录redo,而在Noarchivelog模式下会产生同样多的redo 在归档模式下的CTAS nologging应该等价于非归档模式下
所以在主库执行nologging操作是不被允许的。这也就是为什么我们需要在配置Data Guard阶段需要使用Force Logging。...在一些场景中,我们会去使用nologging操作去节省大量数据插入的时间,而这种操作所带来的问题就是,如果该库在有备库的情况下,因为主库的nologging插入操作不会生成redo,所以不会在备库上传输和应用...在Oracle 11g,如果遇到这样的问题,可以通过在备库恢复有问题的数据文件来解决问题,示例如下: 在一个具有主备关系的主库上将force_logging设置为nologging模式,随后创建一张表,...设置为nologging模式 SQL> alter database no force logging; SQL> create table DEMO tablespace users pctfree...如果,由于nologging操作导致某些块被标记为损坏的,那么这部分数据文件就是需要恢复的,然后怎么办?在恢复命令中有FORCE选项。但我们可能并不需要它。
如在对表段、索引段使用数据泵导入时,可以 使用NOLOGGING模式,而使用DATA GUARD或对可用性较高的场景中需要记录日志,甚至使用强制记录日志。...本文介绍了在表段,索引段使用 LOGGING与NOLOGGING时产生redo的大小以及DIRECT INSERT APPEND 的使用方法。...; --使用nologging重建索引。...--也可以在创建索引的时候直接使用nologging关键字 --如:create index idx_tb_obj_nolog tb_obj_nolog(object_id) nologging...对于归档模式下,logging模式产生的日志将远远大于使用nologging模式产生的日志量 二、使用DIRECT INSERT APPEND方式的LOGGING与NOLOGGING情况 DIRECT
♣ 题目部分 【DB笔试面试792】在Oracle中,ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案. ♣ 答案部分 (一)NOLOGGING操作引起的坏块...如果数据段(表段、索引段)被定义为NOLOGGING属性,那么当NOLOGGING加APPEND、UNRECOVERABLE操作修改该数据段或者使用数据泵(DATAPUMP)impdp参数DISABLE_ARCHIVE_LOGGING...若LOGGING='NO'则表示NOLOGGING。...(四)识别数据块什么时候被标志为NOLOGGING 识别数据块什么时候被标志为NOLOGGING,可以将trace文件中数据块SCN或者V$DATABASE_BLOCK_CORUPTION视图中CORRUPTION_CHANGE...可行的方法是在NOLOGGING操作之后立刻备份对应的数据文件。
第一种场景:table在nologging模式下。并且表中没有索引, 在插入不同数据量的时候,生成的redo和响应时间都有一定的幅度提升。...第三种场景:表在nologging模式,表中有主键,主键对应的索引处于logging模式 nologging+index(unique index) logging 00.22 25862 1381736...第四种场景,表采用nologging模式,表中无索引,使用append模式插入数据。...+append模式和nologging基本没有区别。...第五种场景:表处于nologging模式,表中有索引,处于Nologging模式。采用append插入数据。 可以看到采用index的logging和nologging模式,两者也没有明显的变化 ?
在升级的过程中,可能需要准备一些额外的脚本,比如说做数据迁移的时候为了考虑性能,需要做如下的额外工作: 1.将部分表置为nologging 2.将部分index置为nologging 3.将部分foreign...然后使用如下的脚本,就能生成完整的脚本,在升级前nologging,disable的工作就生成脚本到pre目录下,logging,enable的工作就生成脚本到post目录下 脚本内容也没有了冗余。...logging_flag=logging nologging_flag=nologging disable_flag=disable enable_flag=enable awk '{print "'\...xxxx dba 11280 Jun 23 21:00 fk_constraint_disable.sql -rw-r--r-- 1 xxxx dba 42631 Jun 23 21:00 index_nologging.sql...-rw-r--r-- 1 xxxx dba 13888 Jun 23 21:00 tab_nologging.sql -rw-r--r-- 1 xxxx dba 621 Jun 23 21:00
最后需要说明一下有关NOLOGGING的错误使用情况。...下面几条SQL都是使用NOLOGGING时的错误用法: INSERT INTO T1 NOLOGGING; INSERT INTO T1 SELECT * FROM T2 NOLOGGING; INSERT...NOLOGGING */ FROM T1; UPDATE /*+ NOLOGGING */ T1 SET A='1'; 实际上,上述所有的SQL没有一个能够实现“不产生”日志的数据更改操作。...事实上,NOLOGGING并不是Oracle的一个有效的Hint,而是一个SQL关键字,通常用于DDL语句中。这里NOLOGGING相当于给SELECT的表指定了一个别名为“NOLOGGING”。...下面是NOLOGGING的一些正确用法: CREATE TABLE T1 NOLOGGING AS SELECT * FROM T2; CREATE INDEX T1_IDX ON T1(A) NOLOGGING
如果数据段(表段、索引段)被定义为NOLOGGING属性,那么当NOLOGGING加APPEND、UNRECOVERABLE操作修改该数据段或者使用数据泵(DATAPUMP)impdp参数DISABLE_ARCHIVE_LOGGING...若LOGGING='NO'则表示NOLOGGING。...(四)识别数据块什么时候被标志为NOLOGGING 识别数据块什么时候被标志为NOLOGGING,可以将trace文件中数据块SCN或者v$database_block_coruption视图中CORRUPTION_CHANGE...可行的方法是在NOLOGGING操作之后立刻备份对应的数据文件。...主库出现nologging坏块可能是由于主库执行过备份恢复或者之前是备库,执行了switchover。
(二)关于属性NOLOGGING和并行度的结论: 1、对于形如:“CREATE TABLE TT NOLOGGING PARALLEL 4 AS SELECT * FROM DBA_OBJECTS;”或...“CREATE INDEX IDNX11 ON TT(OBJECT_ID) NOLOGGING PARALLEL 4;”的SQL语句而言,创建的表或索引的并行度是4,日志模式是NOLOGGING,所以,...2、对于形如:“ALTER TABLE TT MOVE NOLOGGING PARALLEL 4;”或“ALTER INDEX IDNX11 REBUILD NOLOGGING PARALLEL 4;”...(四)NOLOGGING使用注意事项: 1、NOLOGGING方式插入数据后最好对表做个备份。生产上重要的表不建议设置NOLOGGING属性。...4、事实上,在NOLOGGING模式下,还是会生成一定数量的Redo。这些Redo的作用是保护数据字典,这是不可避免的。 5、NOLOGGING不能避免所有后续操作不生成Redo。
修复由于主库NOLOGGING操作引起的备库ORA-01578和ORA-26040错误 (一)NOLOGGING操作引起的坏块(ORA-01578和ORA-26040)简介 如果只是错误ORA-01578...如果数据段(表段、索引段)被定义为NOLOGGING属性,那么当NOLOGGING加APPEND、UNRECOVERABLE操作修改该数据段或者使用数据泵(DATAPUMP)impdp参数DISABLE_ARCHIVE_LOGGING...若LOGGING='NO'则表示NOLOGGING。...可行的方法是在NOLOGGING操作之后立刻备份对应的数据文件。...在一个具有主备关系的主库上将 force_logging 设置为 nologging 模式,随后创建一张表,设置为 nologging 模式: SQL> alter database no force
若T表数据量适当,可选用在线重定义操作时,可参考:http://www.cnblogs.com/jyzhao/p/3876634.html 1.创建分区表 2.设置新建分区表为nologging, 重命名原表...2.设置新建分区表为nologging, 重命名原表T为T_OLD alter table t_part nologging; rename T to T_old; 3.并行直接路径插入 alter...create unique index PK_T on T_PART(OID, TIME_STAMP, SERIAL_NO, CITY_ID) local tablespace DBS_I_JINGYU nologging...00.43 create index IDX_T_2 on T_PART (TIME_STAMP, SERIAL_NO, CITY_ID) local tablespace DBS_I_JINGYU nologging...: 02: 27: 49.92 create index IDX_T_3 on T_PART (TIME_STAMP, CITY_ID) local tablespace DBS_I_JINGYU nologging
4,ctas nologging方法生成的log远远小于其它的方式。 5,append方式并不一定能减少redo的生成,但是肯定能减少undo的生成。...6,append减少redo,前提是表在nologging方式下面,注意这里表上面没有索引,append只对表有效,对索引无效。...下面是详细的测试步骤 1. ctas方式生成的undo与redo 2,ctas nologging方式生成的undo与redo 这种方式生成的UNDO,REDO的大小都是最好的 3,普通表与insert...普通create表与insert append方式生成的redo与undo 5. nologging方式的create表与insert append方式生成的undo与redo -----the end
♣ 答案部分 快速复制表可以指定NOLOGGING选项,如: CREATE TABLE T1 NOLOGGING AS SELECT * FROM T2; 快速插入数据可以指定APPEND提示,需要注意的是...,在NOARCHIVELOG模式下,默认用了APPEND就是NOLOGGING模式的。...在ARCHIVELOG下,需要把表设置程NOLOGGING模式。
Active Data Guard 新增的 nologging 子句 当使用 Active Data Guard 时,通过该特性可以使 redo 日志的增长量不那么大。...这两种 nologging 模式可以替代现有的 nologging 模式。...STANDBY NOLOGGING FOR DATA AVAILABILITY STANDBY NOLOGGING FOR LOAD PERFORMANCE DBCA 静默模式新特性 创建一个 CDB
释放了表空间以后表的ROWID会发生变化,基于ROWID的索引会失效,此时就需要重建索引 --重建非分区索引 ALTER TABLE your_table_index REBUILD [ONLINE] [NOLOGGING...-重建分区索引 --针对分区索引-非组合索引 ALTER INDEX your_table_index REBUILD PARTITION your_partition_name [ONLINE] [NOLOGGING...]; 注意: 设置日志级别为NOLOGGING 意味尽量减少日志,可以加速索引重建 ONLINE,NOLOGGING 两者位置顺序可以对调,不影响 普通情况下建立索引或者REBUILD索引时,oracle...||index_name ||' REBUILD PARTITION ' || partition_name || ' NOLOGGING;' FROM dba_ind_partitions WHERE...||index_name ||' REBUILD SUBPARTITION ' || subpartition_name || ' NOLOGGING;' FROM dba_ind_subpartitions
: update test set test='a'; update test set test=''; 基本上可以看出一些数据的执行情况, 在表为noparallel的情况下,使用logging,nologging...在表设置parallel的情况下,使用logging,nologging,没有明显的性能提升,但是使用session级别的parallel,执行的时间有了成倍的提高,生成的redo日志也从百兆降低到百字节...generated..Elapsed: 00:00:21.13 Elapsed: 00:00:00.01 Elapsed: 00:00:40.02 197236392 bytes of redo generated…nologging...generated…Elapsed: 00:00:30.31 Elapsed: 00:00:00.00 Elapsed: 00:00:16.24 320 bytes of redo generated…nologging
♣ 题目部分 在Oracle中,如何修复由于主库NOLOGGING引起的备库ORA-01578和ORA-26040错误?...在这些场景中,DBA可能会使用NOLOGGING操作去节省大量数据插入的时间,而这种操作所带来的问题就是,如果该库在有备库的情况下,因为主库的NOLOGGING插入操作不会生成Redo,所以不会在备库上传输和应用...在一个具有主备关系的主库上将FORCE_LOGGING设置为NOLOGGING模式,然后创建一张表LHR.TESTDGNOLOG,设置为NOLOGGING模式: SQL> ALTER DATABASE...如果,由于NOLOGGING操作导致某些块被标记为损坏的,那么这部分数据文件就是需要恢复的。在恢复命令中有FORCE选项。因为有些时候数据文件是同步的,实时日志应用进程还是在运行的。...在Oracle 12.2中可以尝试使用NOLOGGING操作去节省大量数据插入的时间,然后在系统空闲时间进行备库恢复操作。但是,这种操作也存在弊端,因为备库的可用性就大大降低了。
lob数据类型的备份,做表级的备份(create table nologging....)...7)表级nologging 如果条件允许,可以考虑对一些相关的表开启nologging,在数据迁移之后再设置logging....8)index级nologging 数据的insert操作,如果没有index速度很有成倍的提高,但是在生产中可能并不能建议这么做,如果重建索引的时候,也需要一定的时间,还需要一定保证索引和之前一定要没有任何的差错...所以一般来说,如果开启Index的nologging也会有一定的提升。 9)lob级nologging 对于lob数据类型来说,在允许的条件下,可以设置为nologging,速度会有所提升。
领取专属 10元无门槛券
手把手带您无忧上云