oracle查詢一天前、幾天前、幾小時(shí)前、一小時(shí)前的數(shù)據(jù)以及恢復(fù)誤刪的數(shù)據(jù)
一.oracle查詢一天前、幾天前、幾小時(shí)前、一小時(shí)前的數(shù)據(jù)
語法:
SELECT * FROM <table_name> AS OF TIMESTAMP (SYSDATE-<interval>);
例:
1.您想查詢用戶表(USER_INFO)一小時(shí)前的數(shù)據(jù)
--一小時(shí)是一天的1/24 ,故<interval>參數(shù)為1/24,如果想查四小時(shí)前的數(shù)據(jù),<interval>參數(shù)可以是4/24或1/6 SELECT * FROM USER_INFO AS OF TIMESTAMP (SYSDATE-1/24);
2.您想查詢用戶表(USER_INFO)一天前的數(shù)據(jù)
SELECT * FROM USER_INFO AS OF TIMESTAMP (SYSDATE-1);
3…您想查詢用戶表(USER_INFO)三天前的數(shù)據(jù)
SELECT * FROM USER_INFO AS OF TIMESTAMP (SYSDATE-3);
二.恢復(fù)誤刪的數(shù)據(jù)
恢復(fù)誤刪的數(shù)據(jù)基于前面能否查詢到歷史數(shù)據(jù),假設(shè)能夠查到一天前的數(shù)據(jù),就可通過下面語句恢復(fù)被刪除的數(shù)據(jù) (如果您覺得步驟不直觀的話請(qǐng)您直接看例子吧)
步驟:
1.創(chuàng)建臨時(shí)表并把誤刪的數(shù)據(jù)暫時(shí)存到臨時(shí)表中
CREATE TABLE TABNAME_TEMP AS SELECT * FROM TABNAME AS OF TIMESTAMP (SYSDATE-<interval>);
2.把臨時(shí)表的數(shù)據(jù)插入原表(被您誤刪數(shù)據(jù)的表)中
-- SELECT * FROM TABNAME_TEMP 語句 可以帶where條件,看您需要插入所有數(shù)據(jù)還是選擇性插入 INSERT INTO TABNAME SELECT * FROM TABNAME_TEMP ;
3.刪除臨時(shí)表 (防止臨時(shí)表占用數(shù)據(jù)庫空間)
DROP TABLE TABNAME_TEMP;--注意這里刪除的是臨時(shí)表,您剛剛創(chuàng)建的表,別刪錯(cuò)了。
例:恢復(fù)一天前誤刪除的用戶(用戶 “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;
需要注意的是:誤刪的數(shù)據(jù)不一定能查詢到,也不一定能找回,故在操作數(shù)據(jù)庫時(shí)盡量小心操作。
例:在更新數(shù)據(jù)庫表時(shí)一定帶上where條件;刪除數(shù)據(jù)之前先備份數(shù)據(jù)(尤其是生產(chǎn)環(huán)境或測試環(huán)境您不熟悉的表)
附:Oracle 查詢某個(gè)時(shí)間之內(nèi)的數(shù)據(jù)
//一月之內(nèi) 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'); //一周之內(nèi) select * from ESS.E_LOG where E_LOG."ETime" > sysdate - interval '7' day; //一年之內(nèi) select count(*) from ESS.E_LOG WHERE E_LOG."ETime" BETWEEN sysdate-interval '1' year AND SYSDATE; //sysdate獲取的時(shí)間是Oracle數(shù)據(jù)庫系統(tǒng)時(shí)間 select sysdate from dual;
總結(jié)
到此這篇關(guān)于oracle查詢一天前、幾天前、幾小時(shí)前、一小時(shí)前的數(shù)據(jù)以及恢復(fù)誤刪的數(shù)據(jù)的文章就介紹到這了,更多相關(guān)oracle查詢某段時(shí)間之前的數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ORACLE 常用的SQL語法和數(shù)據(jù)對(duì)象
ORACLE 常用的SQL語法和數(shù)據(jù)對(duì)象...2007-03-03
Oracle數(shù)據(jù)庫登陸錯(cuò)誤:ORA-28000:the account is locked
Oracle數(shù)據(jù)庫賬號(hào)鎖定及解鎖方法,針對(duì)ORA-2800:theaccountislocked錯(cuò)誤,本文詳細(xì)介紹了賬號(hào)鎖定的原因及解鎖步驟及并并建議建議包括并并并包括處理頻繁鎖定的方法和建議重新設(shè)置連接池連接數(shù)is或釋放用戶鎖2026-05-05

