`
choelea
  • 浏览: 74454 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多

http://oracle.chinaitlab.com/induction/835839.html

今天重读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=<其他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数据库体系结构之一【user和schema】

    Oracle数据库中,用户(User)和模式(Schema)是两个紧密相关却又鲜明不同的概念。用户是指拥有数据库权限和资源的实体,而模式则是指一组数据库对象的集合,包括表、视图、索引、同义词等等。 首先,从官方文档中...

    oracle中schema指的是什么意思

    在Oracle数据库中,Schema是一个非常重要的概念,它代表了数据库对象的集合,这些对象包括但不限于表格、视图、序列、存储过程、同义词、索引、簇和数据库链接等。Schema是逻辑结构,直接与数据库的数据相关,帮助...

    SpringBoot整合Oracle数据库使用双数据源

    因此,我们需要在`bootstrap.yml`中分别定义两个数据源: ```yaml spring: datasource: primary: url: jdbc:oracle:thin:@localhost:1521:ORCL username: user1 password: pass1 driver-class-name: oracle....

    oracle异库同表名的两个数据库中数据合并或数据表结构的修改

    本文将针对“Oracle异库同表名的两个数据库中数据合并或数据表结构的修改”这一主题进行详细阐述,旨在帮助读者更好地理解和掌握相关的操作技巧。 #### 一、背景介绍 随着业务发展和技术迭代,企业往往需要对现有...

    数据库中的Schema和Database的区别

    在mysql中创建一个Schema和创建一个...  在sqlserver2000中,由于架构的原因,user和schema总有一层隐含的关系,让我们很少意识到其实user和schema是两种完全不同的概念,不过在sqlserver2005中这种架构被打破了,use

    解析Oracle数据库中的对象集合schema

    在WebSQL示例中,mgmt_view和stat是两个不同的Schema,它们通过不同的JDBC连接字符串和TNSName标识,分别连接到dev_crm和dev_dbc服务。理解并正确配置这些参数对于成功建立数据库连接是必不可少的。 总之,Oracle...

    Mysql转oracle工具

    例如,MySQL的`VARCHAR2`对应Oracle的`VARCHAR2`,但MySQL的`TINYINT`在Oracle中可能是`NUMBER(3)`,`BLOB`和`CLOB`在两个系统中都有,但处理方式不同。 3. **对象权限和安全模型**: MySQL的权限管理相对简单,而...

    Oracle基本概念.ppt

    有两个特殊用户,sys和system,拥有最高权限。普通用户可以通过CREATE USER语句创建,DBA可以使用GRANT语句赋予用户系统权限或对象权限。系统权限允许用户访问数据库,如创建新用户、删除表等,而对象权限则涉及对...

    Oracle快速参考手册

    默认创建的两个关键用户是SYS和SYSTEM,还有像scott这样的示例用户。 4. **模式(schema)**:模式是一组属于特定用户的数据库对象,如表、视图、存储过程等。 5. **数据词典**:存储数据库对象和数据元数据的内部...

    oracle实用导入导出

    这两个操作都需要预先存在对应的表结构。 总结来说,Oracle数据库的导入导出主要依赖`expdp`和`impdp`命令,而SQL Server则使用`bcp`。两者虽然在操作上有所不同,但目的都是为了方便数据的迁移和备份。在实际工作...

    oracle的备份和恢复语句整理

    EXPDP (Data Pump Export) 和 IMPDP (Data Pump Import) 是 Oracle 中用于备份和恢复数据的两个主要命令。 EXPDP 命令用于将数据库中的数据导出到一个文件中,以便在需要时进行恢复。IMPDP 命令则用于从备份文件...

    Oracle 词汇表

    以上是Oracle词汇表中涉及的一些核心概念和术语,理解并熟练掌握这些知识,将有助于更便捷、有效地管理和使用Oracle数据库系统。同时,可以通过资源下载网站如erpdown.com获取更多的ERP资源和文档,进一步提升对...

    Oracle数据库_实例_用户_表空间之间的关系.doc

    假设有一个名为“NewMapPLAT”的实例,该实例中包含了两个用户:“LHBLSZ”和“LHBZZY”。每个用户有自己的表空间,并且可以在各自的表空间中创建表。 - **LHBLSZ**用户在自己的表空间中创建了表1、表2、表3、表4。...

    Oracle和MySQL的区别

    - **Oracle**: 在Oracle中,一个用户可以对应多个模式(schema),这意味着每个用户可以拥有多个数据库对象集合。例如,通过`conn username/password@instance`命令来连接数据库。 - **MySQL**: 相比之下,MySQL中的...

    通过Oracle的流复制实现数据库之间的同步

    通过Oracle的流复制实现数据库之间的同步,是一种高效的数据同步机制,尤其在企业级应用中,对于数据一致性和实时性有着极高的要求。Oracle Streams作为Oracle数据库的一项重要特性,自Oracle9i版本开始引入,取代了...

    oracle数据泵备份

    数据泵备份主要分为两个阶段:导出(Export)和导入(Import)。导出阶段负责将源数据库中的数据和元数据提取出来并保存为特定格式的文件;导入阶段则将这些文件中的数据和元数据加载到目标数据库中。 #### 三、...

    oracle10g-oracle11g的数据库迁移

    例如,使用以下命令可以将 smc 和 useradmin 两个 schema 的数据导出到 dump 文件中: expdp smc_yanshi/123qwe@orcl217 schemas=smc_yanshi dumpfile=smc.dmp DIRECTORY=data logfile=smc.log expdp useradmin_...

    两个不同数据库中的表之间的操作(包含sql server /oracle)

    Oracle数据库中也有类似的技术——DBLINK,用于在两个Oracle数据库之间建立连接。 **创建DBLINK** 1. **已授权方式** - 如果用户已被授权,则可以使用以下命令: ```sql CREATE DATABASE LINK database_link_...

    Oracle user script HR OE PM QS SH 用户创建脚本

    脚本中的标签“HR OE user script 脚本”表明这个脚本用于创建Human Resources(人力资源)和Order Entry(订单录入)这两种特定的模式。HR模式包含有关企业人力资源信息的表,例如员工信息、职位信息等;而OE模式...

Global site tag (gtag.js) - Google Analytics