看来有的人还是对schema的真正含义不太理解,现在我再次整理了一下,希望对大家有所帮助。

我们先来看一下他们的定义:
A schema is a collection of database objects (used by a user.).
Schema objects are the logical structures that directly refer to the database’s data.
A user is a name defined in the database that can connect to and access objects.
Schemas and users help database administrators manage database security.

从定义中我们可以看出schema为数据库对象的集合,为了区分各个集合,我们需要给这个集合起个名字,这些名字就是我们在企业管理器的方案下看到的许多类似用户名的节点,这些类似用户名的节点其实就是一个schema,schema里面包含了各种对象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。

一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。这也就是我们在企业管理器的方案下看到schema名都为数据库用户名的原因。Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决(Oracle中虽然有create schema语句,但是它并不是用来创建一个schema的),在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同,所有我们可以称schema为user的别名,虽然这样说并不准确,但是更容易理解一些。

一个用户有一个缺省的schema,其schema名就等于用户名,当然一个用户还可以使用其他的schema。如果我们访问一个表时,没有指明该表属于哪一个schema中的,系统就会自动给我们在表上加上缺省的sheman名。比如我们在访问数据库时,访问scott用户下的emp表,通过select * from emp; 其实,这sql语句的完整写法为select * from scott.emp。在数据库中一个对象的完整名称为schema.object,而不属user.object。类似如果我们在创建对象时不指定该对象的schema,在该对象的schema为用户的缺省schema。这就像一个用户有一个缺省的表空间,但是该用户还可以使用其他的表空间,如果我们在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。

咳,说了这么多,给大家举个例子,否则,一切枯燥无味!
SQL> Gruant dba to scott

SQL> create table test(name char(10));
Table created.

SQL> create table system.test(name char(10));
Table created.

SQL> insert into test values('scott');
1 row created.

SQL> insert into system.test values('system');
1 row created.

SQL> commit;
Commit complete.

SQL> conn system/manager
Connected.

SQL> select * from test;
NAME
----------
system

SQL> ALTER SESSION SET CURRENT_SCHEMA = scott; --改变用户缺省schema名
Session altered.

SQL> select * from test;
NAME
----------
scott

SQL> select owner ,table_name from dba_tables where table_name=upper('test');
OWNER TABLE_NAME
------------------------------ ------------------------------
SCOTT TEST
SYSTEM TEST
--上面这个查询就是我说将schema作为user的别名的依据。实际上在使用上,shcema与user完全一样,没有什么区别,在出现schema名的地方也可以出现user名。

下面是比较形象的说法:

“我们可以把Database看作是一个大仓库。仓库分了很多很多的房间,Schema就是其中的房间。一个Schema代表一个房间。Table可以看作是每个Schema中的床,Table(床)被放入每个房间中,不能放置在房间之外,那岂不是晚上睡觉无家可归了。然后床上可以放置很多物品,就好比 Table上可以放置很多列和行一样,数据库中存储数据的基本单元是Table。现实中每个仓库放置物品的基本单位就是床, User就是每个Schema的主人(所以Schema包含的是Object,而不是User),user和schema是一一对应的,每个user在没有特别指定下只能使用自己schema(房间)的东西。如果一个user想使用其他schema(房间)的东西,那就要看那个schema(房间)的user(主人)有没有给你这个权限了,或者看这个仓库的老大(DBA)有没有给你这个权限了。换句话说,如果你是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是你的(包括房间),你有完全的操作权,可以扔掉不用的东西从每个房间,也可以放置一些有用的东西到某一个房间,你还可以给每个User分配具体的权限,也就是他到某一个房间能做些什么,是只能看(Read-Only),还是可以像主人一样有所有的控制权(R/W),这个就要看这个User所对应的角色Role了。”

转载自:

https://blog.csdn.net/qq_38296051/article/details/84884109

https://blog.csdn.net/KimSoft/article/details/4627520#commentBox

oracle之schema相关推荐

  1. 使用Navicat Premium进行Oracle数据库schema的复制

    使用Navicat Premium进行Oracle数据库schema的复制 我们在实际的开发过程中,经常需要将数据库的信息从一个schema迁移到另一个schema中,如果一张表一张表的去生成ddl和 ...

  2. oracle的schema的基本概念及与User的区别

    Oracle schema可视为同一个使用者所拥有的所有数据库对象(schemaobjects)之集合.举例来说,使用者scott所建立的EMPtable其完整名称为SCOTT.EMP,而SCOTT就 ...

  3. Oracle里schema理解

    在Oracle中,一个用户就是一个Schema,表都是建立在Schema中的,也可以理解为每个用户拥有不同的表.一个用户想访问另外一个用户,也就是另外一个schema的表的时候,可以用 usernam ...

  4. oracle中schema指的是什么?

    看来有的人还是对schema的真正含义不太理解,如今我再次整理了一下,希望对大家有所帮助. 我们先来看一下他们的定义: A schema is a collection of database obj ...

  5. url oracle default schema,oracle @Table中使用schema时insert报错

    第一部分 测试情况如下: maven修改 com.alibaba druid 1.1.10 实体类 @Table(name = "dpcenter.xeuser") public ...

  6. oracle同库复制schema,使用impdp复制oracle的schema数据迁移 | 学步园

    测试环境: 源: windows 2003, oracle 10202 目标:windows 2000, oracle 10203 注:本文中所说的 schema 和 user 是一个意思. impd ...

  7. 转: oracle中schema指的是什么?

    看来有的人还是对schema的真正含义不太理解,现在我再次整理了一下,希望对大家有所帮助. 我们先来看一下他们的定义: A schema is a collection of database obj ...

  8. oracle中schema是什么,ORACLE中的两个概念:user和schema的区别和联系

    今天重读ORACLE官方文档<concepts>,读到schema的基本概念,对它的理解更进一层, 官方文档中关于schema是这样解释的: "A schema is a col ...

  9. oracle remap schema,【IMPDP】 实现不同用户之间的数据迁移——REMAP_SCHEMA参数

    众所周知,IMP工具的FROMUSER和TOUSER参数可以实现将一个用户的的数据迁移到另外一个用户.同样的功能在IMPPDP工具中如何得以体现呢?答案就是:使用IMPPDP的REMAP_SCHEMA ...

最新文章

  1. linux cpu 超频,Linux 调整 cstate 实现cpu超频
  2. MyBatis传入参数与parameterType
  3. 我的jQuery动态表格插件二
  4. C51 汇编指令英文全称
  5. h5策划书_一个好的H5营销活动设计要如何进行策划
  6. 【转】C#命名空间与java包的区别分析
  7. 阿里巴巴投入1000亿元助力共同富裕,包括十大行动
  8. Microsoft Visual Studio使用NodeJS
  9. 谈谈遵守公司作战纪律
  10. gssh推送 Warning: Permanently added 'gitee.com’to the list of known hosts.
  11. 三角函数中和差角公式的编辑方法
  12. 【深度学习】基于人脸关键点的视频心率检测
  13. Android:基于OpenCV实现身份证识别(C++)——移植图像算法
  14. springboot本地启动报错discard long time none received connection
  15. 2019国赛C题优秀论文机场的出租车问题
  16. 微信支付失败提示签名错误,请检查后重试
  17. HIS接口--LIS 与 HIS 跳转URL
  18. java—set创建迭代器的两个方法
  19. layui学习笔记(五)关于layui按钮下拉菜单dropdown使用。研究dropdown数据提取、显示过长、样式显示问题。
  20. 大众eagit_APR出品|APR重改高尔夫GIT 见证大众车型改装潜力 - 有车一族汽车网

热门文章

  1. CC3200学习总结
  2. Python 83道经典练习题,含答案!
  3. 编译原理-词法分析器
  4. 五分钟学后端技术:分布式系统理论 - 从放弃到入门
  5. 宣传python的顺口溜-Python3内置函数——reversed() = 翻转我的世界
  6. 【JAVA】使用intellij IDEA将项目打包为jar包
  7. 无线蓝牙耳机手机端app开发_不输AirPods,只花百元就能买到的超级耳机,值了!...
  8. java 九大行星运行_html5 canvas太阳系九大行星运行动态图代码
  9. html小于等于怎么输入,小于等于号怎么打?电脑和手机输入≤的方法!
  10. window cmd 创建文本文件