今天重读ORACLE官方文档《concepts》,读到schema的基本概念,对它的理解更进一层,

官方文档中关于schema是这样解释的:

“A schema is a collection of database objects. A schema is owned by a

database user and has the same name as that user. Schema objects are the

logical structures that directly refer to the database's data. Schema objects

include structures like tables, views, and indexes.(There is no relationship

between a tablespace and a schema. Objects in the same schema can be in

different tablespaces, and a tablespace can hold objects from different

schemas.)”

官方文档里面说得比较明白,schema是数据对象的集合,包括像表、视图、索引、同义词

等等都可以说是schema的对象。但不够生动,网上有篇文章里面把schema和user的关系用

一个形象的比喻阐述得非常透彻,引用如下:

“user即Oracle中的用户,和所有系统的中用户概念类似,用户所持有的是系统的权限及

资源;而schema所涵盖的是各种对象,它包含了表、函数、包等等对象的“所在地”,并

不包括对他们的权限控制。好比一个房子,里面放满了家具,对这些家具有支配权的是房

子的主人(user),而不是房子(schema)。你可以也是一个房子的主人(user),拥有自己的

房子(schema).可以通过alter session的方式进入别人的房子。如果你没有特别指定的话

,你所做的操作都是针对你当前所在房子中的东西。至于你是否有权限使用(select)、搬

动(update)或者拿走(delete)这些家具就看这个房子的主人有没有给你这样的权限了,或

者你是整个大厦(DB)的老大(DBA)。alter session set schema可以用来代替synonyms。

如果你想调用其他schema的对象(有权限的前提下),但并没有建synonym,同时又不想把

其他schema名字放入代码中,就可以首先使用alter session set schema=

字>。”

这段文字说得非常生动,把user和schema的区别阐述得很透彻,下面通过具体的例子来加

深对user和schema两者区别的认识:

第一步,以sys用户登陆SQL并建立普通用户storm和penguin:

$ sqlplus / as sysdba

SQL> create user storm identified by storm;

User created.

SQL> create user penguin identified by penguin;

User created.

第二步,赋予一些基本的权限给新建的用户storm和penguin:

SQL> grant connect,create table,resource to storm,penguin;

Grant succeeded.

第三步,以storm用户登陆,创建一张表并插入数据:

SQL> conn storm/storm

Connected.

SQL> create table t (id int);

Table created.

SQL> insert into t values(1);

1 row created.

SQL> commit;

Commit complete.

第四步,以penguin用户登陆,看能否查询storm用户所建表里面的数据:

SQL> conn penguin/penguin

Connected.

SQL> select table_name from user_tables;

no rows selected

SQL> show user;

USER is "PENGUIN"

SQL> select * from storm.t;

select * from storm.t

*

ERROR at line 1:

ORA-00942: table or view does not exist

从以上结果可以看出,用户penguin无法查看用户storm所建表里面的内容,甚至被告知没

有这张表。

第五步,修改当前schema为storm,并继续查询:

SQL> alter session set current_schema=storm;

Session altered.

SQL> show user;

USER is "PENGUIN"

SQL> select * from storm.t;

select * from storm.t

*

ERROR at line 1:

ORA-00942: table or view does not exist

仍然不能查看。

第六步,以storm用户登陆,赋予penguin用户查看t表的权限:

SQL> conn storm/storm

Connected.

SQL> grant select on t to penguin;

Grant succeeded.

第七步,以penguin用户登陆,查看storm用户的t表:

SQL> conn penguin/penguin

Connected.

SQL> select * from storm.t;

ID

----------

1

更简单的,将当前schema更改为storm,可以简化查询过程:

SQL> alter session set current_schema=storm;

Session altered.

SQL> select * from t;

ID

----------

1

这个实验下来,对user和schema的区别和联系应该有了进一步的理解了。

oracle中schema是什么,ORACLE中的两个概念:user和schema的区别和联系相关推荐

  1. ORACLE中的两个概念:user和schema的区别和联系

    http://oracle.chinaitlab.com/induction/835839.html 今天重读ORACLE官方文档<concepts>,读到schema的基本概念,对它的理 ...

  2. java 获取oracle表结构_获取Oracle中所有表的列表?

    回答(19) 2 years ago 我们可以从以下查询获取所有表格,包括列详细信息: SELECT * FROM user_tab_columns; 2 years ago 使用sqlplus更好地 ...

  3. oracle 调用main方法,main方法中调用spring注入bean

    public static void main(String[] args) { // TODO Auto-generated method stub ApplicationContext conte ...

  4. oracle r修改表名,oracle中修改表名

    <<>> answer1: ALTER TABLE old_table_name RENAME TO new_table_name;(大写为系统命令) answer2: SQL ...

  5. oracle语句中dual什么意思,oracle中dual详解

    oracle中dual详解 基本上oracle引入dual为的就是符合语法 1. 我们先从名称来说,dual不是缩写词,本身就是完整的单词.dual名词意思是对数,做形容词时是指二重的,二元的. 2. ...

  6. oracle自动释放表空间,Oracle中关于清除数据和释放表空间

    一.表的重命名 flashback table test2 to before drop rename to test3;--[to test3]将表重命名 drop table test3 purg ...

  7. Oracle 12c、18c、19c中的MGMTDB(下)

    Oracle 12c.18c.19c中的MGMTDB(下) 上一篇参考: http://blog.itpub.net/26736162/viewspace-2132763/ 在12.1.0.1 中, ...

  8. Oracle 12c、18c、19c中的MGMTDB、GIMR

    Oracle 12c.18c.19c中的MGMTDB.GIMR 文档内容   用途   问题和答案       什么是管理资料库?   管理资料库是用来干什么的?   管理资料库的数据文件放在哪里? ...

  9. 使用Streamsets将Oracle数据实时同步到MySQL中

    相关环境: Oracle 11g:11.2.0.1.0  MySQL:8.0.22 前期准备: 1.打开Oracle的logminer a.在SQL Shell中,以具有DBA的用户身份登录数据库: ...

  10. oracle中key,mysql中的key在oracle中是什么

    mysql中的key在oracle中是什么 说明一下.key在oracle中对应的是什么? 比如说: CREATE TABLE `AdBanner` ( `BannerId` int(8) NOT N ...

最新文章

  1. Linux下通过v4l2获取视频设备名、支持的编解码及视频size列表实现
  2. 端到端问答新突破:百度提出RocketQA,登顶MSMARCO榜首
  3. 为什么delete表数据,磁盘空间却还是被占用
  4. Pinging ? with 32 bytes of data 故障解决
  5. Struts2之Ognl
  6. windows服务器apache+PHP+Mysql
  7. 路径获取文件名通用方法
  8. xcode Cornerstone 拷贝项目 提示框架头文件找不到的问题
  9. asp功放怎么装_客厅家庭影院该怎么摆放?
  10. UI设计师经常去的五个网站
  11. 危机中转型,如何获得领导的支持?
  12. c#编写闭合导线简易平差程序
  13. Redis内存数据库必读的4本书
  14. 【BottomBar】Android炫酷的底部切换
  15. 看完知乎轮子哥的编程之路,我只想说,收下我的膝盖。。。
  16. GBASE数据库迁移(Oracle到GBase 8s的数据类型映射)
  17. oracle EM 监控邮件提醒
  18. 亚马逊热销爆款产品货源有哪些?亚马逊无货源怎么做?
  19. 经典搜索算法之B树与B+树
  20. linux桌面怎么解压tar文件,Linux中tar解压缩命令详解-tar文件怎么打开

热门文章

  1. 将金额人民币转化为大写 C#
  2. 搭建顶级域名下的个人博客网站
  3. WinZip命令行详解
  4. 重写报销流程,责任链模式实现
  5. mysql主从复制及问题解决
  6. vs2019 解决方案加载报错
  7. encode_chunked=req.has_header(‘Transfer-encoding‘))问题解决方法
  8. 【白皮书分享】2021年智慧城市白皮书:依托智慧服务,共创新型智慧城市.pdf(附下载链接)
  9. 当自己颓废的时候怎么激励自己?
  10. 深度学习福利入门到精通第二讲——AlexNet模型