【问题标题】:Flashback - Check if data ever existed in table in particular duration - Oracle闪回 - 检查数据是否在特定时间内存在于表中 - Oracle
【发布时间】:2026-02-07 20:55:02
【问题描述】:

有没有办法检查以前在 Oracle 中的表中是否存在数据?

使用闪回选项, 我们可以检查 as of timestamp sysdate - x 之类的数据(其中 x 是我们希望查看过去数据的时间)

但我想知道 Oracle 是否提供了任何功能或实用程序,以便我们可以知道过去 1 周内某个表中是否存在某个特定数据。

【问题讨论】:

  • 这真的取决于你设置的闪回区域有多大以及你的 oracle 数据库有多“忙”。
  • @TedatORCL.Pro- 我怎么知道这些参数?
  • 以下语句将闪回时间从默认的一天更改为两天: SQL> alter system set db_flashback_retention_target = 2880;
  • 如果您不是在询问 MySQL,请不要使用 mysql 标签。

标签: sql database oracle flashback


【解决方案1】:

有时闪回恢复区 (FRA) 已满,Oracle DBA 想知道它在使用什么、大小和占用者列表(存档、RMAN 备份片段或映像副本、闪回日志)。

兼容性:Oracle 12c、11g、10g

-- Utilisation (MB) du FRA
set lines 100
col name format a60

select
   name,
  floor(space_limit / 1024 / 1024) "Size MB",
  ceil(space_used / 1024 / 1024) "Used MB"
from v$recovery_file_dest;

-- FRA Occupants
SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;

-- Location and size of the FRA
show parameter db_recovery_file_dest

-- Size, used, Reclaimable 
SELECT
  ROUND((A.SPACE_LIMIT / 1024 / 1024 / 1024), 2) AS FLASH_IN_GB, 
  ROUND((A.SPACE_USED / 1024 / 1024 / 1024), 2) AS FLASH_USED_IN_GB, 
  ROUND((A.SPACE_RECLAIMABLE / 1024 / 1024 / 1024), 2) AS FLASH_RECLAIMABLE_GB,
  SUM(B.PERCENT_SPACE_USED)  AS PERCENT_OF_SPACE_USED
FROM
  V$RECOVERY_FILE_DEST A,
  V$FLASH_RECOVERY_AREA_USAGE B
GROUP BY
  SPACE_LIMIT, 
  SPACE_USED , 
  SPACE_RECLAIMABLE ;

-- After that you can resize the FRA with:
-- ALTER SYSTEM SET db_recovery_file_dest_size=xxG;

-- Or change the FRA to a new location (new archives will be created to this new location):
-- ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/u....';

以下语句将闪回时间从默认的一天更改为两天:

SQL> 改变系统集 db_flashback_retention_target = 2880;

【讨论】:

  • 太棒了..我怎样才能达到我正在寻找的东西,比如“如果过去几天里某个表中碰巧存在特定数据(比如说 7)”
  • 将保留期设置为 7 天以上,并为 FRA 提供足够的存储空间,剩下的就是 Oracle Magic ;)
最近更新 更多