oracle中, 经常用户的状态会变成locked, expired 等状态, 这种情况下怎么处理呢?

首先, 如果是locked状态还好办, DBA直接执行alter user scott account unlock 就可以了.

但是如果变成expired状态, oracle本身是不提供解锁的语句的, 因为账户过期,必须要用户更改密码, 账户才能重新使用. 但有些时候, 因为各种原因, 我们并不知道原密码的明文是什么,这时候就很麻烦了, 经研究发现,有两种方法可以实现:

一. 用原密码的密文来更改密码:

[sql] view plaincopyprint?

01.SQL>conn /as sysdba

02.SQL>select password from dba_users where username=‘SCOTT‘;

03.password

04.------------------------------

05.E65E6AF62B2449CF

06.

07.SQL>alter user SCOTT identified by values ‘E65E6AF62B2449CF‘;

SQL>conn /as sysdba

SQL>select password from dba_users where username=‘SCOTT‘;

password

------------------------------

E65E6AF62B2449CF

SQL>alter user SCOTT identified by values ‘E65E6AF62B2449CF‘;

这种情况下,虽然我们不知道原密码是什么,但可以用它的密文来更改密码,这样,在不知道原密码的情况下,既保持了密码不改变, 又可以把expired的状态更改掉.

二. 下面这一条语句搞定,不管用户的状态是什么:

[sql] view plaincopyprint?

01.UPDATE USER$ SET ASTATUS=0 WHERE NAME=‘SCOTT‘;

UPDATE USER$ SET ASTATUS=0 WHERE NAME=‘SCOTT‘;

原理详解:

用户的信息都是存在user$这样一个系统表里面的

[sql] view plaincopyprint?

01.SQL> select name,ASTATUS,password from user$ where name IN(‘SYS‘,‘SCOTT‘);

02.

03.

04.NAME ASTATUS PASSWORD

05.------------------------------ ---------- ------------------------------

06.SCOTT 1 E65E6AF62B2449CF

07.SYS 0 8A8F025737A9097A

08.

09.SQL> select username,account_status from dba_users where username in(‘SYS‘,‘SCOTT‘);

10.

11.USERNAME ACCOUNT_STATUS

12.------------------------------ --------------------------------

13.SYS OPEN

14.SCOTT EXPIRED

SQL> select name,ASTATUS,password from user$ where name IN(‘SYS‘,‘SCOTT‘);

NAME ASTATUS PASSWORD

------------------------------ ---------- ------------------------------

SCOTT 1 E65E6AF62B2449CF

SYS 0 8A8F025737A9097A

SQL> select username,account_status from dba_users where username in(‘SYS‘,‘SCOTT‘);

USERNAME ACCOUNT_STATUS

------------------------------ --------------------------------

SYS OPEN

SCOTT EXPIRED

而用户ASTATUS对应的表为:user_astatus_map

[sql] view plaincopyprint?

01.SQL> select * from user_astatus_map;

02.

03. STATUS# STATUS

04.---------- --------------------------------

05. 0 OPEN

06. 1 EXPIRED

07. 2 EXPIRED(GRACE)

08. 4 LOCKED(TIMED)

09. 8 LOCKED

10. 5 EXPIRED & LOCKED(TIMED)

11. 6 EXPIRED(GRACE) & LOCKED(TIMED)

12. 9 EXPIRED & LOCKED

13. 10 EXPIRED(GRACE) & LOCKED

14.

15.9 rows selected.

SQL> select * from user_astatus_map;

STATUS# STATUS

---------- --------------------------------

0 OPEN

1 EXPIRED

2 EXPIRED(GRACE)

4 LOCKED(TIMED)

8 LOCKED

5 EXPIRED & LOCKED(TIMED)

6 EXPIRED(GRACE) & LOCKED(TIMED)

9 EXPIRED & LOCKED

10 EXPIRED(GRACE) & LOCKED

9 rows selected.

关键是user$表本身是可以更改的, 所以此时我们就可以直接把用户的ASTATUS字段改成0就可以了

[sql] view plaincopyprint?

01.SQL> UPDATE USER$ SET ASTATUS=0 WHERE NAME=‘SCOTT‘;

02.1 row updated.

03.

04.SQL> COMMIT;

05.Commit complete.

06.

07.SQL> alter system flush shared_pool;

08.System altered.

SQL> UPDATE USER$ SET ASTATUS=0 WHERE NAME=‘SCOTT‘;

1 row updated.

SQL> COMMIT;

Commit complete.

SQL> alter system flush shared_pool;

System altered.

再来观察结果:

[sql] view plaincopyprint?

01.SQL> select name,ASTATUS,password from user$ where name IN(‘SYS‘,‘SCOTT‘);

02.

03.NAME ASTATUS PASSWORD

04.------------------------------ ---------- ------------------------------

05.SCOTT 0 E65E6AF62B2449CF

06.SYS 0 8A8F025737A9097A

07.

08.SQL> select username,account_status from dba_users where username in(‘SYS‘,‘SCOTT‘);

09.

10.USERNAME ACCOUNT_STATUS

11.------------------------------ --------------------------------

12.SCOTT OPEN

13.SYS OPEN

SQL> select name,ASTATUS,password from user$ where name IN(‘SYS‘,‘SCOTT‘);

NAME ASTATUS PASSWORD

------------------------------ ---------- ------------------------------

SCOTT 0 E65E6AF62B2449CF

SYS 0 8A8F025737A9097A

SQL> select username,account_status from dba_users where username in(‘SYS‘,‘SCOTT‘);

USERNAME ACCOUNT_STATUS

------------------------------ --------------------------------

SCOTT OPEN

SYS OPEN

原文:http://www.cnblogs.com/furenjian/p/5068307.html

Oracle修改expired状态,更改ORACLE 用户的 expired状态相关推荐

  1. oracle修改连接端口,更改Oracle数据库连接端口

    Oracle数据库默认数据库监听与连接端口是1521, 但是有时候项目中需要更改默认端口,这样做很多时候客户要求,基于安全考虑. 以Ora Oracle数据库默认数据库监听与连接端口是1521, 但是 ...

  2. 更改oracle 表空间大小,更改oracle数据库表空间大小

    Oracle表空间扩展 使用oracle时可能遇到无法通过8192在表空间中扩展错误,原因是数据库的表空间不足. oracle表空间数据文件容量与db_block_size有关,在初始建库时指定DB_ ...

  3. oracle修改10到20,Oracle 10.2.0.5 RMAN迁移并升级11.2.0.4一例

    一.环境介绍 1. 源数据库环境 操作系统版本: OEL 5.4 x64 数据库版本  : 10.2.0.5 x64 数据库sid名 : orcl Oracle 10g 10.2.0.5(64bit) ...

  4. Oracle修改表存储参数,Oracle存储结构之参数文件

    Oracle的参数文件非常之多,但最重要的当属数据库参数文件.而数据库参数文件有pfile和spfile两类.pfile需手动修改,是文本文件 Oracle的参数文件非常之多,但最重要的当属数据库参数 ...

  5. linux更改oracle所属组,Linux更改oracle用户组实验

    ---通常我们安装oracle数据库是建立oracle用户.并且用户加入dba组 --但是我们要改了oracle的dba组为dba1 ,数据库使用操作系统认证还能 --正常登录吗? --回答是不行的. ...

  6. 改了计算机名oracle,修改计算机名称导致Oracle的em不能用

    我是因为修改计算机名称导致Oracle不能用,进行了以下的配置,之后就好了.希望对你有用 Oracle 安装好后 hostname是不能乱改的. How to change the Hostname ...

  7. oracle修改字段的默认,oracle系统默认的账号ORACLE修改表字段的数据类型

    ORACLE修改表字段的数据类型 项目需求变更,需要用到备用字段,开始以为是这样改表的: alter table tablename alter column colname newDataType ...

  8. oracle修改数据前备份,Oracle 之利用BBED修改数据块SCN—-没有备份数据文件的数据恢复...

    测试环境 OS:redhat6.6 oracle:12.1.0.2 BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle ...

  9. oracle修改数据文件个数,Oracle修改数据文件名/移动数据文件

    生产上有时会用到数据文件的迁移,下边示例几种数据文件的迁移方法. 数据库版本sys@ORCL>select * from v$version; select * from v$version; ...

  10. oracle 修改列类型6,Oracle用户、权限、角色管理 编辑

    Oracle 数据库用户管理 Oracle 权限设置 一.权限分类: 系统权限:系统规定用户使用数据库的权限.(系统权限是对用户而言). 实体权限:某种权限用户对其它用户的表或视图的存取权限.(是针对 ...

最新文章

  1. sparkCore源码解析之思维脑图
  2. 汇编语言---冒泡排序
  3. Nature:压榨学生,论资排辈,现行论文作者制度已死
  4. indices should be one-based and in ascending order
  5. vim编辑器快捷操作
  6. 转:javascript方法--bind()
  7. 内容 超链接_excel中如何设置目录与返回目录超链接?这两种方法很简单
  8. 线程挂起 阻止有什么区别c#
  9. amd核芯显卡控制面板自定义分辨率_电脑显示器分辨率超频教程:1080P超2K分辨率的方法...
  10. mac install torch0.4.1
  11. 频率采样型滤波器matlab,频率采样法设计带通滤波器matlab.doc
  12. matlab EOF程序
  13. 饥荒联机版专用服务器主机性能较差,饥荒联机版为什么启动服务器慢 | 手游网游页游攻略大全...
  14. 关于word2010指定位置插入页码及三线表格绘制问题
  15. NandFlash 控制器操作实例:读Flash
  16. 令人敬畏的泰格伍兹 万维钢_使用SwiftUI创建令人敬畏的加载状态
  17. Framebuffer子系统【转】
  18. APM飞控添加自定义参数
  19. 短视频SDK超级简单易用
  20. linux启动流程及自定义gurb

热门文章

  1. 批量修改word文字字体字号
  2. 产品级Flutter开源项目FunAndroid,Provider MVVM的最佳实践
  3. 8/30 Hourglass网络原理
  4. Fedora 15不能正常关机,总是卡死在关机画面上
  5. OBIEE的迁移部署
  6. 平板电脑触摸屏市场现状及未来发展趋势
  7. Matlab中如何定义和使用colormap?|colormap的使用
  8. 开箱-艳云脚本云控系统
  9. meta标签含义详细解释!
  10. 51单片机仿真例程-八段数码管