当前位置:网站首页>oracle业务表的数据发生增删改,该表的索引会写redo,undo吗?
oracle业务表的数据发生增删改,该表的索引会写redo,undo吗?
2022-08-10 06:29:00 【刘贵宾】
oracle数据库对于表的增删改肯定要写redo,undo。当表的数据发生增删改时,这个表的索引oracle会自动维护。那请教下,oracle对索引的这种“维护”是否也会写redo,undo呢?不考虑人工增加,删除、rebuild、修改索引这些情况。
其他答案1:
当我们插入一条数据时,首先这个动作会被记录到redo log 中,操作也会被记录到到undo ,undo本身的动作也会做为一条数据被记录到redo log ,插入一条数据,索引(indexes)会发生变化,索引的变化也会做一条数据被记录到redo log
其他答案2:
索引维护也会产生相应的重做日志的
这样才能保证在应用日志恢复的时候相应的索引也会被更改
其他答案3:
当然会。
记住一个本质原则,对于涉及到块更改操作均会记录redo信息。
你想想延迟块清除,只是数据库中的事务槽的更改都会记录redo(某些情况下select会导致redo产生的本质原因)更不要说是维护索引的相对“重量级”操作。
其他答案4:
自己又想了想,个人认为随着表的增删改而自动更新索引的操作不会记录redo,undo。(不考虑人工增加,删除、rebuild、修改索引这种DDL情况。)
因为:索引的更新是自动根据表的增删改而发生,如果索引或索引相关变更信息也记录redo和undo,那么在做回滚和前滚的时候,索引自动维护机制和前滚(回滚)中登记的索引变化更新会发生冲突。
其他答案5:
我觉得会的。说下我的理解:在oracle里,索引和数据分属不同的segment,底层都是block,删除一条数据就要维护索引树,都需要对block进行操作,为了实现崩溃恢复,必然需要把这些变动都写入redo log,而且我猜,跟数据块的redo一并写入的,如果分属两个原子操作,那又要保证这两个操作的事务性。
其他答案6:
自己简单测试一下,一目了然,为啥要猜,凭感觉?
SQL> create table t1 (id number);Table created.SQL> insert all 2 into t1 values(1) 3 into t1 values(2) 4 into t1 values(3) 5 select 1 from dual;3 rows created.SQL> commit;Commit complete.SQL> create index idx_t1 on t1(id);Index created.SQL> select current_scn from v$database;CURRENT_SCN----------- 46939397SQL> update t1 set id=5 where id=3;1 row updated.SQL> commit;Commit complete.SQL> select current_scn from v$database;CURRENT_SCN----------- 46939443SQL> alter system dump logfile '/u01/app/oracle/oradata/HKORA/onlinelog/o1_mf_3_j7z2qcb9_.log' scn min 46939397 scn max 46939443;System altered.SQL> @tracefileVALUE------------------------------------------------------------------------------------------------------------------------------------------------------/u01/app/oracle/diag/rdbms/hkora/hkora/trace/hkora_ora_15168.trcSQL> select object_id from dba_Objects where object_Name='T1' and owner='DEVIN'; OBJECT_ID---------- 82502SQL> select object_id from dba_Objects where object_Name='IDX_T1'; OBJECT_ID---------- 82503CHANGE #3 CON_ID:0 TYP:2 CLS:1 AFN:8 DBA:0x0200240c OBJ:82502 SCN:0x0000000002cc3cbe SEQ:1 OP:11.5 ENC:0 RBL:0 FLG:0x0000
CHANGE #2 CON_ID:0 TYP:0 CLS:1 AFN:8 DBA:0x02002413 OBJ:82503 SCN:0x0000000002cc3cd7 SEQ:1 OP:10.4 ENC:0 RBL:0 FLG:0x0000
边栏推荐
- MySQL之InnoDB引擎(六)
- 几行代码就可以把系统高崩溃;
- Qt借助隐藏控件和QSS绘制重复元素
- 【机器学习】神经网络中的优化器
- 驱动的参数传入:module_param,module_param_array,module_param_cb
- About MongoDb query Decimal128 to BigDecimal problem
- 语法基础(判断语句)
- 椭圆曲线离散对数问题以及求解
- ES13 - ES2022 - The 123rd ECMA Congress approves the ECMAScript 2022 language specification
- Lunix(阿里云服务器)安装Anaconda并开启jupyter服务本地访问
猜你喜欢
随机推荐
Can‘t find bundle for base name jdbc, locale zh_CN解决方法
动态代理-cglib
强化学习_05_DataWhale近端策略优化
2022 Henan Mengxin League Game (5): University of Information Engineering C - Throwing a Handkerchief
3. Transactions [mysql advanced]
关于Qt高频率信号槽合并的误解和方案
金融证券 初级 招股书 要求 黑话1刷数 黑话2底稿 黑话3董监高
Win32屏幕坐标转换Qt坐标
Screen post-processing: Sobel operator to achieve edge detection
求问各位大佬,FLink SQL读取source的时候去指定水位线的时间字段,如果指定的这个字段中格
如何正确理解线程机制中常见的I/O模型,各自主要用来解决什么问题?
MySQL 免安装版/解压版的安装与配置(Win & Unix & Linux)
修改 QtCreator 配置解决 “无法运行 rc.exe” 问题
指纹浏览器在使用易路代理时常见的问题及解决办法
强化学习_10_Datawhale稀疏奖励
COLMAP+OpenMVS实现物体三维重建mesh模型
761. 特殊的二进制序列
socket实现进程间通信
pthread编程重要知识点
语法基础(判断语句)




![[Network Security] Practice AWVS Range to reproduce CSRF vulnerability](/img/7f/f08e429e3d8ede03a1c1754e256f99.png)




