oracle查询一天前、几天前、几小时前、一小时前的数据;恢复误删的数据

一.oracle查询一天前、几天前、几小时前、一小时前的数据

语法:

SELECT * FROM <table_name> AS OF TIMESTAMP (SYSDATE-<interval>);

例:

1.您想查询用户表(USER_INFO)一小时前的数据

--一小时是一天的1/24 ,故<interval>参数为1/24,如果想查四小时前的数据,<interval>参数可以是4/24或1/6
SELECT * FROM USER_INFO AS OF TIMESTAMP (SYSDATE-1/24);

2.您想查询用户表(USER_INFO)一天前的数据

SELECT * FROM USER_INFO AS OF TIMESTAMP (SYSDATE-1);

3…您想查询用户表(USER_INFO)三天前的数据

SELECT * FROM USER_INFO AS OF TIMESTAMP (SYSDATE-3);

二.恢复误删的数据

恢复误删的数据基于前面能否查询到历史数据,假设能够查到一天前的数据,就可通过下面语句恢复被删除的数据 (如果您觉得步骤不直观的话请您直接看例子吧)

步骤:

1.创建临时表并把误删的数据暂时存到临时表中

CREATE TABLE TABNAME_TEMP AS SELECT * FROM TABNAME AS OF TIMESTAMP (SYSDATE-<interval>);

2.把临时表的数据插入原表(被您误删数据的表)中

 -- SELECT * FROM TABNAME_TEMP 语句 可以带where条件,看您需要插入所有数据还是选择性插入
 INSERT INTO TABNAME SELECT * FROM TABNAME_TEMP ;

3.删除临时表 (防止临时表占用数据库空间)

DROP TABLE TABNAME_TEMP;--注意这里删除的是临时表,您刚刚创建的表,别删错了。

例:恢复一天前误删除的用户(用户 “Tom”,“Jerry”)

CREATE TABLE USER_INFO_TEMP AS SELECT * FROM USER_INFO AS OF TIMESTAMP (SYSDATE-1);
INSERT INTO USER_INFO SELECT * FROM USER_INFO_TEMP where username in ('Tom','Jerry');
DROP TABLE USER_INFO_TEMP;

需要注意的是:误删的数据不一定能查询到,也不一定能找回,故在操作数据库时尽量小心操作
例:在更新数据库表时一定带上where条件;删除数据之前先备份数据(尤其是生产环境或测试环境您不熟悉的表)

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐