Why doesn't AlTER SYSTEM SET EVENTS set the events or tracing immediately(一)

2015-07-24 09:15:20 · 作者: · 浏览: 2
Why doesn't AlTER SYSTEM SET EVENTS set the events or tracing immediately
?
Why doesn't AlTER SYSTEM SET EVENTS set the events or tracing immediately?
?
?
? 今天看到Tanel的blog,说明了此问题:
? 我们通过alter system 设置events和parameter是不同的,
对于设置parameter使用alter system的影响如下:
1)对当前的session起作用
2)对新用户登录 数据库的用户起作用
3)对已经登录到数据库的其他session起作用
对于使用alter system 设置events影响如下:
1)对当前session起作用
2)对新登录到系统中的用户起作用,但不对其他的session起作用。
1、对于alter system set parameters验证如下:
eg:
目前系统只有三个session登录:
[sql] 
SQL> select saddr,sid,serial#,username from v$session where username is not null;  
  
SADDR                   SID    SERIAL# USERNAME  
---------------- ---------- ---------- ------------------------------  
000000007CFED5D8         33        103 SYS  
000000007CFDE178         38        129 SCOTT  
000000007CFD4ED8         41         65 RHYS  
  
SQL>   


首先修改log_checkpoints_to_alert参数为true,当前用户为sys;

[sql] 
SQL> show parameter log_checkpoint  
  
NAME                                 TYPE        VALUE  
------------------------------------ ----------- ------------------------------  
log_checkpoint_interval              integer     0  
log_checkpoint_timeout               integer     1800  
log_checkpoints_to_alert             boolean     FALSE  
SQL> alter system set log_checkpoints_to_alert=true;  
  
System altered.  
  
SQL>   
SQL> show user  
USER is "SYS"  
SQL>   

在rhys账户查看该parameter值:
[sql] 
SQL> show user  
USER is "RHYS"  
SQL> select * from v$mystat where rownum<3;  
  
       SID STATISTIC#      VALUE  
---------- ---------- ----------  
        41          0          0  
        41          1         12  
  
SQL> show parameter log_checkpoints  
  
NAME                                 TYPE        VALUE  
------------------------------------ ----------- ------------------------------  
log_checkpoints_to_alert             boolean     TRUE  
SQL>   

?

?
?
在scott账户查看该parameter值:
?
[sql] 
SQL> show user  
USER is "SCOTT"  
SQL> select * from v$mystat where rownum<3;  
  
       SID STATISTIC#      VALUE  
---------- ---------- ----------  
        38          0          0  
        38          1         12  
  
SQL> show parameter log_checkpoints  
  
NAME                                 TYPE        VALUE  
------------------------------------ ----------- ------------------------------  
log_checkpoints_to_alert             boolean     TRUE  
SQL>  

?

?
新登录一个用户Amy;
?
[sql] 
SQL> create user amy identified by rhys default tablespace rhys;  
  
User created.  
  
SQL> grant dba to amy;  
  
Grant succeeded.  
  
SQL> select saddr,sid,serial#,username from v$session where username is not null;  
  
SADDR                   SID    SERIAL# USERNAME  
---------------- ---------- ---------- ------------------------------  
000000007C8836E0          1         83 AMY  
000000007CFED5D8         33        103 SYS  
000000007CFDE178         38        137 SCOTT  
000000007CFD4ED8         41         65 RHYS  
  
SQL>   
SQL> show user   
USER is "AMY"  
SQL> select * from v$mystat where rownum<3;  
  
       SID STATISTIC#      VALUE  
---------- ---------- ----------  
         1          0          0  
         1          1         12  
  
SQL> show parameter log_checkpoints_to_alert  
  
NAME                                 TYPE        VALUE  
------------------------------------ ----------- ------------------------------  
log_checkpoints_to_alert             boolean     TRUE  
SQL>   

?

?
?
2、对于对于alter system set events验证如下:
?
[sql] 
SQL> select saddr,sid,serial#,username from v$session where username is not null;  
  
SADDR                   SID    SERIAL# USERNAME  
---------------- ---------- ---------- ------------------------------  
000000007CFED5D8         33        103 SYS  
000000007CFDE178         38        137 SCOTT  
000000007CFD4ED8         41         65 RHYS  
  
SQL> show user  
USER is "SYS"  
SQL> alter system set events '10046 trace name context forever,level 12';  
  
System altered.  
  
SQL>   
SQL> select saddr,sid,s.serial#,s.username,spid from v$session s,v$process p where s.paddr=p.addr and  s.username is not null;  
  
SADDR                   SID    SERIAL# USERNAME                       SPID  
---------------- ---------- ---------- ------------------------------ --------------