Oracle用户重命令
2015-12-22 16:03
393 查看
oracle的schema重命名在项目的开发过程中会经常遇见,有了schema重命名可以在很大程度上避免我们犯一些错误,下面我们就通过两种方法来实现Oracle schema rename的方法。
首先,我们来介绍一下Oracle用户管理方面的一些基础知识。如果我们刚装完一个新的数据库,有很多用户都是EXPIRED & LOCKED状态的,这说明该用户是锁定状态和过期状态的,要使用这些用户我们要要先对这些用户进行解锁和修改密码的操作,例如我们查看dba_users视图可以发现scott用户就是EXPIRED & LOCKED状态的,我们执行下面的操作就可以将scott用户变为可以登录的状态:
我们通过上面两个命令就可以将一个用户的状态改变为open状态,这个用户就可以正常的登录了。
其实我们再去进一步的研究就会发现,Oracle数据库的用户的信息是存储在user$这个实体表中的,这个表的表结构如下:
而dba_users只是user$和表user_astatus_map上的一个视图,上面的两个更改用户状态的命令实际上就是改变用户在这个表中的记录,基于此,我们就可以根据user_astatus_map来改变用户的状态。
这样我们可以把一个用户从open状态变为EXPIRED & LOCKED状态,同理,我们通过这个方法也可以将一个用户的状态由EXPIRED & LOCKED转换为其他状态。
另外,profile这个东西我们也要注意一下,简单的说profile就是用来限制用户对资源的使用,例如用户的密码过期时间,可以使用多少的cpu,连接时间,限制用户只能用一个session等等,具体可以限制哪些资源可以查看dba_profiles视图中的resource_name列;下面从几个问题来展示profile的使用!(要使用这个需要开启resource_limit,默认这个参数是false的,我们需要开启,alter system set
resource_limit=true)
1.如何查看用户使用的profile?
1.1执行sql命令:select username,user_id,resource from dba_users where username='xxxx';可以查询出xxxx用户使用的profile
1.2执行sql命令:select * from dba_profiles where profile='XXXX';可以查询出XXXXprofile具体的内容
2.如何通过profile来限制用户使用的资源?
2.1.使用profile来限制用户每次只能单会话模式登录
create profile profile_name one_session limit sessions_per_user 1;
alter user user_name profile profile_name;
( 注意:一个用户只用一个profile)
在这样设置之后,当一个用户如果想连接多个session就会报错:
ERROR:
ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit
Warning: You are no longer connected to ORACLE.
2.2.使用profile来限制用户的cpu使用
假设上面的user_name用户已经使用名字为profile_name的profile,我们通过修改profie_name中的cpu_per_session(单位是1/100秒)来达到限制user_name用户使用cpu
alter profile profile_name limit cpu_per_session 100;
好了,上面啰嗦了这么多,现在我们开始本片文章的重点内容—重命名Oracle schema
1. 既然我们已经知道用户的信息是存储在user$实体表中的,那么我们可以通过更新user$表中的记录来达到目的
1.1.首先获取用户的id,本例中我们来重命名scott schema
select username,user_id from dba_users where username='SCOTT';(或者:select user#,name from user$ where name='SCOTT')
USERNAME USER_ID
------------------------------ ----------
SCOTT 83
SCOTT用户的id为83
1.2.更新user$表中的记录
SQL> update user$ set name='SCOTT1' where user#=83;(注意:在更新的时候,新的名字必须为大写,要不在登录的时候会报错)
1 row updated.
SQL> commit;
Commit complete
SQL> alter system checkpoint;
System altered.
SQL> alter system flush shared_pool;
System altered.
SQL> conn scott1/scott
Connected.
2.通过修改Oracle的隐含参数,_enable_rename_user来开启Oracle的rename功能。
2.1 查看_enable_rename_user
SQL> select t1.ksppinm,t2.ksppstvl,t1.ksppdesc from x$ksppi t1,x$ksppcv t2 where t1.indx=t2.indx and t1.ksppinm like '_enable_rename_user';
KSPPINM KSPPSTVL KSPPDESC
-------------------- -------------------- ----------------------------------------
_enable_rename_user FALSE enable RENAME-clause using ALTER USER statement
2.2修改_enable_rename_user
SQL> alter system set "_enable_rename_user"=true scope=spfile;(注意:在修改隐含参数时,参数必须用双引号引起来)
System altered.
2.3将数据启动到restrict模式下:
SQL> startup restrict force
ORACLE instance started.
Total System Global Area 3290345472 bytes
Fixed Size 2232840 bytes
Variable Size 1795165688 bytes
Database Buffers 1476395008 bytes
Redo Buffers 16551936 bytes
Database mounted.
Database opened.
2.4rename user
SQL> alter user scott1 rename to scott identified by scott;
User altered.
至此,两种重命名oracle schema的方法介绍完毕,很明显,第二种方法需要重启数据库,这是一个很大的弊端。
首先,我们来介绍一下Oracle用户管理方面的一些基础知识。如果我们刚装完一个新的数据库,有很多用户都是EXPIRED & LOCKED状态的,这说明该用户是锁定状态和过期状态的,要使用这些用户我们要要先对这些用户进行解锁和修改密码的操作,例如我们查看dba_users视图可以发现scott用户就是EXPIRED & LOCKED状态的,我们执行下面的操作就可以将scott用户变为可以登录的状态:
我们通过上面两个命令就可以将一个用户的状态改变为open状态,这个用户就可以正常的登录了。
其实我们再去进一步的研究就会发现,Oracle数据库的用户的信息是存储在user$这个实体表中的,这个表的表结构如下:
而dba_users只是user$和表user_astatus_map上的一个视图,上面的两个更改用户状态的命令实际上就是改变用户在这个表中的记录,基于此,我们就可以根据user_astatus_map来改变用户的状态。
这样我们可以把一个用户从open状态变为EXPIRED & LOCKED状态,同理,我们通过这个方法也可以将一个用户的状态由EXPIRED & LOCKED转换为其他状态。
另外,profile这个东西我们也要注意一下,简单的说profile就是用来限制用户对资源的使用,例如用户的密码过期时间,可以使用多少的cpu,连接时间,限制用户只能用一个session等等,具体可以限制哪些资源可以查看dba_profiles视图中的resource_name列;下面从几个问题来展示profile的使用!(要使用这个需要开启resource_limit,默认这个参数是false的,我们需要开启,alter system set
resource_limit=true)
1.如何查看用户使用的profile?
1.1执行sql命令:select username,user_id,resource from dba_users where username='xxxx';可以查询出xxxx用户使用的profile
1.2执行sql命令:select * from dba_profiles where profile='XXXX';可以查询出XXXXprofile具体的内容
2.如何通过profile来限制用户使用的资源?
2.1.使用profile来限制用户每次只能单会话模式登录
create profile profile_name one_session limit sessions_per_user 1;
alter user user_name profile profile_name;
( 注意:一个用户只用一个profile)
在这样设置之后,当一个用户如果想连接多个session就会报错:
ERROR:
ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit
Warning: You are no longer connected to ORACLE.
2.2.使用profile来限制用户的cpu使用
假设上面的user_name用户已经使用名字为profile_name的profile,我们通过修改profie_name中的cpu_per_session(单位是1/100秒)来达到限制user_name用户使用cpu
alter profile profile_name limit cpu_per_session 100;
好了,上面啰嗦了这么多,现在我们开始本片文章的重点内容—重命名Oracle schema
1. 既然我们已经知道用户的信息是存储在user$实体表中的,那么我们可以通过更新user$表中的记录来达到目的
1.1.首先获取用户的id,本例中我们来重命名scott schema
select username,user_id from dba_users where username='SCOTT';(或者:select user#,name from user$ where name='SCOTT')
USERNAME USER_ID
------------------------------ ----------
SCOTT 83
SCOTT用户的id为83
1.2.更新user$表中的记录
SQL> update user$ set name='SCOTT1' where user#=83;(注意:在更新的时候,新的名字必须为大写,要不在登录的时候会报错)
1 row updated.
SQL> commit;
Commit complete
SQL> alter system checkpoint;
System altered.
SQL> alter system flush shared_pool;
System altered.
SQL> conn scott1/scott
Connected.
2.通过修改Oracle的隐含参数,_enable_rename_user来开启Oracle的rename功能。
2.1 查看_enable_rename_user
SQL> select t1.ksppinm,t2.ksppstvl,t1.ksppdesc from x$ksppi t1,x$ksppcv t2 where t1.indx=t2.indx and t1.ksppinm like '_enable_rename_user';
KSPPINM KSPPSTVL KSPPDESC
-------------------- -------------------- ----------------------------------------
_enable_rename_user FALSE enable RENAME-clause using ALTER USER statement
2.2修改_enable_rename_user
SQL> alter system set "_enable_rename_user"=true scope=spfile;(注意:在修改隐含参数时,参数必须用双引号引起来)
System altered.
2.3将数据启动到restrict模式下:
SQL> startup restrict force
ORACLE instance started.
Total System Global Area 3290345472 bytes
Fixed Size 2232840 bytes
Variable Size 1795165688 bytes
Database Buffers 1476395008 bytes
Redo Buffers 16551936 bytes
Database mounted.
Database opened.
2.4rename user
SQL> alter user scott1 rename to scott identified by scott;
User altered.
至此,两种重命名oracle schema的方法介绍完毕,很明显,第二种方法需要重启数据库,这是一个很大的弊端。
相关文章推荐
- Oracle 11g 安装图文步骤
- oracle和MySQL区别
- oracle根据正则表达式查找对应的字段
- oracle 控制台输出
- oracle 11g RAC 常用命令
- Oracle的DBMS_OUTPUT.PUT_LINE用法及脚本批处理方法
- oracle归档模式和非归档模式的切换
- [解决办法]windows的非administrator账户无法通过plsql工具登录oracle数据库
- 关于oracle的备份 导入
- Oracle一列的多行数据拼成一行显示字符
- oracle 特殊符号
- 使用Oracle调度程序自动完成任务
- 如何进行 Oracle 10g RAC关闭及启动
- oracle 9i相关问题
- oracle 查看锁死的表,锁死的进程
- Oracle 日期格式处理
- oracle 查询包含某字段的所有表
- oracle调用JAVA类的方法
- Oracle11g数据库导入Oracle10g问题
- my sql分页 SQLServer分页 oracle分页