gpt4 book ai didi

oracle - Oracle 中的 logging/nologging 选项的目的是什么

转载 作者:行者123 更新时间:2023-12-04 09:46:14 24 4
gpt4 key购买 nike

如果我不在 Oracle 的数据库对象中指定 logging/nologging 会发生什么?我的意思是说,在数据库对象中使用日志记录/无日志记录以及在数据库对象中没有日志记录/无日志记录会如何表现?

最佳答案

LOGGING/NOLOGGING 有助于管理启用直接路径写入,以减少 REDO 和 UNDO 的生成。它是控制可恢复性和性能之间微妙平衡的几种方法之一。

Oracle 架构背景信息

REDO 是 Oracle 提供持久性的方式,即 ACID 中的“D”。提交事务时,更改不一定整齐地存储在数据文件中。这样可以保持快速并让后台进程处理一些工作。 REDO 是对更改的描述。它被快速存储在多个磁盘上的“哑”日志中。更改很快,如果服务器在提交返回后一微秒断电,Oracle 可以查看 REDO 日志以确保更改不会丢失。

UNDO 帮助 Oracle 提供一致性,即 ACID 中的“C”。它存储了如何撤销更改的描述。另一个正在读取表的进程可能需要此信息,并且需要知道在较旧的时间点曾经是什么值。

直接路径写入跳过REDO、UNDO、缓存等一些功能,直接修改数据文件。在许多环境中,这是一个快速但有潜在危险的选项,这就是为什么有这么多令人困惑的选项来控制它。直接路径写入仅适用于 INSERTS,并且仅适用于以下描述的场景。

如果你什么都不做,默认选项是最安全的,LOGGING。

控制直接路径写入的多种方法

LOGGING/NOLOGGING 是控制直接路径写入的几个选项之一。从 AskTom 看这张表了解不同选项如何协同工作:

Table Mode    Insert Mode     ArchiveLog mode      result
----------- ------------- ----------------- ----------
LOGGING APPEND ARCHIVE LOG redo generated
NOLOGGING APPEND ARCHIVE LOG no redo
LOGGING no append ARCHIVE LOG redo generated
NOLOGGING no append ARCHIVE LOG redo generated
LOGGING APPEND noarchive log mode no redo
NOLOGGING APPEND noarchive log mode no redo
LOGGING no append noarchive log mode redo generated
NOLOGGING no append noarchive log mode redo generated

FORCE LOGGING 可以覆盖所有这些设置。可能还有一些我不知道的其他开关。当然,还有许多限制阻止直接路径 - 触发器、外键、集群、索引组织表等。

这些规则对索引的限制更大。在 DML 语句期间,索引将始终生成 REDO。只有 DDL 语句,如 CREATE INDEX ... NOLOGGINGALTER INDEX ... REBUILD在 NOLOGGING 索引上不会生成 REDO。

为什么有这么多方法?因为可恢复性非常重要,不同的角色可能对此事有不同的看法。有时有些人的决定需要凌驾于其他人之上。

开发人员在语句级别决定“插入模式”。使用 /*+ APPEND */ 可能会发生许多奇怪的事情提示和开发人员需要谨慎选择何时使用它。

建筑师在对象级别决定“表格模式”。某些表,无论开发人员想多快插入其中,都必须始终是可恢复的。

数据库管理员在数据库或表空间模式下决定“归档日志”和强制日志记录。也许组织只是不关心恢复特定的数据库,所以将其设置为 NOARCHIVELOG 模式。或者可能组织有一个严格的规则,即一切都必须是可恢复的,因此将表空间设置为 FORCE LOGGING。

关于oracle - Oracle 中的 logging/nologging 选项的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com