Oracle中创建索引时是否会锁定表禁止读取操作?
结论
Oracle 中未指定 ONLINE 参数执行 CREATE INDEX 建索引时,仅会禁止对表的DML写入操作,不会阻塞普通SELECT查询,逻辑和PostgreSQL的普通非并发建索引一致,和SQL Server非ONLINE模式建聚集索引的逻辑不同。
机制说明
Oracle默认离线建索引的锁规则如下:
- 建索引启动时会对目标表加模式共享锁(S锁),该锁只阻塞其他会话的表结构修改操作、DML写入(增删改)操作
- 共享模式锁不会阻塞任何只读查询请求,所有SELECT语句都可以正常执行读取数据
三类数据库行为对比
- PostgreSQL:普通模式建索引时禁止写入、允许读取,加
CONCURRENTLY参数后允许写入 - SQL Server:非ONLINE模式建非聚集索引时禁止写入、允许读取;建聚集索引时读写都禁止,加
ONLINE参数后允许读写 - Oracle:非ONLINE模式建索引时禁止写入、允许读取,加
ONLINE参数后允许写入
内容的提问来源于stack exchange,提问作者iwis
相关产品推荐
相关产品推荐

