Oracle里schema理解

Oracle中,一个用户就是一个Schema,表都是建立在Schema中的,也可以理解为每个用户拥有不同的表。一个用户想访问另外一个用户,也就是另外一个schema的表的时候,可以用 username.tablename的形式来访问,完全不需要分布式事务。分布式事务不是给你做这个用的。

Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决。

Oracle中虽然有create schema语句,但是它并不是用来创建一个schema的,具体见下面官方文档。

Use the CREATE SCHEMA statement to create multiple tables and views and perform multiple grants in your own schema in a single transaction.
To execute a CREATE SCHEMA statement, Oracle Database executes each included statement. If all statements execute successfully, then the database commits the transaction. If any statement results in an error, then the database rolls back all the statements.

这里纠正下网上一些错误的观点,Oracle在创建一个用户的同时会为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同。官方文档如下

深入理解user和schema的区别
不同的schema之间它们没有直接的关系,不同的shcema之间的表可以同名, 也可以互相引用(但必须有权限),在没有操作别的schema的操作根权下, 每个用户只能操作它自己的schema下的所有的表。不同的schema下的同名的表, 可以存入不同的数据(即schema用户自己的数据)。 好比一个房子,里面放满了家具,对这些家具有支配权的是房子的主人(user),而不是房子(schema)。
你可以也是一个房子的主人(user),拥有自己的房子(schema)。可以通过alter session的方式
进入别人的房子。 这个时候,你可以看到别人房子里的家具(desc)。 如果你没有特别指定的话,你所做的操作都是针对你当前所在房子中的东西。 至于你是否有权限使用(select)、搬动(update)或者拿走(delete)这些家具就看这个房子的
主人有没有给你这样的权限了,或者你是整个大厦(DB)的老大(DBA)。
如果你想调用其他schema的对象(有权限的前提下),但并没有建synonym, 同时又不想把其他schema名字放入代码中,就可以首先使用

alter session set current_schema=<schema_name>。

实际案例

SQL> SHOW USER; 
USER is "SYS"
SQL> alter session set current_schema=SCOTT;
Session altered.
SQL> SHOW USER; 
USER is "SYS"          #切换Schema并不等同于切换User
SQL> SELECT COUNT(*) FROM EMP;
  COUNT(*)
----------
        14
SQL> alter session set current_schema=SYS;
Session altered.
SQL> SELECT COUNT(*) FROM EMP;
SELECT COUNT(*) FROM EMP
                     *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> CREATE USER oe111 IDENTIFIED BY oePSWRD;
User created.
SQL> CREATE SCHEMA AUTHORIZATION oe111
   CREATE TABLE new_product
      (color VARCHAR2(10)  PRIMARY KEY, quantity NUMBER)
   CREATE VIEW new_product_view
      AS SELECT color, quantity FROM new_product WHERE color = ‘RED‘
   GRANT select ON new_product_view TO scott
/
*
ERROR at line 1:
ORA-02421: missing or invalid schema authorization identifier
SQL> grant dba to oe111;
Grant succeeded.
SQL>  CREATE SCHEMA AUTHORIZATION oe111
  2      CREATE TABLE new_product
       (color VARCHAR2(10)  PRIMARY KEY, quantity NUMBER)
    CREATE VIEW new_product_view
  5         AS SELECT color, quantity FROM new_product WHERE color = ‘RED‘
  6      GRANT select ON new_product_view TO scott
  7  ;
 CREATE SCHEMA AUTHORIZATION oe111
*
ERROR at line 1:    #切换该语句必须在同一Schema下才能执行

ORA-02421: missing or invalid schema authorization identifier 
切换Schema

SQL> CONN OE111/oePSWRD
Connected.
SQL>  CREATE SCHEMA AUTHORIZATION oe111
     CREATE TABLE new_product
   (color VARCHAR2(10)  PRIMARY KEY, quantity NUMBER)
CREATE VIEW new_product_view
        AS SELECT color, quantity FROM new_product WHERE color = ‘RED‘
     GRANT select ON new_product_view TO scott
/

参考至:http://blog.csdn.net/kimsoft/article/details/4627520

http://www.2cto.com/database/201205/131238.html

http://blog.sina.com.cn/s/blog_6c845fae0100peof.html

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6014.htm

本文原创,转载请著名出处、作者

如有错误,欢迎指正

邮箱:[email protected]

时间: 2024-10-06 18:29:45

Oracle里schema理解的相关文章

Oracle里count(1)、count(*)和count(主键)哪个更快

这两天听了将近20场演讲,感觉收获很多,最深的感觉就是自己还有很长的路要走.有几个点记录一下: 昨天听老猫讲,提到一个普遍的问题就是Oracle里count(*).count(1)和count(主键)到底哪个快的问题.这个问题看起来很简单,每个人都会有自己的答案,去百度上搜会出来一大堆帖子来讲哪个更快.但是老猫说了它们三个其实是一样的,我听到之后也觉得挺诧异的,因为我记得别人跟我说过count(主键)会快,然后自己简单想了一下,觉得好像是那么回事的就没有深入去追究.接着老猫说官方有这样的说法这三

Oracle的schema、方案、模式、用户

Oracle的schema.方案.模式.用户参考资料如下: http://blog.sina.com.cn/s/blog_61ebea690101756n.html http://www.tuicool.com/articles/IzAZbiU http://blog.sina.com.cn/s/blog_6fda3085010133f4.html http://www.2cto.com/database/201205/131238.html http://fluagen.blog.51cto.

5.oracle的dump理解五 数据块理论

5.oracle的dump理解五 数据块理论 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51228514 前两篇描述了我们在操作层面看到的一些东西,但是没有理论指导,看到越多我们只会越迷糊.所以,蛤蟆从官方文档上摘取一些老少皆宜的内容来补脑. 块是数据块IO的最小单位. 1     数据块和操作系统块 从物理层面,数据库的块存储时候是由操作系统块组成.操作系统块是操作系统可以读写的最小数据单位.ORACLE块是一个逻辑存

MSSQL如何访问ORACLE里的表

环境: MSSQL:2008 ORACLE DB:10.2.0.1 之前一直没有接触MSSQL,最近因需要MSSQL访问ORACLE里的表,下面是MSSQL连接ORACLE的配置过程. 1.在MSSQL的机器上安装ORACLE客户端,同时配置连接到ORALCE的TNS,这里我的配置如下: ORACL_10GA =   (DESCRIPTION =     (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)

问题:Oracle long 类型l;结果:oracle里long类型的总结

oracle里long类型的总结 1.LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB. 2.对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的.1.LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB. 2.对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的. 3.LONG类型主要用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型. 4.很多工

oracle数据库基本理解

一.概念 1. 数据库 (Database) 什么是数据库? 数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合. 这种数据集合具有如下特点: 尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序, 对数据的增.删.改和检索由统一软件进行管理和控制. 从发展的历史看,数据库是数据管理的高级阶段,它是由文件管理系统发展起来的. 什么是数据库系统? 数据库系统是一个实际可运行的存储.维护和应用系统提供数据的软件系统,是存储介质.处理对象和管理系统的集合体.

Oracle里 用sql*plus 登陆时,用户名和密码是多少啊?

Oracle里sql*plus的用户名即system用户,密码是自己设置的密码. 如果密码忘记,可通过如下方法重置. 1.win键+R键,输入cmd,打开命令提示符. 2.输入sqlplus /nolog 3.继续输入conn /as sysdba 4.输入 alter user 用户名 identified by 密码; 5.修改成功后,会有上图"用户已更改"的提示,再次登录时用自己设定的密码即可.

Oracle里收集与查看统计信息的方法

Oracle数据库里的统计信息是这样的一组数据:它存储在数据字典里,且从多个维度描述了Oracle数据库里对象的详细信息.CBO会利用这些统计信息来计算目标SQL各种可能的.不同的执行路径的成本,并从中选择一条成本值最小的执行路径来作为目标SQL的执行计划. Oracle数据库里的统计信息可以分为如下6种类型: 表的统计信息 索引的统计信息 列的统计信息 系统统计信息 数据字典统计信息 内部对象统计信息 表的统计信息用于描述Oracle数据库里表的详细信息,它包含了一些典型的维度,如记录数.表块

转: oracle中schema指的是什么?

看来有的人还是对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 t