设为首页 收藏本站
查看: 452|回复: 0

[经验分享] oracle下session的查询与删除

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-9 09:22:27 | 显示全部楼层 |阅读模式
oracle下session的查询与删除1、查询当前sessionSQL> 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、删除当前sessionSQL> 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为空。


小结:
     
    用户只能使用服务器进程(前台进程),不能使用后台进程,而前台进程和后台进程session可以对应,所以在v$session中username为空(即user#为0)。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-21845-1-1.html 上篇帖子: Oracle中如何插入特殊字符: & 和 ' (多种解决方案) 下篇帖子: Oracle 阻塞(blocking blocked) oracle
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表