【问题标题】:Oracle insert architectureOracle 插入架构
【发布时间】:2018-12-03 06:38:51
【问题描述】:

我对 Oracle 执行 INSERT 操作的方式及其原因有疑问。

我已经读到,当用户执行一些INSERT - Oracle 进程需要检索表数据。

我可以理解,当用户执行一些选择查询时,实例的进程需要从内存或磁盘中检索这些数据(如果它不存在于内存中)。

UPDATE 操作也很有意义,因为旧数据需要更新,所以我们必须读取该数据。

但是当用户执行INSERT 命令时,它是否需要从内存或磁盘文件中读取任何数据?

目标是创建redo log files"before image" 所需的数据吗?

Oracle 将为插入命令检索哪些数据?

我正在使用 Oracle 11gR2。

这是书中的文字:

以下插入行的简单示例概述了如何 Oracle 处理事务:

  1. 用户使用 Oracle 网络服务通过 3 层或 n 层基于 Web 的客户端请求与 Oracle 服务器的连接。
  2. 验证请求后,服务器会为该用户启动一个新的专用服务器进程。
  3. 用户执行语句将新行插入表中。
  4. Oracle 检查用户的权限以确保用户具有执行插入的必要权限。如果用户的权限 信息不在库缓存中,它必须是 从磁盘读取到该缓存中。
  5. 如果用户具有必要的权限,Oracle 会检查之前执行的 SQL 语句是否与用户的相似 刚刚发布的已经在共享池中。如果有,甲骨文 执行此版本的 SQL;否则 Oracle 解析并执行 用户的 SQL 语句。然后 Oracle 在 用户会话的 PGA。
  6. Oracle 首先检查必要的数据是否已经在数据缓冲区缓存中。如果不是,服务器进程读取必要的 来自磁盘上的数据文件的表数据。
  7. Oracle 会在需要时立即应用行级锁,以防止其他进程尝试更改相同的数据 同时。
  8. 服务器将更改向量写入重做日志缓冲区。
  9. 服务器修改数据缓冲区缓存中的表数据(插入新行)。
  10. 用户提交事务,使插入永久化。 Oracle 在提交后释放行锁。
  11. 日志写入进程立即将重做日志缓冲区中的更改数据写入在线重做日志文件。
  12. 服务器进程向客户端进程发送一条消息,指示INSERT 操作成功完成。这 在这种情况下,消息将是“COMMIT COMPLETE”。 (如果不能 成功完成请求,它会发送一条消息指示 操作失败。)
  13. 通过插入对表所做的更改可能不会立即写入磁盘。数据库写入进程将更改写入 批次,因此可能需要一段时间才能插入信息 实际上永久写入磁盘上的数据库文件。

【问题讨论】:

  • 你在哪里读到的?
  • Sam Alapti 的 Oracle 数据库 11g 管理专家。有错吗?
  • 这不是我知道的书。请张贴相关报价。我认为这可能是错误的 - 或者至少是不准确的 - 但在批评之前了解原始观点会很好。

标签: oracle insert dml


【解决方案1】:

我认为书中的文字不是很清楚。但是,Oracle 确实需要从磁盘读取数据块(除非需要的那些已经在内存中)才能插入新的行数据。

为了插入一行,需要将数据写入属于该表的格式化数据块。根据各种因素,Oracle 可能会在现有数据块中插入新行——在这种情况下,如果该块尚未在缓存中,它显然需要读取该块。如果 Oracle 确定有必要扩展表——添加新块——这将在递归事务中完成;新分配的块需要在某个时候被读入内存才能完成插入。

即使Oracle加载了已经包含行数据的现有数据块,也应该不需要读取现有行数据来完成插入。

【讨论】:

    【解决方案2】:

    是的,Oracle 很可能需要在执行 INSERT 时从磁盘执行一次或多次读取。如果要插入的表定义了主键(并且所有表应该都有主键),则数据库将需要验证作为主键列的一部分提供的主键列的值插入的数据与任何现有行的主键列的值不匹配。它可以作为索引插入逻辑的一部分来执行此操作,它可以从磁盘读取数据,但是如果没有定义主键索引,它将必须执行全表扫描以验证新的主键值表中尚不存在。同样,如果表上有任何外键,则需要根据外键引用的表检查为要插入的表上的外键列提供的值。这几乎肯定需要从磁盘读取数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-22
      • 2012-08-29
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多