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
本文原创,转载请著名出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com
Oracle里schema理解的更多相关文章
- Oracle性能优化之Oracle里的统计信息
一.什么是统计信息 oracle数据库里的统计信息是如下的一组数据:他们存储在数据字典里,且从多个维度描述了oracle数据库数据对象的详细信息. oracle数据库里的统计信息主要分为以下6种情况: ...
- 基于Oracle的SQL优化(崔华著)-整理笔记-第5章“Oracle里的统计信息”
第5章“Oracle里的统计信息” 详细介绍了Oracle数据库里与统计信息相关的各个方面的内容,包括 Oracle数据库中各种统计信息的分类.含义.收集和查看方法,以及如何在Oracle数据库里正确 ...
- oracle里的优化器
1.1 oracle里的优化器 RBO(Rule-Based-Optinizer):基于规则的优化器 CBO(Cost-Based-Optinizer): 基于成本的优化器 SQL语句执行过程 待执行 ...
- 基于Oracle的SQL优化(崔华著)-整理笔记-第2章“Oracle里的执行计划”
详细介绍了Oracle数据里与执行计划有关的各个方面的内容,包括执行计划的含义,加何查看执行计划,如何得到目标SQL真实的执行计划,如何查看执行计划的执行顺序,Oracle数据库里各种常见的执行计划的 ...
- oracle里的统计信息
1 oracle里的统计信息 Oracle的统计信息是这样的一组数据,存储在数据字典,从多个维度描述了oracle数据库对象的详细信息,有6种类型 表的统计信息:记录数.表块的数量.平均行长度等 索引 ...
- ORACLE里锁有以下几种模式,v$locked_object,locked_mode【转】
ORACLE里锁有以下几种模式:0:none1:null 空2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusive 4: ...
- ORACLE里锁有以下几种模式,v$locked_object,locked_mode
ORACLE里锁有以下几种模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusiv ...
- Oracle里 用sql*plus 登陆时,用户名和密码是多少啊?
Oracle里sql*plus的用户名即system用户,密码是自己设置的密码. 如果密码忘记,可通过如下方法重置. 1.win键+R键,输入cmd,打开命令提示符. 2.输入sqlplus /nol ...
- Oracle性能优化之 Oracle里的优化器
优化器(optimizer)是oracle数据库内置的一个核心子系统.优化器的目的是按照一定的判断原则来得到它认为的目标SQL在当前的情形下的最高效的执行路径,也就是为了得到目标SQL的最佳执行计划. ...
随机推荐
- Java类集综合练习——信息管理(增、删、改、查)
一.实现功能——模拟学生选课功能 1.选择课程 2.修改所选课程 二.实现功能——模拟学生信息管理功能 1.添加学生信息 2.修改学生信息 二.主要代码(在同一个包里) 1.课程类 public cl ...
- Linux 端口 为什么要有端口
ip能锁定一台物理机器,对应着一张网卡,外界发来的数据包网卡都会接收.但是问题来了,网卡给程序提供了接口,你监听一下我,要是有消息来了,我就转发给你.这样应用程序就能收到数据了.但是问题来了,程序A和 ...
- 网页设计——Dreamweaver
在看ASP.NET视频时,讲到了一款编写HTML代码的软件--Dreamweaver.它是一款专门进行网页设置的软件.通过它能够设计出多彩的界面,相对于vs中自带的设计方式来说,他不须要知道太多的技术 ...
- 网络:万维网(WWW)
ylbtech-网络:万维网(WWW) www (万维网缩写)同义词 万维网一般指www(万维网缩写)WWW是环球信息网的缩写,(亦作“Web”.“WWW”.“'W3'”,英文全称为“World Wi ...
- [Javascript] 轻量级的JavaScript日期处理类库xDate使用指南
XDate是一个请谅解的JavaScript的原生Date对象的封装库,提供增强的功能解析,格式化和日期处理.使用起来就和JavaScript自己的对象和方法一样,非常简单. XDate是一个请谅解的 ...
- Kaggle之泰坦尼克号幸存预测估计
上次已经讲了怎么下载数据,这次就不说废话了,直接开始.首先导入相应的模块,然后检视一下数据情况.对数据有一个大致的了解之后,开始进行下一步操作. 一.分析数据 1.Survived 的情况 train ...
- LVS十种调度算法介绍
1.轮叫调度(Round Robin)(简称rr) 轮叫调度(Round Robin Scheduling)算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod ...
- 关于chm提示 已取消到该网页的导航的解决方法
下载了一个chm文件,打开提示“已取消到该网页的导航”,以前以为是文件有问题,下载其他的也是出现这种情况,于是网上搜了下,解决方法如下: 方法 1 1. 双击此 .chm 文件. 2. 在“打开文件安 ...
- 如何参加topcoder
1.注册账号 2.安装java运行环境 3.下载客户端 4.提示:应用程序已被java安全阻止:控制面板里找到java,将topcoder.com添加到安全列表 5.运行客户端
- 常用的CSS命名
头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体佈局宽度:wrapper 左右中:left rig ...