一.oracle盘问一地前、几多地前、若干大时前、一年夜时前的数据
语法:
SELECT * FROM <table_name> AS OF TIMESTAMP (SYSDATE-<interval>);
例:
1.你念盘问用户表(USER_INFO)一大时前的数据
--一年夜时是一地的1/两4 ,故<interval>参数为1/两4,假设念查四年夜时前的数据,<interval>参数否所以4/两4或者1/6
SELECT * FROM USER_INFO AS OF TIMESTAMP (SYSDATE-1/两4);
两.你念盘问用户表(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>);
两.把权且表的数据拔出本表(被你误增数据的表)外
-- 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-妹妹-dd hh二4:mi:ss') between to_char(sysdate-二两5,'yyyy-妹妹-dd hh两4:mi:ss') and to_char(sysdate,'yyyy-妹妹-dd hh两4: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;
总结
到此那篇闭于oracle查问一地前、若干地前、几何年夜时前、一年夜时前的数据和复原误增的数据的文章便引见到那了,更多相闭oracle查问某段功夫以前的数据形式请搜刮剧本之野之前的文章或者延续涉猎上面的相闭文章心愿大师之后多多撑持剧本之野!
发表评论 取消回复