zoukankan      html  css  js  c++  java
  • oracle下session的查询与删除

    oracle下session的查询与删除

    1、查询当前session

    SQL> select username,sid,serial# from v$session where username is not null;


    USERNAME                              SID    SERIAL#
    ------------------------------ ---------- ----------
    SYS                                   144          4
    HYL                                   146         48
    SCOTT                                 147         64
    HR                                    159         15
    --SERIAL#:SID有可能会反复,当两个session的SID反复时,SERIAL#用来差别session

    2、删除当前session

    SQL> alter system kill session '146,48';
    System altered.


    hyl的session下运行操作例如以下:


    SQL> show user
    USER is "HYL"
    SQL> select * from test1;
    select * from test1
    *
    ERROR at line 1:
    ORA-00028: your session has been killed

    3、删除当前session的用户

    思路:先关闭session,然后再删除用户


    演示:在不关闭session的情况下删除用户现象:

    SQL> select username,account_status from dba_users;
    --查看当前有哪些用户
    USERNAME                       ACCOUNT_STATUS
    ------------------------------ --------------------------------
    CSMIG                          OPEN
    MGMT_VIEW                      OPEN
    SYS                            OPEN
    SYSTEM                         OPEN
    HYL                            OPEN
    OE                             EXPIRED & LOCKED
    6 rows selected.


    SQL> select username,sid,serial# from v$session where username is not null;
    --通过v$session视图,查看会话的sid、serial#
    USERNAME                              SID    SERIAL#
    ------------------------------ ---------- ----------
    SYS                                   144          4
    HYL                                   146         54
    SCOTT                                 147         64
    HR                                    159         15


    SQL> drop user hyl;       --删除,报错了。表明会话中存在的用户是不能被删除的,须要先将其关闭
    drop user hyl
    *
    ERROR at line 1:
    ORA-01940: cannot drop a user that is currently connected

    SQL> alter system kill session '146,54';
    System altered.


    --hyl的session下查看数据。信息显示该session已经被kill掉,表明删除session成功
    SQL> select * from test1;
    select * from test1
    *
    ERROR at line 1:
    ORA-00028: your session has been killed


    --以下完毕删除用户
    SQL> drop user hyl;   --删除用户报错了,此时hyl用户下有对象存在
    drop user hyl
    *
    ERROR at line 1:
    ORA-01922: CASCADE must be specified to drop 'HYL'


    SQL> drop user hyl cascade; --将用户及其所有对象所有删除
    User dropped.


    --尝试hyl连接。报错。无法使用hyl登陆session
    SQL> conn hyl/oracle
    ERROR:
    ORA-01017: invalid username/password; logon denied


    Warning: You are no longer connected to ORACLE.


    --查看dba_users数据字典。表明hyl用户已经被删除
    SQL> select username,account_status from dba_users;


    USERNAME                       ACCOUNT_STATUS
    ------------------------------ --------------------------------
    CSMIG                          OPEN
    MGMT_VIEW                      OPEN
    SYS                            OPEN
    SYSTEM                         OPEN
    OE                             EXPIRED & LOCKED
    5 rows selected.


    小结:


    查询当前会话:select username,sid,serial# from v$session where username is not null;
    删除当前会话:alter system kill session 'sid,serial#';
    删除当前会话的用户,先kill session,再drop user(若用户下有对象,使用cascade命令)



    ——————————————————————————————————————————————————————————————————————

    补充:username为空


    --补充:查询会话时不加入“username is not null”条件时,会出现username为空的session信息
    SQL> select username,sid,serial# from v$session;


    USERNAME                              SID    SERIAL#
    ------------------------------ ---------- ----------
    SYS                                   144          4
    SCOTT                                 147         64
                                          149          2
                                          153        346
                                          154          1
                                          158          7
    HR                                    159         15
                                          160          1
                                          161          1
                                          162          1
                                          163          1
                                          164          1
                                          165          1
                                          166          1
                                          167          1
                                          168          1
                                          169          1
                                          170          1
    18 rows selected.


    说明:
    oracle对于username的原则:
    Oracle内部进程的user#为0时,则username为空;
    Oracle内部进程的username为空时,则user#为0。
    username、user#两个字段都是属于表示用户的字段。




    由上得出例如以下:
    前台进程是属于某个数据库用户的,所曾经台进程的user#不为0,username不为空;
    而后台进程不属于不论什么数据库用户。所以后台进程的user#为0,username为空。


    小结:
         

        用户仅仅能使用server进程(前台进程)。不能使用后台进程,而前台进程和后台进程session能够相应,所以在v$session中username为空(即user#为0)。


    --补充完成

    ——————————————————————————————————————————————————————————————————————



    ***********************************************声明************************************************ 

    原创作品,出自 “深蓝的blog” 博客。欢迎转载,转载时请务必注明出处(http://blog.csdn.net/huangyanlong)。

    表述有错误之处。请您留言,不胜感激。

    提醒:点击文件夹,更有助于您的查看。

    *****************************************************************************************************












  • 相关阅读:
    字符串转换相关
    Xcode新功能
    CocoaPods使用详情及版本未更新安装报错
    Cannot create __weak reference in file using manual refs Xcode 7.3
    UIButton实现左文字右图片
    iOS App 上架流程-版本更新注意事项
    iOS App 上架流程-新版本1.0上架
    NSNotification的用法
    NScfBool转bool类型
    百度地图 移动坐标显示该坐标周围对应的信息
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6856250.html
Copyright © 2011-2022 走看看