怎么锁Oracle用户,oracle 解锁用户

怎样给oracle数据库的用户解锁?

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

成都创新互联公司是一家集网站建设,五龙口企业网站建设,五龙口品牌网站建设,网站定制,五龙口网站建设报价,网络营销,网络优化,五龙口网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

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

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

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

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

Oracle中的锁

锁是数据库用来控制共享资源并发访问的机制。

例如

用户A执行了

update tb1 set name='xx' where id=1;

那么在用户A没提交前表tb1的id=1的行就是锁着的,其它用户想要修改必需等A用户提交后才能执行修改任务。

当然ORACLE的锁有很多种,比如行级锁、表级锁等等

下面是一些复制来的希望对你有帮助

锁是数据库用来控制共享资源并发访问的机制。

锁用于保护正在被修改的数据

直到提交或回滚了事务之后,其他用户才可以更新数据

锁定的优点

一致性- 一次只允许一个用户修改数据

完整性- 为所有用户提供正确的数据。如果一个用户进行了修改并保存,所做的修改将反映给所有用户

锁的类型

行级锁

对正在被修改的行进行锁定。其他用户可以访问除被锁定的行以外的行

行级锁是一种排他锁,防止其他事务修改此行

在使用以下语句时,Oracle会自动应用行级锁:INSERT UPDATE DELETE SELECT …FOR UPDATE SELECT …FOR UPDATE语句允许用户一次锁定多条记录进行更新

使用COMMIT或ROLLBACK语句释放锁

SELECT …FOR UPDATE语法:SELECT …FOR UPDATE [OF columns][WAIT n | NOWAIT];

SQL SELECT * FROM order_master WHERE vencode=’V002’

FOR UPDATE OF odate, del_date;

SQL UPDATE order_master SET del_date=’28-8月-05’

WHERE vencode=’V002’;

SQL COMMIT;

SQL SELECT * FROM order_master WHERE vencode=’V002’

FOR UPDATE WAIT 5;

SQL SELECT * FROM order_master WHERE vencode=’V002’

FOR UPDATE NOWAIT;

使用命令显示地锁定表,应用表级锁的语法是:

LOCK TABLE table_name IN mode MODE;

行共享(ROW SHARE) – 禁止排他锁定表

行排他(ROW EXCLUSIVE) – 禁止使用排他锁和共享锁

共享锁(SHARE)

锁定表,仅允许其他用户查询表中的行

禁止其他用户插入、更新和删除行

多个用户可以同时在同一个表上应用此锁

共享行排他(SHARE ROW EXCLUSIVE) – 比共享锁更多的限制,禁止使用共享锁及更高的锁

排他(EXCLUSIVE) – 限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表

表级锁

占用模式 其他用户

ROW SHARE ROW EXCLUSIVE SHARE SHARE ROW EXCLUSIVE EXCLUSIVE SELECT..FOR UPDATE INSERT DELETE UPDATE

ROW SHARE √ √ √ √ × √ √

ROW EXCLUSIVE √ √ × × × √ √

SHARE √ × √ × × √ ×

SHARE ROW EXCLUSIVE √ × × × × √ ×

EXCLUSIVE × × × × × × ×

死锁

当两个事务相互等待对方释放资源时,就会形成死锁

Oracle会自动检测死锁,并通过结束其中的一个事务来解决死锁

右边是一个死锁的例子

如何给oracle账户解锁

在DBA的日常工作中,经常遇到为Oracle用户解锁的操作;这篇文章给出在命令行下进行Oracle用户解锁的操作方法,通过几条简单的解锁语句就能完成此项工作。下面是具体的过程:

默认的scott用户是被锁定的,先解锁就能登陆上了。 使用下面的语句解锁scott:

alter user scott account unlock;

解锁之后可能会要求你该密码:

alter user scott identified by tiger;

再登陆:

sqlplus scott/tiger

就能登陆了

Oracle锁定和解锁用户的命令

SQL conn /as sysdba

已连接。

//scott 用户在没有设定tieger默认密码时,登陆不上

锁定用户的方法:

SQL alter user test account lock;

用户已更改。

-------test用户登陆数据库,失败了。

C:\sqlplus test/test

ERROR:

ORA-28000: the account is locked

Oracle用户解锁的方法:

SQL conn /as sysdba

SQL alter user test account unlock;

用户已更改。这样就完成了Oracle的用户解锁操作。

ORACLE里几种锁模式

ORACLE锁具体分为以下几类:

1.按用户与系统划分,可以分为自动锁与显示锁

自动锁:当进行一项数据库操作时,缺省情况下,系统自动为此数据库操作获得所有有必要的

显示锁:某些情况下,需要用户显示的锁定数据库操作要用到的数据,才能使数据库操作执行得更好,显示锁是用户为数据库对象设定的。

2.按锁级别划分,可分为共享锁与排它锁

共享锁:共享锁使一个事务对特定数据库资源进行共享访问——另一事务也可对此资源进行访问或获得相同共享锁。共享锁为事务提供高并发性,但如拙劣的事务设计+共享锁容易造成死锁或数据更新丢失。

排它锁:事务设置排它锁后,该事务单独获得此资源,另一事务不能在此事务提交之前获得相同对象的共享锁或排它锁。

3.按操作划分,可分为DML锁、DDL锁

+DML锁又可以分为,行锁、表锁、死锁

-行锁:当事务执行数据库插入、更新、删除操作时,该事务自动获得操作 表中操作行的排它锁。

-表级锁:当事务获得行锁后,此事务也将自动获得该行的表锁(共享锁),以防止其它事务进行DDL语句影响记录行的更新。事务也可以在进行 过程中获得共享锁或排它锁,只有当事务显示使用LOCK TABLE语 句显示的定义一个排它锁时,事务才会获得表上的排它锁,也可使用

LOCK TABLE显示的定义一个表级的共享锁(LOCK TABLE具体用法请参 考相关文档)。

-死锁:当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就 出现死锁。

如事务1在表A行记录#3中有一排它锁,并等待事务2在表A中记录#4 中排它锁的释放,而事务2在表A记录行#4中有一排它锁,并等待事务 1在表A中记录#3中排它锁的释放,事务1与事务2彼此等待,因此就造 成了死锁。死锁一般是因拙劣的事务设计而产生。

死锁只能使用SQL下:alter system kill session 'sid,serial#';

或者使用相关操作系统kill进程的命令,如UNIX下kill -9 sid,或者 使用其它工具杀掉死锁进程。

+DDL锁又可以分为:排它DDL锁、共享DDL锁、分析锁

-排它DDL锁:创建、修改、删除一个数据库对象的DDL语句获得操作对象的 排它锁。

如使用alter table语句时,为了维护数据的完成性、一致性、

合法性,该事务获得一排它DDL锁。

-共享DDL锁:需在数据库对象之间建立相互依赖关系的DDL语句通常需共享

获得DDL锁。

如创建一个包,该包中的过程与函数引用了不同的数据库表,

当编译此包时,该事务就获得了引用表的共享DDL锁。

-分析锁:ORACLE使用共享池存储分析与优化过的SQL语句及PL/SQL程序,使

运行相同语句的应用速度更快。一个在共享池中缓存的对象获得

它所引用数据库对象的分析锁。分析锁是一种独特的DDL锁类型,

ORACLE使用它追踪共享池对象及它所引用数据库对象之间的依赖 关系。当一个事务修改或删除了共享池持有分析锁的数据库对象

时,ORACLE使共享池中的对象作废,下次在引用这条SQL/PLSQL语 句时,ORACLE重新分析编译此语句。

4.内部闩锁

内部闩锁:这是ORACLE中的一种特殊锁,用于顺序访问内部系统结构。

当事务需向缓冲区写入信息时,为了使用此块内存区域, ORACLE首先必须取得这块内存区域的闩锁,才能向此块内存写入

信息。

oracle数据库表被锁了怎么解锁

1、在做Oracle监听程序测试时,发现帐户已经被锁定。

2、在数据库安装电脑上,点击开始打开运行窗口。

3、在运行窗口输入CMD,调出命令提示符界面。

3、在命令提示符下面,用管理员身份登入到数据库sqlplus / as sysdba。

4、输入解锁命令alter user Scott account unlock后回车。

5、看见用户已更改的字样,表示命令已成功执行。

6、再切换到监听程序验证,原来的ora-28000帐户被锁定的提示已经不存在了。用户解锁成功。

怎么让oracle实现连续登陆失败5次,锁定账号5分钟?

这个连续5次不好定义,假设一个人今天试验了4次,明天又试验了一次,那么也可以说是连续5次(虽然有点抬杠,不过这个也算是连续5次),这种怎么算?

以下纯属猜想,没有试验过只是把想到的可能说一说

我能想到的是oracle的一个让人很头痛的功能(因为开了这个功能的话,真的比较恐怖)——审计。这个功能会记录登录失败的信息在相关的表中,比如aud$,如果能建立触发器对该表进行统计,那么应该能实现你说的连续5次,但是这个就好像和profile没什么关系了。可能需要手动锁定用户了,然后再开启一个定时任务,一旦执行了所应用户的操作(基本上又是一个c触发器),那么5分钟后执行解锁用户,不过这个环节也太多了,而且oracle的两个计划任务有时也不怎么靠谱,万一有一个环节卡死了,那么整套流程就进行不下去了。感觉好像更麻烦的样子。

如果不在oracle的层面可能就会好解决一些,如果外面套了一层java的壳,那么简单的做一个循环就好了,只要在多长时间内(比如24小时)循环到5,或者连续循环到5,那么就锁定断开该登录(拒绝登录)5分钟,根本不用锁定用户(毕竟别人还要用)。(个人不会java,以上纯属猜测)

我记得还有一种方式可以将登录失败的信息记录到alert文件,但是就算能统计出来连续5次,然后呢,这个5怎么传入数据库,传入后怎么操作,我想了半天也没想明白。毕竟frofile本身,没有“连续密码错误”的这个参数。


本文名称:怎么锁Oracle用户,oracle 解锁用户
文章地址:http://azwzsj.com/article/hooggp.html