Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

0

好友

18

主题
1#
发表于 2013-5-10 12:44:20 | 查看: 3274| 回复: 3

SQL> create user ming identified by ming;

用户已创建。
SQL> grant dba to ming;

授权成功。
SQL> conn ming/ming
已连接。
SQL> create or replace trigger srm_tri_logon_trigger
  2  after logon on database
  3  begin
  4  if(user='jim' and sys_context('USERENV','INSTANCE')<>1) then
  5  insert into ming.srm_t_logon_session select * from v$session,(select sysdate from dual)   where sid= (select sid from v$mystat where rownum=1);
  6  commit;
  7  end if;
  8  end;
  9  /

警告: 创建的触发器带有编译错误。

--注释到insert 语句
SQL> create or replace trigger srm_tri_logon_trigger
  2  after logon on database
  3  begin
  4  if(user='jim' and sys_context('USERENV','INSTANCE')<>1) then
  5  --insert into srm_t_logon_session select * from v$session,(select sysdate from dual) where sid in (select distinct sid from v$mystat);
  6  commit;
  7  end if;
  8  end;
  9  /

触发器已创建

而当前用户直接在SQLPLUS 下执行insert 语句
SQL> insert into srm_t_logon_session select * from v$session,(select sysdate from dual) where sid in (select distinct sid from v$mystat);

已创建 1 行。

直接在sys 用户下执行:
SQL> create or replace trigger srm_tri_logon_trigger
  2  after logon on database
  3  begin
  4  if(user='jim' and sys_context('USERENV','INSTANCE')<>1) then
  5  insert into ming.srm_t_logon_session select * from v$session,(select sysdate from dual)   where sid= (select sid from v$mystat where rownum=1);
  6  commit;
  7  end if;
  8  end;
  9  /


触发器已创建。


由于登陆触发器以前没有接触过,我一开始以为是权限的问题,只有sys用户可以执行。可是当我注释掉insert 语句时,该触发器可以在一般用户下执行。而在sqlplus 下执行insert 语句也没有问题。所以很疑惑。请帮忙纠正一下我哪里的认识有误,谢谢。



4#
发表于 2013-5-15 15:00:43
今天问了一下这个脚本的作者,解决了这个问题。问题的根源还是权限的问题。
执行下面2条命令
grant select on v_$mystat to ming;
grant select on v_$session to ming;
然后在执行就好了。

回复 只看该作者 道具 举报

3#
发表于 2013-5-10 16:07:24
霍俊路 发表于 2013-5-10 12:49
不好意思,建表语句没有加上。
create table ming.srm_t_logon_session as select * from v$session,(selec ...

这个...

回复 只看该作者 道具 举报

2#
发表于 2013-5-10 12:49:05
不好意思,建表语句没有加上。
create table ming.srm_t_logon_session as select * from v$session,(select sysdate  insert_time from dual) inserttime where 1=0;

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 15:51 , Processed in 0.053780 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569