一、闪回数据表
闪回表是基于撤销数据来实现的,撤销表空间的参数:
1、undo_management
有两个参数值:auto、manual(默认)
manual:系统启动后使用rollback segment存储undo信息;
auto:使用UNDO 表空间,这时undo_tablespace必须要指定一个UNDO 表空间
2、undo_tablespace
指定存放undo的表空间。
3、undo_retention
undo数据保存的期望时间,单位为秒。如果undo表空间充足,保存时间则会达到设置的期望值;如果undo表空间不足,则会提前覆盖。
执行闪回表命令的语法:
flashback table [schema.]<table_name> to
{
[before drop [rename to table] | [scn | timestamp] expr [enable | disable] triggers ]
}
- schema : 模式名,一般就是指用户
- to timestamp : 系统时间戳
- to scn: 系统更改好,可以从flashback_transaction_query 数据字典中查询 示例: flashback table temp to scn 25025971;
- [enable | disable] triggers:标识恢复以后触发器的状态,默认为disable状态
- to before drop: 表示恢复到被删除之前
- rename to table: 表示更换表名
二、闪回数据库
闪回恢复区配置
SELECT * FROM v$parameter t WHERE UPPER(t.NAME) LIKE 'DB_RECOVERY_FILE_DEST%';
或者show parameter DB_RECOVERY_FILE_DEST
闪回数据库必须在归档模式才能使用
查看日志模式:archive log list;
或者select name,log_mode from v$database;
修改为归档模式:
shutdown immediate;
startup mount;
alter database archivelog;
通过DB_FLASHBACK_RETENTION_TARGET指定可以在多长时间内闪回数据库。(单位分钟)
alter system set db_flashback_retention_target=7200;
在MOUNT状态下使用ALTER DATABASE FLASHBACK ON 命令启动闪回数据库功能
alter database flashback on;
打开数据库,查看日志模式:
设置归档日志目录:参考:http://blog.itpub.net/25744374/viewspace-732083/
LOG_ARCHIVE_DEST:指定归档文件存放的路径,该路径只能是本地磁盘,默认为’’。
LOG_ARCHIVE_DEST_n:默认值为’’。Oracle最多支持把日志文件归档到10个地方,n从1到10。归档地址可以为本地磁盘,或者网络设备。
DB_RECOVERY_FILE_DEST:指定闪回恢复区路径。
三者关系:
1、 如果设置了DB_RECOVERY_FILE_DEST,就不能设置LOG_ARCHIVE_DEST,默认的归档日志存放于DB_RECOVERY_FILE_DEST指定的闪回恢复区中。可以设置LOG_ARCHIVE_DEST_n,如果这样,那么归档日志不再存放于DB_RECOVERY_FILE_DEST中,而是存放于LOG_ARCHIVE_DEST_n设置的目录中。如果想要归档日志继续存放在DB_RECOVERY_FILE_DEST中,可以通过如下命令:alter system set log_archive_dest_1=’location=USE_DB_RECOVERY_FILE_DEST’;
2、 如果设置了LOG_ARCHIVE_DEST,就不能设置LOG_ARCHIVE_DEST_n和DB_RECOVERY_FILE_DEST。如果设置了LOG_ARCHIVE_DEST_n,就不能设置LOG_ARCHIVE_DEST。也就是说,LOG_ARCHIVE_DEST参数和DB_RECOVERY_FILE_DEST、LOG_ARCHIVE_DEST_n都不共存。而DB_RECOVERY_FILE_DEST和LOG_ARCHIVE_DEST_n可以共存。
3、 LOG_ARCHIVE_DEST只能与LOG_ARCHIVE_DUPLEX_DEST共存。这样可以设置两个归档路径。LOG_ARCHIVE_DEST设置一个主归档路径,LOG_ARCHIVE_DUPLEX_DEST设置一个从归档路径。所有归档路径必须是本地的。
4、 如果LOG_ARCHIVE_DEST_n设置的路径不正确,那么Oracle会在设置的上一级目录归档。比如设置LOG_ARCHIVE_DEST_1=’location=C:\archive1’,而OS中并没有archive1这个目录,那么Oracle会在C盘归档。
修改归档日志位置
alter system set log_archive_dest_1='location=E:\app\archiveLog';
闪回数据库:
查询v$flashback_database_log 视图获取oldest_flashback_scn的值
select oldest_flashback_scn,oldest_flashback_time from v$flashback_database_log;
先关闭数据库,再打开到mount状态,执行数据库闪回到具体scn,再用resetlogs打开数据库
shutdown immediate;
startup mount;
flashback database to scn 25025971;
alter database open resetlogs;
查看数据库当前scn
select current_scn from v$database;
scn与具体时间点的转化
select timestamp_to_scn(to_timestamp('2020-05-13 22:55:38.000','YYYY-MM-DD HH24:MI:SS.ff3')) from dual;
select to_char(scn_to_timestamp(25025971),'YYYY-MM-DD HH24:MI:SS.ff3') from dual;