现在的位置: 首页 > 综合 > 正文

我可以修改schema吗–schema和登录user的关系

2013年10月04日 ⁄ 综合 ⁄ 共 2078字 ⁄ 字号 评论关闭

 

 想到前几天一个网友朋友问过的schema的问题, schema和user的关系

 

v$session表里的username和schemaname都是一样的,有什么意义? 但是时间仓促,大致的解释了一下,今天看到那个帖子。

http://topic.csdn.net/u/20091113/10/cb29d8ee-1edb-4839-992b-db19264a4212.html ,感到自己还没有解释的清楚,今天特地总结了一下。以供网友参考

 

 

当我们用用户登录sqlplus或者其他客户端登录Oracle数据库的时候,都会建立连接session,默认情况下,当一个用户登录的时候,schema是这个用户的schmea 

 

SQL>conn test1/test1; 
Connected. 
SQL> show user; 
USER is "TEST1" 
SQL>select sys_context('userenv', 'current_schema') from dual; 
SYS_CONTEXT('USERENV','CURRENT_SCHEMA') 
-------------------------------------------------------------------------------- 
TEST1 
可以看到这里的test1用户登录以后的schema是TEST1 

我们查一查session,也可以看到test1这个用户的session里使用的schema 

SQL> select username, schemaname from v$session where username='TEST1'; 
USERNAME SCHEMANAME 
------------------------------ ------------------------------ 
TEST1 TEST1 

现在我们通过alter session set current_context来修改这个schema 

SQL> alter session set current_schema=system; 
SQL> show user; 
USER is "TEST1" 
用户还是test1 

SQL> select sys_context('userenv', 'current_schema') from dual; 
SYS_CONTEXT('USERENV','CURRENT_SCHEMA') 
-------------------------------------------------------------------------------- 
SYSTEM 

schema已经切换到了system的schema叻 
在session里查查看 
SQL> select username, schemaname from v$session where username='TEST1'; 
USERNAME SCHEMANAME 
------------------------------ ------------------------------ 
TEST1 SYSTEM】 
这里也显示为systenm叻 

注意这里切换的是schema而已,也就是说你建表时是建立在哪个schema里而已,session中的用户并没有切换,也就是说all_tables, user_tables这些和session里的user有关的结果不会发生改变 
比如 
SQL> select table_name from user_tables; 
TABLE_NAME 
-------------------------------------------------------------------------------- 
T1_111 
TABLE_1111 
TEMP_TABLE2 
TEMP_TABLE3 

我们这里看到的还是当前用户test1里看到的建立的表而已,有兴趣可以 根据我的文章 数据字典-数据字典表 里介绍的内容 追溯一下这个all_tables视图的sql语句 

当然现在如果你建表的时候 都是建立在当前的schema里的, 如果不指定表空间的话,还是用的当前用户的表空间。 如果没有在当前schema建表权限的会,会报ORA-01031: insufficient privileges 

SQL> create table test_schema (id int); 
create table test_schema (id int) 

ERROR at line 1: 
ORA-01031: insufficient privileges

抱歉!评论已关闭.