oracle处理死锁权限,Oracle用户权限及死锁
Oracle用户权限表
oracle数据库中涉及到用户权限的三个表,dba_users,all_users,user_users有什么区别
dba_开头的是查全库所有的,all_开头的是查当前用户可以看到的,user_开头的是查当前用户的
用户与模式
用户:对数据库的访问,需要以适当用户身份通过验证,并具有相关权限来完成一系列动作
SYS用户,缺省始终创建,且未被锁定,拥有数据字典及其关联的所有对象
SYSTEM用户,缺省始终创建,且未被锁定,可以访问数据库内的所有对象
状态详解
0
OPEN
当前帐户是开放的用户可以自由登录
1
EXPIRED
当前帐户已经过期,用户必须在修改密码以后才可以登录系统,在登录的时候,系统会提示修改密码
2
EXPIRED(GRACE)
这是有password_grace_time定义的一个时间段,在用户密码过期以后的第一次登录,系统会提示用户,密码在指定的时间段以后会过期,需要及时修改系统密码.
4
LOCKED(TIMED)
这是一个有条件的帐户锁定日期,由password_lock_time进行控制,在lock_date加上password_lock_time的日期以后,帐户会自动解锁.
8
LOCKED
帐户是锁定的,用户不可以登录,必须由安全管理员将帐户打开用户才可以登录.
5
EXPIRED & LOCKED(TIMED)
6
EXPIRED(GRACE) & LOCKED(TIMED)
9
EXPIRED & LOCKED
10
EXPIRED(GRACE) & LOCKED
给账户加锁
Alter user user1 account lock;
解锁
Alter user user1 account unlock;
死锁:两个进程互相请求对方资源被阻塞就会死锁,发生死锁不能自动释放,必须手动解锁。
Oracle 锁
v$lock视图常用列解释:
sid:持有锁的会话SID,通常与v$session关联
type:锁的类型,TM:表锁,TX行锁或事务锁,其他类型为系统锁,会自动释放
lmode:会话保持的锁的模式。
0=None;
1=Null ;
2=Row-S (SS,行级共享锁,其他对象只能查询这些数据行),sql操作有select for update、lock for update、lock row share;
3=Row-X (SX,行级排它锁,在提交前不允许做DML操作),sql操作有insert、update、delete、lock row share;
4=Share(共享锁),sql操作有create index、lock share;
5=S/Row-X (SSX,共享行级排它锁),sql操作有lock share row exclusive;
6=Exclusive(排它锁),alter table、drop table、drop index、truncate table、look exclusive等DDL
2.V$LOCKED_OBJECT
session_id: 会话id。通常与v$session关联。
object_id: 被锁对象标识。通常与dba_objects关联。
oracle_username: 登录oracle用户名。
os_user_name: 电脑用户名如:Administrator
locked_mode: 会话保持的锁的模式。
V$LOCKED_OBJECT主要查询的用户锁,v$lock查询所有锁
SQL语句。inactive:等待操作。killed:被标注为杀死。
OSUSER - 客户端操作系统用户名。
MACHINE - 客户端machine name。
TERMINAL - 客户端执行的terminal name。
视图dba_objects记录数据库中所有的对象
视图描述如下:
OWNER:对象拥有者
OBJECT_NAME:对象名字
常用SQL:
查询数据库中的锁
select * from v$lock;
select * from v$lock where block=1;
查询被锁的对象
select * from v$locked_object;
查询阻塞
查被阻塞的会话
select * from v$lock where lmode=0 and type in ('TM','TX');
查阻塞别的会话锁
select * from v$lock where lmode>0 and type in ('TM','TX');
查询数据库正在等待锁的进程
select * from v$session where lockwait is not null;
查询死锁:
select b.owner TABLEOWNER, b.object_name TABLENAME, c.OSUSER LOCKBY, c.USERNAME LOGINID, c.sid SID, c.SERIAL# SERIAL
from v$locked_object a,dba_objects b, v$session c
where b.object_id = a.object_id AND a.SESSION_ID =c.sid;
解锁
--通过SID, SERIAL解锁
--alter system kill session 'SID, SERIAL';
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.查看角色(只能查看登陆用户拥有的角色)所包含的权限
sql>select * from role_sys_privs;
4.查看用户对象权限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
5.查看所有角色:
select * from dba_roles;
6.查看用户或角色所拥有的角色:
select * from dba_role_privs;
select * from user_role_privs;
7.查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
select * from V$PWFILE_USERS
更多推荐



所有评论(0)