2026/4/17 16:56:26
网站建设
项目流程
建设举报网站,wordpress头部背景,注册餐饮公司流程和费用,北京公司注册地址新规定一、Flashback Database#xff08;数据库级闪回#xff09;1. 核心原理类似 RMAN 不完全恢复#xff0c;通过Flashback Log#xff08;闪回日志#xff09; 将整个数据库回退到过去某个时点#xff0c;依赖 RVWR#xff08;Recover Writer#xff09;后台进程写入闪回…一、Flashback Database数据库级闪回1. 核心原理类似 RMAN 不完全恢复通过Flashback Log闪回日志将整个数据库回退到过去某个时点依赖 RVWRRecover Writer后台进程写入闪回日志到 Flash Recovery Area比 RMAN 恢复更高效。2. 核心限制无法解决介质故障Media Failure此类场景仍需 RMAN 恢复若删除 / 缩小数据文件、恢复 / 重建控制文件无法直接使用可恢复的最早 SCN 由 Flashback Log 中记录的最早 SCN 决定。3. 启用步骤sql-- 1. 确认数据库处于归档模式 SQL archive log list; -- 2. 重启数据库到mount状态 SQL shutdown immediate; SQL startup mount; -- 3. 启用闪回数据库 SQL alter database flashback on; SQL alter database open; -- 4. 验证启用状态 SQL select flashback_on from v$database; -- 结果为YES则启用成功4. 实操示例恢复误删表sql-- 1. 记录操作前的SCN/时间 SQL SELECT CURRENT_SCN FROM V$DATABASE; -- 例如947921 SQL select to_char(sysdate,yy-mm-dd hh24:mi:ss) time from dual; -- 例如09-10-14 14:37:05 -- 2. 模拟误删表 SQL drop table A; SQL commit; -- 3. 重启数据库到mount状态 SQL shutdown immediate; SQL startup mount; -- 4. 执行闪回二选一 SQL Flashback database to timestamp to_timestamp(09-10-14 14:37:05,yy-mm-dd hh24:mi:ss); -- 或基于SCN SQL Flashback database to scn 947921; -- 5. 打开数据库二选一 -- 方式1重置日志后续数据丢失 SQL alter database open resetlogs; -- 方式2只读打开导出数据无数据丢失 SQL alter database open read only; -- 导出数据后恢复到原状态 SQL recover database;5. 关键视图视图作用V$database查看是否启用 Flashback DatabaseV$flashback_database_log查看最早恢复 SCN / 时间、闪回日志占用空间V$flashback_database_stat按小时统计闪回日志生成量评估恢复区空间需求二、Flashback Drop闪回删除1. 核心原理依赖Tablespace Recycle Bin表空间回收站删除表时对象不会物理删除而是重命名存入回收站类似 Windows 回收站仅支持非 SYSTEM 表空间、本地管理表空间的表 / 索引 / 约束等对象不支持 SYS 用户对象、函数 / 存储过程。2. 核心配置sql-- 查看回收站启用状态 SQL show parameter recyclebin; -- 默认ON -- 禁用/启用回收站会话级/系统级 SQL alter session set recyclebinoff; SQL alter system set recyclebinoff scopeboth;3. 实操示例sql-- 1. 查看回收站中的对象 SQL show recyclebin; SQL select original_name,object_name from recyclebin; -- 例如A → BIN$RWXQQcTPRde0ws4h9ewJcg$0 -- 2. 恢复误删表二选一 -- 方式1直接恢复 SQL flashback table A to before drop; -- 方式2重命名恢复原表名已被占用 SQL flashback table A to before drop rename to B; -- 方式3指定回收站对象名恢复同名表多次删除 SQL flashback table BIN$vYuvg9fTi2exYP9X2048Q$0 to before drop; -- 3. 手动清理回收站 SQL purge recyclebin; -- 清空当前用户回收站 SQL purge dba_recyclebin; -- 清空所有用户需SYSDBA SQL drop table A purge; -- 永久删除不进入回收站4. 注意事项回收站为逻辑区域与普通对象共享表空间空间不足时按 FIFO 覆盖旧对象恢复后索引 / 约束会保留但为系统自动命名需手动重命名物化视图删除后不进入回收站无法通过此方式恢复。三、Flashback Query闪回查询1. 核心原理利用 UNDO 表空间的多版本读一致性读取数据的前镜像支持基于时间 / SCN 查询历史数据可恢复误删 / 误改的数据9iR2 后支持对动态性能视图v$tables无效对数据字典dba_*有效。2. 实操示例1基于 Timestamp 查询 / 恢复sql-- 1. 记录操作前时间 SQL alter session set nls_date_formatYYYY-MM-DD hh24:mi:ss; SQL select sysdate from dual; -- 例如2009-10-15 19:04:16 -- 2. 模拟误删数据 SQL delete from A; SQL commit; -- 3. 查询历史数据 SQL select * from A as of timestamp to_timestamp(2009-10-15 19:04:16,YYYY-MM-DD hh24:mi:ss); -- 4. 恢复数据 SQL Insert into A select * from A as of timestamp to_timestamp(2009-10-15 19:04:16,YYYY-MM-DD hh24:mi:ss); SQL commit;2基于 SCN 查询 / 恢复推荐保证约束一致性sql-- 1. 记录操作前SCN SQL SELECT CURRENT_SCN FROM V$DATABASE; -- 例如1095782 -- 2. 模拟误删数据 SQL delete from A; SQL commit; -- 3. 查询历史数据 SQL select * from A as of scn 1095782; -- 4. 恢复数据 SQL insert into A select * from A as of scn 1095782; SQL commit;3. 扩展恢复函数 / 存储过程sql-- 基于Timestamp查询删除的函数代码 SQL SELECT text FROM dba_source AS OF TIMESTAMP TO_TIMESTAMP (2011-04-07 21:02:09, YYYY-MM-DD HH24:MI:SS) WHERE owner SYS AND name GETDATE ORDER BY line; -- 重新执行查询结果中的代码即可恢复4. SCN 与 Timestamp 映射Oracle 内部用 SCNTimestamp 会转换为 SCN系统每 5 分钟记录一次映射关系到sys.smon_scn_time仅保留最近 1440 条约 5 天查看映射关系sqlSQL select scn,to_char(time_dp,yyyy-mm-dd hh24:mi:ss) from sys.smon_scn_time;四、Flashback Version Query闪回版本查询1. 核心原理通过伪列ORA_ROWSCN记录行最后一次修改的 SCN默认数据块级建表时指定rowdependencies可为行级查看指定时间段内数据的所有版本变化Insert/Update/Delete定位数据修改轨迹。2. 实操示例sql-- 查看表A的所有版本变化 SQLSelect versions_xid,versions_startscn,versions_endscn, DECODE(versions_operation,I,Insert,U,Update,D,Delete, Original) Operation, id from A versions between scn minvalue and maxvalue;五、Flashback Transaction Query闪回事务查询1. 核心原理通过flashback_transaction_query视图关联事务 IDXID查看单个事务的所有操作及对应的撤销 SQL精准恢复误操作。2. 实操示例sql-- 查看表B指定SCN范围内的事务及撤销SQL SQLselect xid,commit_scn,commit_timestamp,operation,undo_sql from flashback_transaction_query q where q.xid in(select versions_xid from B versions between scn 413946 and 413959);六、Flashback Table闪回表1. 核心原理基于 UNDO 表空间将指定表回退到过去的 SCN / 时间需启用表的row movement行移动支持多表同时恢复同一事务。2. 实操示例sql-- 1. 启用行移动 SQL ALTER TABLE C ENABLE ROW MOVEMENT; -- 2. 记录操作前SCN/时间 SQL select current_scn from v$database; -- 例如1103864 -- 3. 模拟误删数据 SQL delete from C; SQL commit; -- 4. 闪回表二选一 SQL flashback table C to scn 1103864; SQL flashback table C to timestamp to_timestamp(2009-10-15 21:17:47,yyyy-mm-dd hh24:mi:ss); -- 5. 验证恢复结果 SQL select * from C;3. 注意事项DDL 操作如 truncate、move 表、修改列会导致 UNDO 数据失效触发 ORA-01466 错误恢复时默认禁用触发器需保留触发器可加ENABLE TRIGGERS子句多表恢复时要么全部成功要么全部失败。七、Flashback Data ArchiveFDA11g 新特性1. 核心原理独立于 UNDO 表空间将指定表的事务变化存储到闪回归档区逻辑区域由一个 / 多个表空间组成支持长期保留数据按策略适用于审计 / 合规场景依赖 FBDA 后台进程要求表空间为 ASSM、UNDO 管理为自动undo_managementauto。2. 核心操作1创建闪回归档区sql-- 创建默认归档区保留1年配额10M SQL create flashback archive default fla1 tablespace fda1 quota 10M retention 1 year; -- 创建普通归档区无配额限制保留2年 SQL create flashback archive fla2 tablespace fda2 retention 2 year;2修改归档区sql-- 设置默认归档区 SQL alter flashback archive fla2 set default; -- 修改保留时间 SQL alter flashback archive fla1 modify retention 2 month; -- 清理历史数据 SQL alter flashback archive fla1 purge before timestamp (systimestamp - interval 1 day);3表启用 / 禁用 FDAsql-- 创建表时启用 SQL create table fa(id number) flashback archive fla1; -- 已有表启用 SQL alter table fa flashback archive fla1; -- 禁用FDA需SYSDBA或FLASHBACK ARCHIVE ADMINISTER权限 SQL alter table fa no flashback archive;3. 关键视图视图作用DBA_FLASHBACK_ARCHIVE查看闪回归档区名称、状态、保留策略DBA_FLASHBACK_ARCHIVE_TABLES查看启用 FDA 的表及对应的归档表八、开启建议1.建议开启的场景如果你的数据库是生产 / 测试环境且有以下需求需要快速将整库回退到过去某个时点比如误操作后快速恢复希望替代部分 RMAN 不完全恢复场景提升恢复效率能提供Flash Recovery Area闪回恢复区的存储空间需提前配置。2.不建议开启的场景如果是以下情况可以暂时不开启数据库是开发 / 临时环境对恢复效率要求低服务器磁盘空间紧张闪回日志会占用额外空间已依赖 RMAN 完成全量 / 增量备份且不需要更快速的整库回退。3.开启的核心前提开启前需满足数据库已处于归档模式可通过archive log list验证已配置Flash Recovery Area指定存储闪回日志的路径和大小。总结闪回类型依赖对象适用场景核心限制Flashback Database闪回日志整库回退到过去时点无法解决介质故障依赖控制文件Flashback Drop回收站恢复误删表 / 索引不支持 SYS 对象、函数 / 存储过程Flashback QueryUNDO 表空间查询 / 恢复单表历史数据受 UNDO_RETENTION 限制最多保留 5 天Flashback TableUNDO 表空间 行移动单表 / 多表精准回退DDL 操作会导致 UNDO 失效Flashback Data Archive闪回归档区长期保留 / 审计数据11g 以上支持需额外