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条件;删除数据之前先备份数据(尤其是生产环境或测试环境您不熟悉的表)

附:Oracle 查询某个时间之内的数据

//一月之内
SELECT * FROM ESS.E_LOG WHERE E_LOG."ETime" BETWEEN sysdate-interval '7' month AND SYSDATE;
 
SELECT * FROM ESS.E_LOG
WHERE to_char(E_LOG."ETime",'yyyy-mm-dd hh24:mi:ss') between to_char(sysdate-225,'yyyy-mm-dd hh24:mi:ss') and to_char(sysdate,'yyyy-mm-dd hh24:mi:ss');
 
//一周之内
select * from ESS.E_LOG where E_LOG."ETime" > sysdate - interval '7' day;
 
//一年之内
select count(*) from ESS.E_LOG WHERE E_LOG."ETime" BETWEEN sysdate-interval '1' year AND SYSDATE;
 
//sysdate获取的时间是Oracle数据库系统时间
select sysdate from dual;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值