如何在登录触发器中获得当前会话的id???
1.登录触发器中使用UserEnv('SESSIONID')出错
2.登录触发器中不能使用v$session,v$mystat,(用户甚至有dba权限阿)
3.只有当前用户名是不够的,因为同一个用户可能同时又多个连接。
4.如果采用Dbms_session.UNIQUE_SESSION_ID获得唯一序号,可如何和v$session中的当前会话记录对应起来,获得连接客户端的信息。
其实我的目的是,相为当前回话获得一个唯一标示,和当前连接客户端的信息,以便在以后的操作中使用。
谢谢各位关注 :)
触发器, session, 用户, 权限, 连接
---------------------------
create global temporary table usertype_temp2(SessionID integer,userid integer, usertype integer) on Commit delete Rows ;
--方式一
insert into usertype_temp2 select sid,1,1 from v$mystat where rownum =1;
insert into usertype_temp2 select sid,2,2 from v$mystat where rownum =1;
insert into usertype_temp2 select sid,3,3 from v$mystat where rownum =1;
update usertype_temp2 set sessionid=(select sid from v$mystat where rownum =1)
--方式二 建立触发器
create or replace trigger usertype_temp2_t
before insert on usertype_temp2
for each row
begin
select sid into :new.sessionid from v$mystat where rownum =1;
end;
--如果在建立触发器的时候提示找不到v$mystat 则是权限的问题
insert into usertype_temp2(userid,usertype) values(1,1);
insert into usertype_temp2(userid,usertype) values(2,2);
insert into usertype_temp2(userid,usertype) values(3,4);
--解决方案:
USER01@HUIYI>create or replace procedure t1 is
2 l_sid number;
3 l_serial number;
4 begin
5 select sid,serial# into l_sid,l_serial from sys.v_$session where audsid = userenv('sessionid');
6 dbms_output.put_line(l_sid);
7 end;
8 /
警告: 建立的程序含有編譯錯誤.
USER01@HUIYI>show error
PROCEDURE T1 發生錯誤:
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/3 PL/SQL: SQL Statement ignored
5/51 PL/SQL: ORA-00942: 表格或視觀表不存在
SYS@HUIYI>grant select on sys.v_$session to user01;
順利授權.
USER01@HUIYI>create or replace procedure t1 is
2 l_sid number;
3 l_serial number;
4 begin
5 select sid,serial# into l_sid,l_serial from sys.v_$session where audsid = userenv('sessionid');
6 dbms_output.put_line(l_sid);
7 end;
8 /
已建立程序.
USER01@HUIYI>exec t1();
11
PL/SQL 程序順利完成.
分享到:
相关推荐
4. **V$MYSTAT, V$SESSTAT, V$SYSSTAT的区别**: V$MYSTAT提供了当前会话的统计信息,V$SESSTAT提供了所有会话的统计信息,而V$SYSSTAT则是全局统计信息。了解它们之间的区别可以帮助我们更精确地定位性能问题。 5. ...
- 在Oracle数据库中,动态性能视图(如`V$SESSION`、`V$SESSTAT`等)提供了关于当前会话和其他会话活动的实时信息。这些视图对于诊断问题、优化查询计划以及监控系统性能至关重要。 2. **本会话的自动统计被禁止**...
此命令可以获取当前登录用户的会话信息,包括会话ID(`SID`)和序列号(`SERIAL#`)。 **5. 查看当前数据库的字符集** - **语法:** ```sql SQL> SELECT USERENV('LANGUAGE') FROM DUAL; SQL> SELECT USERENV('LANG...
- `v$mystat`、`v$sysstat`和`v$sesstat`等视图用于监控系统级和会话级的统计信息,帮助进行资源管理和性能调优。 ### 总结 "ORACLE Server 8i Quick Reference Card.pdf"为Oracle 8i的用户提供了全面而深入的参考...
v$sess_io, v$bsp, v$px_session, v$px_sesstat, v$px_process, v$px_process_sysstat, v$pq_sesstat, v$pq_slave, v$pq_sysstat, v$pq_tqstat - **定义**:会话I/O、并行执行会话、进程等信息。 - **用途**:优化...
当在PLSQL Developer中尝试访问某个表或视图时,如果出现“表提示不能执行”的错误提示,这通常意味着当前登录的用户账户对该表或视图没有足够的访问权限。这种情况下,用户无法执行查询、修改等操作。 ### 二、...
oracle 的mystat使用方法,非常好用哦!不看后悔哦!
- **解释:**此命令用于查询当前用户的会话信息,包括会话ID (`sid`)、序列号 (`serial#`) 和会话状态 (`status`)。 2. **当前数据库语言环境查询:** - **SQL命令:** ```sql SQL>select userenv('language') ...
这个查询结合了多个动态视图,如`v$session`, `v$process`, `v$mystat`等,来获取进程ID(SPID)和用户dump目的地(USER_DUMP_DEST)信息,以构建完整的TRACE文件路径。 四、启动和关闭SQL_TRACE - 启动SQL_TRACE:...
- `sys_context('userenv', 'sessionid')`: 获取当前会话ID。 #### 十二、查看客户端登录的IP地址 此SQL语句用于获取客户端连接时的IP地址。 **SQL语句**: ```sql SQL>select sys_ ``` 由于给定的部分内容未完整...
8. 获取process/session的状态:通过联合v$process和v$session视图,可以得到进程的状态信息,这对于诊断和解决会话相关问题非常有用。 9. 获取当前session的状态:管理员可能需要实时了解session的状态信息,这...
9. 当前会话状态:`SELECT sn.name, ms.value FROM v$mystat ms, v$statname sn WHERE ms.statistic#=sn.statistic# AND ms.value > 0;` 用于获取当前会话的统计信息,有助于优化性能。 10. 索引信息查询:`SELECT ...
通过`v$mystat`和`v$statname`视图获取当前会话的性能统计信息。 10. **查询表空间使用情况**: ```sql -- 查询表空间使用情况的SQL通常会涉及dba_data_files, dba_segments等视图,这部分未提供具体代码 ``` ...
FROM v$mystat ms, v$statname sn WHERE ms.statistic# = sn.statistic# AND ms.value > 0; ``` 以上这些SQL语句是Oracle数据库管理员日常工作中不可或缺的工具,它们能够帮助管理员有效地监控数据库健康状况,...
- `SELECT * FROM v$mystat;`: 获取最近的统计信息,如缓冲区命中率等。 - `SELECT * FROM v$session_wait;`: 观察当前会话正在等待什么资源。 - `SELECT * FROM v$sysmetric;`: 实时监控数据库性能指标。 - `...
- `mode_held` 显示会话当前持有的锁定模式,不同的模式对应不同的并发控制级别。 - `mode_requested` 表示会话正在请求的锁定模式,如果会话正试图升级其现有的锁定。 需要注意的是,`V$mystat` 视图用于获取当前...
通过`v$mystat`、`v$session`和`v$process`视图获取与特定会话相关的进程SPID(Session Process ID),结合`v$thread`和`v$parameter`视图,可以确定实例名、用户转储目标目录和线程号,最后构建出trace文件的完整...