AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 28591
Accepted
Roy
Roy
Asked: 2012-11-14 00:36:31 +0800 CST2012-11-14 00:36:31 +0800 CST 2012-11-14 00:36:31 +0800 CST

在 Oracle 11gR2 上我可以将撤消保留设置多高

  • 772

设置非常高的撤消保留是否可行,以允许闪回查询及时回溯数周?

自然,撤消表空间中必须有足够的可用空间来包含所需的撤消数据量。还有其他我应该注意的限制吗?

如果没有足够的撤消空间可用,会发生什么?生产是否会受到任何影响,或者只是闪回和回滚受到限制(快照太旧等)。

更新:

每个实例每天的典型撤消生成量略低于 1 GB,每个实例的撤消空间价值高达 64 GB,以 30 天的撤消保留目标运行听起来是可行的。不?

oracle oracle-11g-r2
  • 2 2 个回答
  • 18496 Views

2 个回答

  • Voted
  1. Leigh Riffel
    2012-11-14T06:41:30+08:002012-11-14T06:41:30+08:00

    非常高是一个相对术语,取决于视角。您可能意味着 1 小时、1 个月、1 年等。假设您的意思介于 1 分钟到 1 个月之间,答案将取决于正在产生多少撤消以及您有多少可用存储空间。我没有看到任何超过两周的东西。

    Oracle 自动管理撤消空间,并在空间限制需要时将保留时间动态降低到撤消保留设置以下。需要注意的是,撤消表空间已保证保留。

    Oracle 数据库管理员指南在一页上涵盖了所有这些信息。以下是一些摘录:

    Oracle 数据库根据撤消表空间大小和系统活动自动调整撤消保留期。UNDO_RETENTION您可以选择通过设置初始化参数来指定最小撤消保留期(以秒为单位) 。此参数对撤消保留的确切影响如下:

    • UNDO_RETENTION对于固定大小的撤消表空间,该参数将被忽略。数据库始终根据系统活动和撤消表空间大小调整撤消保留期以获得最佳保留期。有关详细信息,请参阅“撤消保留的自动调整”。

    • 对于AUTOEXTEND启用了该选项的撤消表空间,数据库会尝试遵守由 指定的最短保留期 UNDO_RETENTION。当空间不足时,表空间不会覆盖未过期的撤消信息,而是自动扩展。如果MAXSIZE为自动扩展撤消表空间指定该子句,则当达到最大大小时,数据库可能会开始覆盖未过期的撤消信息。DBCA 自动创建的 UNDOTBS1 表空间是自动扩展的。

    ...

    为了保证长时间运行的查询或 Oracle 闪回操作的成功,您可以启用保留保证。如果启用保留保证,则保证指定的最小撤消保留;数据库永远不会覆盖未过期的撤消数据,即使这意味着事务由于撤消表空间中的空间不足而失败。如果未启用保留保证,则数据库可以在空间不足时覆盖未过期的撤消,从而降低系统的撤消保留。默认情况下禁用此选项。

    • 3
  2. Best Answer
    Justin Cave
    2012-11-14T10:13:21+08:002012-11-14T10:13:21+08:00

    虽然我没有尝试过,但我倾向于怀疑,当您UNDO_RETENTION超过 Oracle 维护其 SCN 到时间戳映射的时间长度时,您会遇到问题。如果有记忆,那大约是 1 周(好吧,如果有记忆,在 10g 的日子里是 1 周,我不知道在 11.2 中会有什么改变)。我倾向于怀疑 Oracle 会使用该映射来确定哪些UNDO段足够旧,应该清除它们,并且如果超出该限制,您将开始遇到问题。

    例如,在我的 11.2 系统上,我可以将 7 天前转换为 SCN,然后再转换回时间戳,但不能转换为 8 天前

      1* select scn_to_timestamp( timestamp_to_scn( systimestamp - 7) ) from dual
    SQL> /
    
    SCN_TO_TIMESTAMP(TIMESTAMP_TO_SCN(SYSTIMESTAMP-7))
    ---------------------------------------------------------------------------
    06-NOV-12 01.06.47.000000000 PM
    
    SQL> ed
    Wrote file afiedt.buf
    
      1* select scn_to_timestamp( timestamp_to_scn( systimestamp - 8) ) from dual
    SQL> /
    select scn_to_timestamp( timestamp_to_scn( systimestamp - 8) ) from dual
                             *
    ERROR at line 1:
    ORA-08180: no snapshot found based on specified time
    ORA-06512: at "SYS.TIMESTAMP_TO_SCN", line 1
    

    因此,我倾向于在我的系统上怀疑,如果我试图保留 8 天的UNDO那个 Oracle 通常会遇到问题。验证一种或另一种方式需要一周的时间,但如果我不得不下注,我倾向于下注尝试持有超过一周的时间UNDO会失败。

    即使您可以保留UNDO那么长时间,制定闪回查询也将是一项重大挑战,因为您无法指定时间戳。您可以通过编写一个自动化作业来维护您自己的(更长期的)SCN 和时间戳之间的映射,该作业将每隔几秒捕获一次并一次将它们保存数周或数月,然后AS OF SCN在您的闪回查询中指定。我倾向于期望老年人UNDO会消失,但它可能会起作用。

    • 3

相关问题

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

  • ORDER BY 使用文本列的自定义优先级

  • 舒服的sqlplus界面?[关闭]

  • 如何在数据库中找到最新的 SQL 语句?

  • 如何使用正则表达式查询名称?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve