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

 

 想到前几天一个网友朋友问过的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




 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inthirties

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值