【问题标题】:Does creating index in Oracle locks the table for reads?在 Oracle 中创建索引是否会锁定表以进行读取?
【发布时间】:2021-08-03 22:48:42
【问题描述】:

如果我们在CREATE INDEX 语句中指定ONLINE,则在创建索引期间不会锁定表。如果没有 ONLINE 关键字,就不可能对表执行 DML 操作。但是 SELECT 语句是否可以同时出现在表上?在阅读了description of CREATE INDEX statement 之后,我仍然不清楚。

我问这个,因为我想知道它是否类似于PostgreSQL或SQL Server:

  • 在 PostgreSQL 中,无法在表上写入,但仍然可以读取表 - 请参阅 the CREATE INDEX doc > CONCURRENTLY 参数。
  • 在 SQL Server 中,无法对表进行写入,此外,如果我们创建聚集索引,也无法进行读取 - 请参阅 the CREATE INDEX doc > ONLINE 参数。

【问题讨论】:

  • 是的。 Oracle 中几乎没有 ddl 块读取基础表。

标签: oracle indexing locking


【解决方案1】:

创建索引不会阻止其他用户读取表。一般来说,几乎没有 Oracle DDL 命令会阻止用户读取表。

有些 DDL 语句可能会给读者带来问题。例如,如果您TRUNCATE 一个表,其他正在读取该表的用户可能会收到错误ORA-08103: Object No Longer Exists。但这是一个非常具有破坏性的变化,我们预计会导致问题。我最近发现了一种特定类型的外键约束阻止读取表,但这可能是一个罕见的错误。我在添加对象时造成了很多生产问题,但到目前为止,我从未见过添加索引会阻止用户读取表格。

【讨论】:

    猜你喜欢
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 2019-04-17
    相关资源
    最近更新 更多