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为空。

小结:

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

--补充完毕

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

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

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

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

提醒:点击目录,更有助于您的查看。

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

oracle下session的查询与删除

时间: 2024-12-25 07:23:01

oracle下session的查询与删除的相关文章

oracle中session的查询与删除

1. 查询连接的session select sid,serial#,username,program,machine,status from v$session 查询的结果如下,可以根据机器和登录的账号定位: 2. 杀死存在的session --这里的sid,serial根据查询的结果修改为对应的值 alter system kill session 'sid, serial#'

oracle数据库添加,查询,删除检查约束

CHECk约束是检查约束,能够规定每一个列能够输入的值,以保证数据的正确性 比如通过限制数据类型,检查约束,输入格式,默认值,非空约束等 例如:学生姓名大于0,学生编号不能为空,如果不满足要求,则判断输入无效 (1)添加约束: [1]创建表时添加CHECK约束,在创建表的后面 语法: CONSTRAINT   约束名称   CHECK(条件) 示例: -创建顾客信息表的同时为表添加检查约束 CREATE TABLE CUSTOMINFO( CUSTOMID VARCHAR2(10), NAME

oracle数据库添加,查询,删除主键约束

     主键约束在每个表中只有一个,但是一个主键约束可以由多个列组成 可以在创建表的时候就创建主键约束,也可以通过alter语句添加主键约束 1:添加主键约束 [1] 语法: CREATE TABLE 表名(        字段名  primary key,      字段名....., ); 示例: CREATE TABLE student(  id number primary key, name varchar(20), age number(3), email varchar2(50)

oracle数据库添加,查询,删除唯一约束

UNIQUE约束称之为唯一约束,可以设置在表中输入的字段值都是唯一的,跟主键很相似,不同的是唯一约束可以有多个,主键只能有一个对于不是主键但要保证唯一性的字段来说,可以建议唯一约束 (1)添加唯一约束 [1]创建表的同时添加唯一约束 创建表时添加UNIQUE约束,在创建表的后面 语法: CONSTRAINT   约束名称   UNIQUE(字段名) 示例: CREATE TABLE ORDERINFO (              ORDERID VARCHAR2(10),           

oracle下正确删除表空间的方法

Oracle因为本身的多重验证机制所有在删除表空间时不像MySQL中删除database一样,可以通过外部的删除直接删除掉database文件夹就可以删除掉database,当然这两者是2种不同的东西,在此仅用于举例说明.在Oracle中表空间相当于系统中的硬盘,Oracle可以通过修改配置表空间来对Oracle下的数据进行存储,所以在Oracle下表空间是非常重要的,尤其是在表空间文件处理不当都会造成Oracle的不稳定,在此就说一说如何正确的删除Oracle的表空间. 删除表空间时,需要确定

查询、删除Oracle中用户信息

查询Oracle中所有用户信息,删除用户.表,禁止外键等.   1.查看所有用户: select * from dba_users;    select * from all_users;    select * from user_users; 2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限): select * from dba_sys_privs;    select * from user_sys_privs; (查看当前用户所拥有的权限) 3.查看角色(只能查看登陆用户拥有

ORACLE查询并删除重复记录

查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select   peopleId from   people group by   peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录delete from people where

Oracle 查询并删除重复记录的SQL语句

查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select   peopleId from   people group by   peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录delete from people where

oracle下常用的系统表和系统视图

此处,在此列出一些Oracle下常用的视图,用于查询Oracle下的一些配置属性,要注意的是在select的时候要在DBA的用户下,不然是没有权限调阅这些表和视图. ----------DBA_ Dba_Tab_Comments   表注释      Dba_Col_Comments 列注释 DBA_2PC_NEIGHBORS                包含待处理事务进入连接和退出连接信息. DBA_2PC_PENDING                 包含等待恢复的分布式事务的信息. D