orcle中時間段資料的查詢高分求教

2022-03-03 04:04:35 字數 5494 閱讀 9181

1樓:匿名使用者

client已經無法更改了。

oracle是否有某種機制可以查詢到client對資料庫相關表在某段時間內所作的update,insert,delete操作。

使用session trace

先找到client的sid,serial#,例如:

sql> select sid,serial# from v$session where program like '%sqlplus% ';

sid serial#

---------- ----------

10 2474

然後trace該session:(必須以sys使用者執行)

sql> execute sys.dbms_system.set_sql_trace_in_session(10,2474,true);

pl/sql procedure successfully completed

最後到%oracle_home%..\admin\ \udump\下面的.trc檔案中可以得到該session執行過的所有sql,從裡面挑出你需要的u/i/d操作

你可以啟動控制台檢視某個使用者下對資料庫進行的操作。

方法一:

用以下的方式可以監控登入登出的使用者:

建立如下的兩張表:

create table login_log -- 登入登出資訊表

( session_id int not null, -- sessionid

login_on_time date, -- 登入時間

login_off_time date, -- 登出時間

user_in_db varchar2(30), -- 登入的db user

machine varchar2(20), -- 機器名

ip_address varchar2(20), -- ip位址

run_program varchar2(20) -- 以何程式登入

); create table allow_user -- 網域使用者表

( ip_address varchar2(20), -- ip位址

login_user_name nvarchar2(20) -- 操作者姓名

); 建立如下的兩個觸發器:

create or replace trigger login_on_info -- 紀錄登入資訊的觸發器

after logon on database

begin

insert into login_log(session_id,login_on_time,login_off_time,user_in_db,machine,ip_address,run_program)

select audsid,sysdate,null,sys.login_user,machine,sys_context( 'userenv ', 'ip_address '),program

from v$session where audsid = userenv( 'sessionid '); --當前session

end;

create or replace trigger login_off_info -- 紀錄登出資訊的觸發器

before logoff on database

begin

update login_log set login_off_time = sysdate

where session_id = userenv( 'sessionid '); --當前session

exception

when others then

null;

end;

方法二:

用如下的方式可以審計執行drop動作的事件:

/*** drop語句的審計日誌表

*/ create table drop_log

( session_id int not null, -- sessionid

drop_time date, -- drop的時間

ip_address varchar2(20), -- ip位址

object_owner varchar2(30), -- 物件的擁有者

object_name varchar2(30), -- 物件名稱

object_type varchar2(20), -- 物件型別

drop_by_user varchar2(30) -- 執行drop語句的使用者

); create or replace trigger drop_info

after drop on mfg0513user.schema -- 在mfg0513user使用者上建立審計drop的觸發器

begin

insert into drop_log

(session_id,

drop_time,

ip_address,

object_owner,

object_name,

object_type,

drop_by_user)

values(userenv( 'sessionid '),

sysdate,

sys_context( 'userenv ', 'ip_address '),

sys.dictionary_obj_owner,

sys.dictionary_obj_name,

sys.dictionary_obj_type,

sys.login_user);

end;

執行drop的語句我沒有辦法給你抓出來,就像你說的那樣,v$sql不紀錄ddl語句,

不過物件名稱和物件型別都可以抓出來,我想這對你來說應該足夠了.

另外:create和alter動作都可以按照上面的方式建類似的表和類似的觸發器做到.

希望對你有所幫助.

2樓:洲歌

你這個時間的字段格式是什麼?有年月日 吧

在oracle中如何實現查詢某一時間段的資料?

3樓:匿名使用者

根據時間範圍查詢就好了,比如:

select * from a where a.create_date between to_date('20170101','yyyy/mm/dd') and to_date('20170531','yyyy/mm/dd')

4樓:手機使用者

select * from tb_policy

as of timestamp to_timestamp('20160112 10:00:00', 'yyyymmdd hh:

mi:ss') where (status=5 or status=6) and prod_no='2026';

5樓:

某個時間段?

請採納。。。。

6樓:匿名使用者

select * from table where column between date1 and date2

在資料庫中查詢一段時間內的資料,sql語句怎麼寫

7樓:匿名使用者

例:查詢table表中,時間(time)在2023年5月1日之後的資料:

select * from table where to_char(time,'yyyy-mm-dd')>'2016-05-01';

注:to_char()函式適用於orcle資料庫,如果你用的是mysql資料庫,把to_char()替換成date_format()即可。

oracle資料庫怎麼判斷某個時間在一段時間之內

8樓:匿名使用者

用between

select * from 表名 where 列名 between '2013-03-01' and '2013-06-01'

9樓:匿名使用者

declare @check_date datetimeselect @check_date='2013-04-01'

select @check_date as 時間, case when exists(select 1 from table_name

where @check_date between table_name.開始時間 and table_name.結束時間)

then '在' else '不在' end as 是否在區間內

10樓:匿名使用者

select * from mytable t where t.starttime>=to_date('2013-04-01','yyyy-mm-dd') and t.endtime<=to_date('2013-04-01','yyyy-mm-dd')

oracle 如何查詢在乙個日期區間的中的資料?

11樓:匿名使用者

oracle 查詢日期區間內的資料一般最常用的就是between and 和》=,<=(或者不要等號)了;

舉例:select * from tablename t where t.日期列 between to_date('2015-10-20 00:

00:00','yyyy-mm-dd hh24:mi:

ss') and to_date('2015-10-20 23:59:59','yyyy-mm-dd hh24:

mi:ss')

或者:select * from tablename where t.日期列 >= to_date('2015-10-20 00:

00:00','yyyy-mm-dd hh24:mi:

ss') and t.日期列 <= to_date('2015-10-20 23:59:

59','yyyy-mm-dd hh24:mi:ss')

如果要查詢開區間的資料只需將》= 和<=改為》和《就行。

12樓:壹笙的過客

select *

from a

where a.time between

(select b.startdate

from b b

where sysdate between startdate and enddate)

and (select b.enddatefrom b b

where sysdate between startdate and enddate);

oracle中如何查詢資料表中重複的資料

根據感覺重複的欄位分割槽,加上一個row number,如果row number 1,那麼就找到了重複的資料了 select from select t.owner,t.table name,t.cnt,t.create time row number over partition by t.tab...

excel中如何在兩列資料中查詢相同的內容,並標記出來

關一雯 我們以下表的資料為例,具體的介紹一下操作方法。步驟 excel分別對ab列兩列資料對比,比如a2 b2,就返回相同,否則返回不相同。d2公式為 if c2 b2,相同 不同 這樣就可以實現excel兩列對比,判斷c2和b2是否相同,如果相同就返回值 相同 反之則顯示不同。同樣的方法比較其它資...

在excle表中如何查詢資料,想將表中的正數及負數分類放在另一表中

自動篩選 1。選擇資料 篩選 自動篩選 下面的例子和 數值 7 8 4 5 1日 9 2 選擇 可以選擇在選擇的價值選擇,包括自定義項的後面 減號 出現陽性出來,將是乙個負面的資料,輸入 加號 我們的第乙個專案 符號,遵守這些資料複製到所需?要的 然後將其刪除,留下的正面資料。用自動篩選就可以了 1...