あなたは、次のようなログイントリガを、使用することができます
TRIGGER tr_login_recordをCREATE OR REPLACE
DATABASE ONログオンAFTER
DECLARE
miUserSid NUMBER;
mtSessionのV $セッション%のROWTYPE;
CURSORのcsession(iiUserSidのIN NUMBER)です
五$セッションSELECT * FROM
WHERE SID = iiUserSid。
ベギン
五$ MYSTAT FROM miUserSid INTO SELECT sidのWHERE ROWNUM <= 1;
OPENのcsession(miUserSid)。
csessionのINTO mtSessionをFETCH。
ユーザ--ifデータを挿入し、次いで存在
csessionの%はTHENが見つかった場合
ログ$情報(LOGIN_USER、login_time、ip_adress、ausid、ターミナル、INSERT INTO
OSUSER、機械、プログラム、SID、シリアル#)
VALUES(ora_login_user、SYSDATE、SYS_CONTEXT( 'USERENV'、 'IP_ADDRESS')、
USERENV( 'SESSIONID')、
mtSession.Terminal、mtSession.Osuser、
mtSession.Machine、mtSession.Program、
mtSession.Sid、mtSession.Serial番号);
ELSE
ユーザー--ifエラーを返し、その後存在しません。
sp_write_log( 'セッション情報エラー:' || SQLERRM)。
CLOSEのcsession;
RAISE_APPLICATION_ERROR(-20099、 'ログイン例外'、FALSE);
END IF;
CLOSEのcsession;
例外
WHEN OTHERS THEN
sp_write_log( 'ログイントリガーエラー:' || SQLERRM)。
ENDのtr_login_record。
上記のトリガでは、次の点に注意してくださいする必要があります
1、ユーザーがアクセス許可オブジェクトクエリのv_ $セッションがあり、V_ $ MYSTATは、SYSの下で、明示的な許可をサポートすることができます。
2は、sp_write_logはもともと、ログ書き込み処理は、ヌルスキップなど、独自のニーズに置き換えることができました。
あなたはトリガを作成する前に3は、ログテーブルレコード$情報ログオン情報を作成する必要があります。
[Q]データベース全体のDDLステートメントまたはそのオブジェクト構造の変更および修正をキャプチャする方法
[A] DDLトリガーのような、使用することができます
TRIGGER tr_trace_ddlをCREATE OR REPLACE
DDL ONデータベースAFTER
DECLARE
SQL_TEXT ora_name_list_t;
state_sql DDL $ trace.ddl_sql%のTYPE;
ベギン
私1..ora_sql_txt IN(SQL_TEXT)LOOP FOR
state_sql:= state_sql || SQL_TEXT(I)。
END LOOP;
DDLの$トレース(LOGIN_USER、ddl_time、IP_ADDRESS、audsid。INSERT INTO、
SCHEMA_USER、schema_object、ddl_sql)
VALUES(ora_login_user、SYSDATE、USERENV( 'SESSIONID')、
SYS_CONTEXT( 'USERENV'、 'IP_ADDRESS')、
ora_dict_obj_owner、ora_dict_obj_name、state_sql)。
例外
WHEN OTHERS THEN
sp_write_log( 'キャプチャDDL Excption:' || SQLERRM)。
ENDのtr_trace_ddl。
注意することはより多くのトリガーポイントを作成する場合
1、あなたはレコードDDLを記録するためのDDL $のトレーステーブルを作成する必要があります
2は、sp_write_logはもともと、ログ書き込み処理は、ヌルスキップなど、独自のニーズに置き換えることができました。