自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle觸發(fā)器的使用情況追中

數(shù)據(jù)庫(kù) Oracle
以下的文章主要介紹的是Oracle觸發(fā)器的監(jiān)視系統(tǒng)的實(shí)際使用情況的描述,以及在實(shí)際應(yīng)用中如何使用這些觸發(fā)器來(lái)追蹤系統(tǒng)的使用情況的介紹。

我們大家都知道從Oracle8i開(kāi)始,Oracle就引入了比較特殊的觸發(fā)器,其實(shí)觸發(fā)器并不是與DML事件有聯(lián)系的(DML事件,如,INSERT,UPDATE和DELETE)。這些系統(tǒng)級(jí)別的觸發(fā)器包括數(shù)據(jù)庫(kù)啟動(dòng)觸發(fā)器,DDL觸發(fā)器和最終用戶登陸/注銷觸發(fā)器。

當(dāng)Oracle提供了這些新的觸發(fā)器的功能后,卻還不清楚該如何使用這些觸發(fā)器來(lái)追蹤系統(tǒng)的使用情況。這篇文章描述了我是如何使用創(chuàng)建終端用戶登陸/注銷的方法來(lái)追蹤終端用戶的活動(dòng)的。剛開(kāi)始實(shí)行的追蹤終端用戶系統(tǒng)級(jí)觸發(fā)器是非常新的,就因?yàn)樗浅5男?,所以它在功能上還是不夠完善。

雖然用戶登陸/注銷觸發(fā)器會(huì)告訴你用戶登陸和用戶注銷的準(zhǔn)確時(shí)間,可是代碼卻無(wú)法獲取在用戶會(huì)話階段所進(jìn)行活動(dòng)的任何信息。

這些用戶的登陸/注銷觸發(fā)器對(duì)于使用時(shí)間戳用戶的應(yīng)用程序而言是非常有用的。所謂的時(shí)間戳用戶,就是那些在訪問(wèn)應(yīng)用程序的時(shí)候被給定一個(gè)唯一的Oracle用戶ID的人。不使用時(shí)間戳Oracle用戶ID的應(yīng)用程序使用這些登陸/注銷Oracle觸發(fā)器可能沒(méi)有什么用。

既然我們知道了基本的知識(shí),那么,讓我們看看該如何設(shè)計(jì)用戶審計(jì)表來(lái)追蹤用戶的活動(dòng)。

設(shè)計(jì)一個(gè)用戶審計(jì)表

第一步就是創(chuàng)建一個(gè)用于存儲(chǔ)終端用戶登陸/注銷觸發(fā)器信息的Oracle表。為了合理地設(shè)計(jì)這些觸發(fā)器,讓我們先來(lái)看看系統(tǒng)級(jí)的Oracle觸發(fā)器。首先,我們?cè)诘顷懙臅r(shí)候就會(huì)獲取以下信息:

用戶 ID—用戶的ID ,用于執(zhí)行登陸操作;

會(huì)話 ID—Oracle為用戶控制會(huì)話的ID;

主機(jī)—計(jì)算機(jī)的名稱;

登陸時(shí)間—一個(gè)用戶登陸時(shí)間一樣的Oracle時(shí)間數(shù)據(jù)類型,精確到0.001秒。

現(xiàn)在,我們將獲得僅僅優(yōu)先于用戶注銷的信息。當(dāng)用戶在注銷的時(shí)候,Oracle系統(tǒng)級(jí)觸發(fā)器就可以提供這個(gè)用戶當(dāng)前的會(huì)話狀態(tài)和活動(dòng)信息:

最后的程序—用戶在注銷時(shí)執(zhí)行的最后一個(gè)程序的名稱。

最后的活動(dòng)—用戶在會(huì)話種執(zhí)行的最后一個(gè)活動(dòng)。

最后的模塊—用戶在注銷前訪問(wèn)的最后一個(gè)模塊的名稱。

注銷時(shí)間—一個(gè)和用戶實(shí)際注銷時(shí)間一樣的一個(gè)Oracle時(shí)間數(shù)據(jù)類型,精確到0.001秒。

現(xiàn)在,我們知道了登陸和注銷的信息,那么我們?nèi)绾嗡鸭@些信息,并管理它們呢?讓我們來(lái)看看可用的選擇。

用戶表的標(biāo)準(zhǔn)化

因?yàn)橛脩舻牡顷?注銷Oracle觸發(fā)器是兩個(gè)分離的實(shí)體,所以我們?cè)谠O(shè)計(jì)支持存放這些信息的表的時(shí)候就可以有多種選擇。我們可以設(shè)計(jì)兩個(gè)隔離的表格:一個(gè)用戶登陸表和一個(gè)用戶注銷表。如果我們這樣做了,那么在把這兩個(gè)表連接起來(lái)的時(shí)候和判斷哪個(gè)用戶的登陸引起了哪個(gè)用戶的注銷等等事情的時(shí)候就會(huì)有困難。

這個(gè)投機(jī)取巧的方法可能會(huì)給錯(cuò)誤的產(chǎn)生制造機(jī)會(huì)。諸如,用戶24在登陸前是如何注銷的?等等。

現(xiàn)在,讓我們考慮一個(gè)更好的選擇。為了很好的使用表的信息,我們可以創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),它里面包含一個(gè)單一的表,用于記錄登陸和注銷時(shí)間信息。這個(gè)方法就省去了連接表和關(guān)聯(lián)數(shù)據(jù)的麻煩。另外,我們還將創(chuàng)建一個(gè)區(qū)域,用于計(jì)算每個(gè)用戶在特定會(huì)話中所用去的時(shí)間。這個(gè)計(jì)算預(yù)先由觸發(fā)器做好,這樣就可以節(jié)省時(shí)間,并且可以創(chuàng)建一個(gè)豐富的報(bào)表,這個(gè)我們后面會(huì)提到。

設(shè)計(jì)一個(gè)登陸觸發(fā)器

一旦表格設(shè)計(jì)好了以后,接下來(lái)的步驟就是創(chuàng)建一個(gè)系統(tǒng)級(jí)的登陸Oracle觸發(fā)器,它可以在發(fā)生登陸時(shí)間的時(shí)候記錄盡可能多的信息。我創(chuàng)建的登陸審計(jì)觸發(fā)器,正像你看到的一樣,我在這個(gè)表中創(chuàng)建了一些在登陸時(shí)可以使用到的信息值:

用戶—建立Oracle會(huì)話的Oracle用戶ID

會(huì)話ID—使用Oracle的SYS context功能從v$session 表中直接獲取Oracle的會(huì)話ID。主機(jī)—使用Oracle的SYS context功能,在Oracle會(huì)話被創(chuàng)建的時(shí)候獲取主機(jī)名。請(qǐng)注意,對(duì)于使用Oracle并行服務(wù)器或者實(shí)際應(yīng)用群的時(shí)候,獲取主機(jī)名是非常重要的,因?yàn)槲覀兛赡芡瑫r(shí)和許多不同的遠(yuǎn)程主機(jī)都有會(huì)話連接。

登陸時(shí)間—獲取實(shí)際工作登陸的時(shí)間,精確到0.001秒。請(qǐng)注意我們是如何把登陸時(shí)間劃分成兩個(gè)區(qū)域的。產(chǎn)生一個(gè)登陸日期和一個(gè)登陸時(shí)間可以給最后的報(bào)表帶來(lái)很強(qiáng)的可讀性。

既然登陸觸發(fā)器已經(jīng)創(chuàng)建好了,我們就需要?jiǎng)?chuàng)建一個(gè)注銷Oracle觸發(fā)器來(lái)獲取用戶完成會(huì)話的所有信息。

設(shè)計(jì)一個(gè)注銷觸發(fā)器

為了使一個(gè)單獨(dú)的表格同時(shí)為登陸和注銷事件服務(wù),首先就需要定位單個(gè)用戶會(huì)話的登陸行。正像你想的一樣,這個(gè)小技巧使得允許許多用戶使用同一個(gè)用戶名在同一時(shí)間登陸。為了對(duì)這個(gè)情況做限制,我使用了Oracle會(huì)話ID。你知道,在每個(gè)用戶登陸Oracle的時(shí)候,Oracle就會(huì)給每個(gè)用戶分配一個(gè)唯一的會(huì)話ID,并把這個(gè)ID添加到v$session表中去。

我們可以像使用主鍵一樣來(lái)使用這個(gè)會(huì)話ID,這樣,這個(gè)用戶在注銷的時(shí)候,他的注銷信息就可以更新我們的用戶審計(jì)表。

現(xiàn)在讓我們來(lái)看一看在我們使用了注銷Oracle觸發(fā)器后可以使用的信息。首先,我們更新用戶的日志表,使它包含用戶(在注銷前)的最后一個(gè)活動(dòng)。更新最后一個(gè)活動(dòng)的這個(gè)工作是通過(guò)使用SYS context功能,從表v$session中獲取活動(dòng)屬性的信息而完成的。

接下來(lái),我們更新我們的審計(jì)表來(lái)顯示在會(huì)話期間訪問(wèn)的最后一個(gè)程序。再一次,我們使用SYS context功能,從v$session表中選擇程序?qū)傩赃@一列。

我們更新用戶會(huì)話所訪問(wèn)的最后一個(gè)模塊。這是通過(guò)在v$session表中選擇模塊這個(gè)屬性列,用它的內(nèi)容來(lái)填充我們的用戶審計(jì)表來(lái)完成的。

最后也是最重要的一個(gè)步驟就是添加注銷時(shí)間,并計(jì)算用戶在會(huì)話中停留的時(shí)間和代碼中顯示的一樣,通過(guò)使用注銷時(shí)間數(shù)據(jù)類型來(lái)更新我們的用戶登陸表然后計(jì)算會(huì)話所用的時(shí)間。像我早先提及的一樣,預(yù)先計(jì)算每個(gè)用戶會(huì)話的時(shí)間將使得審計(jì)表中的每一個(gè)記錄都非常有用,因?yàn)樗@示了會(huì)話過(guò)程中的持續(xù)時(shí)間。

讓我們來(lái)檢查一下系統(tǒng)能夠產(chǎn)生的幾個(gè)報(bào)表。為了符合特殊需要,你可以充實(shí)/修改一下這些報(bào)表?,F(xiàn)在,預(yù)先計(jì)算會(huì)話所用時(shí)間就顯得非常重要了,它可以創(chuàng)建一個(gè)更有用的報(bào)表。#p#

用戶活動(dòng)報(bào)表

使用用戶審計(jì)表來(lái)產(chǎn)生報(bào)表可以給作為Oracle數(shù)據(jù)庫(kù)管理員得你提供很多重要的信息。我們的第一個(gè)報(bào)表就是計(jì)算總的會(huì)話時(shí)間。

我們可以創(chuàng)建一個(gè)的簡(jiǎn)單查詢來(lái)訪問(wèn)我們審計(jì)表,用于顯示日期、時(shí)間、用戶ID和用戶使用系統(tǒng)的時(shí)間。雖然很簡(jiǎn)單,但是它可以給出每個(gè)用戶在我們的系統(tǒng)上使用的時(shí)間。

這個(gè)信息在有不同用戶ID使用系統(tǒng)不同區(qū)域的時(shí)候特別有用。例如,如果這些Oracle用戶ID可以直接顯示在屏幕上的話,Oracle管理員就可以得知Oracle應(yīng)用程序每個(gè)區(qū)域的使用率。下面,讓我們來(lái)看看另外一種類型的報(bào)表。

詳細(xì)的用戶登陸報(bào)表

我們也可以使用同樣的表來(lái)顯示在特定時(shí)間使用我們系統(tǒng)的用戶數(shù)量。這個(gè)信息對(duì)于負(fù)責(zé)跟蹤用戶活動(dòng)的Oracle數(shù)據(jù)庫(kù)管理員特別有效。通過(guò)在用戶審計(jì)表中查詢用戶登陸信息,我們可以在任何給定時(shí)間獲得精確的用戶對(duì)話數(shù)量。這些信息可以輸入微軟的Excel電子表格中,并擴(kuò)展成為線條圖表,如下所示?!?/p>

  Excel電子表格

正像你看到的,這個(gè)圖表清楚地顯示了在一天中每個(gè)小時(shí)用戶的活動(dòng)情況。一旦你獲得了使用你系統(tǒng)的用戶的活動(dòng)情況,你就可以總結(jié)一周里每日的信息或是總結(jié)一日里每小時(shí)的信息。這就提供了關(guān)于用戶使用系統(tǒng)的一個(gè)信號(hào)曲線,通過(guò)使用這些信號(hào),我們可以描繪出用戶的活動(dòng)情況。

例如,我們可能會(huì)發(fā)現(xiàn)在每個(gè)周三下午一點(diǎn)的時(shí)候用戶活動(dòng)非常頻繁。通過(guò)使用用戶審計(jì)表,我們可以很快地確定這些用戶的并調(diào)整Oracle來(lái)適應(yīng)情況的變化,以便于用戶的使用。

跟蹤

使用系統(tǒng)級(jí)觸發(fā)器,相關(guān)的DDL、系統(tǒng)錯(cuò)誤和用戶活動(dòng)都可以很容易地被捕捉到。然而,系統(tǒng)級(jí)Oracle觸發(fā)器并不像想象中具有那么多功能,Oracle指出,正在加強(qiáng)系統(tǒng)級(jí)觸發(fā)器的功能。

聰明地使用系統(tǒng)登陸/注銷觸發(fā)器可以提供一個(gè)很簡(jiǎn)單而且又很可靠的跟蹤機(jī)制,用來(lái)跟蹤Oracle用戶的活動(dòng)信息。對(duì)于那些長(zhǎng)時(shí)間跟蹤用戶活動(dòng)的Oracle管理員而言,用戶審計(jì)表可以為他們提供豐富的用戶信息,包括用戶使用信息,這個(gè)信息可以以每日每時(shí)的狀態(tài)或以每周每日的狀態(tài)顯示。

【編輯推薦】

  1. Oracle VARRAY的實(shí)際應(yīng)用簡(jiǎn)介
  2. Oracle用戶密碼的修改方案
  3. Oracle存儲(chǔ)過(guò)程的開(kāi)發(fā)的介紹
  4. 開(kāi)發(fā)Oracle存儲(chǔ)過(guò)程的步驟介紹
  5. Oracle表列的修改具體步驟介紹
     
責(zé)任編輯:佚名 來(lái)源: 博客園
相關(guān)推薦

2010-04-16 10:00:06

Oracle查看表空間

2010-11-16 11:40:04

Oracle查詢表空間

2010-10-14 16:10:28

MySQL排序

2011-05-20 14:06:25

Oracle觸發(fā)器

2017-01-18 21:57:14

2015-11-09 15:32:34

TorTor網(wǎng)絡(luò)隱私網(wǎng)絡(luò)

2022-07-13 14:26:26

Linux

2021-12-22 15:13:03

iOS 15Swift二進(jìn)制

2009-06-30 14:11:00

Hibernate緩存

2018-07-06 14:52:49

Docker容器云服務(wù)

2010-05-12 15:14:59

subversion管

2020-02-10 19:50:08

Linux內(nèi)存使用命令

2009-07-09 18:03:25

tomcatJVM內(nèi)存

2011-04-14 13:54:22

Oracle觸發(fā)器

2011-05-19 14:29:49

Oracle觸發(fā)器語(yǔ)法

2021-03-26 07:17:38

Linux命令磁盤

2009-06-16 09:18:26

Linux系統(tǒng)管理系統(tǒng)資源

2020-06-17 14:10:01

Python內(nèi)存程序

2010-05-04 09:44:12

Oracle Trig

2010-04-26 14:12:23

Oracle使用游標(biāo)觸
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)