Oracle账号被锁定如何解锁

Oracle账号被锁定如何解锁,第1张

今天访问应用的时候,发现账号被锁定,登录oracle后,发现很多用户都被锁定了。看下提示信息,原来是密码过期了导致账号被锁定。这里记录下这几个 *** 作的常用命令,以方便以后自己的使用。

1查看用户的proifle是哪个,一般是default

SELECT username,PROFILE FROM dba_users;

2查看对应的概要文件(如default)的密码有效期设置

SELECT FROM dba_profiles s WHERE sprofile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';

3将概要文件(如default)的密码有效期由默认的180天修改成“无限制”(修改之后不需要重启动数据库,会立即生效)

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

4对已经锁定和过期的账号进行解锁

(1)alter user 用户名 identified by <原来的密码> account unlock; ----不用换新密码,用户名和密码也不用加引号,这个命令会解锁账号,同时取消密码过期。

(2)alter user 用户名 account unlock; ----这个只会解锁账号,而不会取消密码过期,所以建议使用上面的口令

这两个 *** 作都需要用sysdba身份去修改,方法如下:

1、win+R,输入cmd,回车。

2、以sysdba身份连接oracle的sqlplus。

sqlplus /nolog

conn / as sysdba

3、解锁语句用:

alter user 用户名 account unlock;

4、修改口令语句用:

alter user 用户名 identified by 密码;

1 数据库表锁定原理

11 目前的C/S,B/S结构都是多用户访问数据库,每个时间点会有成千上万个user来访问DB,其中也会同时存取同一份数据,会造成数据的不一致性或者读脏数据

12 事务的ACID原则

13 锁是关系数据库很重要的一部分, 数据库必须有锁的机制来确保数据的完整和一致性

131 SQL Server中可以锁定的资源:

132 锁的粒度:

133 锁的升级:

锁的升级门限以及锁升级是由系统自动来确定的,不需要用户设置

134 锁的类型:

(1) 共享锁:

共享锁用于所有的只读数据 *** 作

(2) 修改锁:

修改锁在修改 *** 作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象

(3) 独占锁:

独占锁是为修改数据而保留的。它所锁定的资源,其他事务不能读取也不能修改。独占锁不能和其他锁兼容。

(4) 架构锁

结构锁分为结构修改锁(Sch-M)和结构稳定锁(Sch-S)。执行表定义语言 *** 作时,SQL Server采用Sch-M锁,编译查询时,SQL Server采用Sch-S锁。

(5) 意向锁

意向锁说明SQL Server有在资源的低层获得共享锁或独占锁的意向。

(6) 批量修改锁

批量复制数据时使用批量修改锁

134 SQL Server锁类型

(1) HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁。

(2) NOLOCK:不添加共享锁和排它锁,当这个选项生效后,可能读到未提交读的数据或“脏数据”,这个选项仅仅应用于SELECT语句。

(3) PAGLOCK:指定添加页锁(否则通常可能添加表锁)。 

(4) READCOMMITTED用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQL Server 2000 在此隔离级别上 *** 作。

(5) READPAST: 跳过已经加锁的数据行,这个选项将使事务读取数据时跳过那些已经被其他事务锁定的数据行,而不是阻塞直到其他事务释放锁,

READPAST仅仅应用于READ COMMITTED隔离性级别下事务 *** 作中的SELECT语句 *** 作。 

(6) READUNCOMMITTED:等同于NOLOCK。 

(7) REPEATABLEREAD:设置事务为可重复读隔离性级别。 

(8) ROWLOCK:使用行级锁,而不使用粒度更粗的页级锁和表级锁。

(9) SERIALIZABLE:用与运行在可串行读隔离级别的事务相同的锁语义执行扫描。等同于 HOLDLOCK。 

(10) TABLOCK:指定使用表级锁,而不是使用行级或页面级的锁,SQL Server在该语句执行完后释放这个锁,而如果同时指定了HOLDLOCK,该锁一直保持到这个事务结束。 (11) TABLOCKX:指定在表上使用排它锁,这个锁可以阻止其他事务读或更新这个表的数据,直到这个语句或整个事务结束。 

(12) UPDLOCK :指定在

读表中数据时设置更新 锁(update lock)而不是设置共享锁,该锁一直保持到这个语句或整个事务结束,使用UPDLOCK的作用是允许用户先读取数据(而且不阻塞其他用户读数据),并且保证在后来再更新数据时,这一段时间内这些数据没有被其他用户修改。

2 如何解除表的锁定,解锁就是要终止锁定的那个链接,或者等待该链接事务释放

21 Activity Monitor

可以通过Wait Type, Blocked By栏位查看到,SPID 54 被SPID 53 阻塞 可以右键Details查到详细的SQL 语句,或Kill掉这个进程

22 SQL Server提供几个DMV,查看locks

sysdm_exec_requests

sysdm_tran_locks

sysdm_os_waiting_tasks

sysdm_tran_database_transactions

(1)

select  from sysdm_tran_locks where  resource_type<>'DATABASE' --and resource_database_id=DB_ID()

(2)

SELECT session_id, blocking_session_id,

FROM sysdm_exec_requests

WHERE blocking_session_id > 0

(3)代码

SELECT

request_session_id as Spid,

Coalesce(sname + '' + oname + isnull('' + iname,''),

s2name + '' + o2name,

dbname) AS Object,

lresource_type as Type,

request_mode as Mode,

request_status as Status

FROM sysdm_tran_locks l

LEFT JOIN syspartitions p

ON lresource_associated_entity_id = phobt_id

LEFT JOIN sysindexes i

ON pobject_id = iobject_id

AND pindex_id = iindex_id

LEFT JOIN sysobjects o

ON pobject_id = oobject_id

LEFT JOIN sysschemas s

ON oschema_id = sschema_id

LEFT JOIN sysobjects o2

ON lresource_associated_entity_id = o2object_id

LEFT JOIN sysschemas s2

ON o2schema_id = s2schema_id

LEFT JOIN sysdatabases db

ON lresource_database_id = dbdatabase_id

WHERE resource_database_id = DB_ID()

ORDER BY Spid, Object, CASE lresource_type

When 'database' Then 1

when 'object' then 2

when 'page' then 3

when 'key' then 4

Else 5 end

1、找到并进入运行窗口:(可以用windows+r快捷键哦)输入sqlplus命令:如图

2、进入新窗口后使用scott/tiger用户和密码进行登录会发现登录不成功:如图

3、这时我们可以使用system用户进行登录,应为此用户的权限排第二,并且密码我们已经在安装时输入了了,所以是可以登录进入的:如图

4、system登录成功之后就可以使用命令给用户进行解锁了:如图

5、最后再用scott/tiger用户时,你可以神奇的发现此时能连接成功了:如图

你先查一下你的数据表示不是锁表了。

select sesssid,

sessserial#,

looracle_username,

loos_user_name,

aoobject_name,

lolocked_mode

from v$locked_object lo,

dba_objects ao,

v$session sess 

where aoobject_id = loobject_id and losession_id = sesssid

通过以上sql就可以知道哪个进程、序列,oracle用户名、 *** 作系统用户名、表名、锁表模式几个字段

下面一步就是将改锁表的进程和序列杀掉了,执行下面的语句即可。

alter system kill session '1020,38953' --(1020,就是执行第一步语句得到的sid字段值,38953就是serial#字段值)

详细的请参照:网页链接

以上就是关于Oracle账号被锁定如何解锁全部的内容,包括:Oracle账号被锁定如何解锁、Oracle数据库,如何解除数据库用户账户的锁定呢如何修改口令呢、SQL Server表锁定原理以及如何解除锁定等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10181593.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存