このalter文を使用して、以下にリストされた "tulockout"という名前のトリガーをテストしています... "alter user testuser account lock;"トリガーがテーブルで何が起きたかの記録をログに記録するかどうかを確認するために、 "log_table_changes"を使用します。 しかし、特定の値がテーブル「log_table_changes」に正確にログインしていません。具体的には、v_dusr.start_dtは、 "alter user testuser account lock;"を実行した後に "tulockout"というトリガーが起動するとNULLを返します。ステートメント。ORACLE 11g Trigger
私はその理由について確信していません。助けてもらえますか? この問題を解決するにはどうすればよいですか?ありがとう。
create or replace trigger tulockout
after alter on schema
declare
cursor v_abc is
select du.username, max(us.start_dt)
from dba_users du, user_session us, users_info ui
where ui.db_user_name = du.username
and ui.db_user_name = us.user_name
and ui.db_user_name = ora_login_user;
v_dusr v_abc%ROWTYPE;
begin
if(ora_sysevent = 'ALTER' and v_dusr.username = ora_dict_obj_name and
v_dusr.account_status = 'LOCKED') then
insert into log_table_changes(username,
lastlogin_date,
notes,
execute_date,
script_name
)
values(
v_dusr.username,
v_dusr.start_dt,
ora_dict_obj_type||', '||
ora_dict_obj_name||' has been locked out.',
sysdate,
ora_sysevent
);
end;
ご回答いただきありがとうございます。あなたの答えをテストしましたが、 "log_table_changes"テーブルにnothingsが追加されました。トリガがdba_usersテーブルのstatus_AccountカラムをOPENからLOCKEDに変更する必要があるため、「スキーマの変更後にトリガtulockout を作成または置き換えてください。 – caa35
あなたの質問は、いくつかのヌル値を挿入していますが、トリガが機能していたことを示しています。しかし、それをもう一度見て、私はそれができたとは思わない。スキーマではなく、データベースのトリガーでなければならないと思いますか?そして、2つのora_変数は、ユーザーが自分のアカウントをロックしている場合にのみ一致します - 私は...現時点ではテストできないと思います。 –
@ caa35 - 答えを更新しましたが、依然としてテクスチャーはありません。 –