在Oracle中创建索引是否会锁定表以进行读取?

在Oracle中创建索引是否会锁定表以进行读取?,oracle,indexing,locking,Oracle,Indexing,Locking,如果我们在CREATE INDEX语句中指定ONLINE,则在创建索引期间表不会被锁定。如果没有ONLINE关键字,则无法对表执行DML操作。但是SELECT语句是否可以同时出现在表上?读完这本书后,我仍然不清楚 我问这个问题,因为我想知道它是否类似于PostgreSQL或SQL Server: 在PostgreSQL中,无法对表进行写操作,但仍然可以读取表-请参阅>并发参数 在SQL Server中,不可能对表进行写入,此外,如果创建聚集索引,也不可能进行读取-请参阅>联机参数 创建索引不会

如果我们在
CREATE INDEX
语句中指定
ONLINE
,则在创建索引期间表不会被锁定。如果没有
ONLINE
关键字,则无法对表执行DML操作。但是SELECT语句是否可以同时出现在表上?读完这本书后,我仍然不清楚

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

  • 在PostgreSQL中,无法对表进行写操作,但仍然可以读取表-请参阅>并发参数
  • 在SQL Server中,不可能对表进行写入,此外,如果创建聚集索引,也不可能进行读取-请参阅>联机参数

创建索引不会阻止其他用户读取该表。通常,几乎没有任何Oracle DDL命令会阻止用户读取表


有些DDL语句可能会给读者带来问题。例如,如果<代码>截断< /Cord>一个表,在读取该表中间的其他用户可能会得到错误<代码> ORA-08103:对象不再存在< /COD>。但这是一个非常具有破坏性的变化,我们预计会造成问题。我最近发现了一种特定类型的外键约束,它阻止读取表,但这可能是一个罕见的错误。我在添加对象时造成了很多生产问题,但到目前为止,我从未见过添加索引会阻止用户读取表。

是的。实际上,Oracle中没有ddl块读取基础表。