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的最佳执行计划. ...
随机推荐
- luogu1908 逆序对 树状数组
题目大意:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i<j的有序对.求一段序列的逆序对数. 对于一个数组T,其一个点的值为值与该点下标相等的A序列中点的个数.对T维护一个树状数 ...
- 0x55 环形与后效性问题
poj2228 分第一天是否熟睡DP两次 #include<cstdio> #include<iostream> #include<cstring> #includ ...
- java中 抽象类和抽象方法
在面向对象中,所有的对象都是由类来描绘的,但是并不是所有的类都用来描绘对象的,当一个类并不能包含完整的信息来描绘一个具体的对象时,我们把这个类称为抽象类.抽象类除了不完整的描述一个对象之外,其他的功能 ...
- Vue2.0框架搭建基础操作及目录说明
一.概述 vue.js是一套构建用户界面的渐进式框架.vue采用自底向上增量开发的设计.vue的核心库只关心视图层,非常容易学习,非常容易与其它库和已有项目整合.vue完全有能力驱动采用单文件组件和v ...
- django 实现websocket
一.简述:django实现websocket,之前django-websocket退出到3.0之后,被废弃.官方推荐大家使用channels. channels通过升级http协议 升级到websoc ...
- 一次显式GC导致的High CPU问题处理过程
项目现场反馈系统出现性能问题,具体表现为:所有的客户端响应极其卡顿. 第一反应推测,难道是DB层面出现阻塞?检查v$session会话状态及等待类型未见异常,应该可以排除DB层面原因导致的可能. 继续 ...
- unity3d 让物体移动到点击位置
using UnityEngine; using System.Collections; public class test : MonoBehaviour { //在场景中鼠标点击地面后,角色可以移 ...
- Java单例模式解析(收藏)
在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就单例设计模式详细的探讨一下. 所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在.就 ...
- vue-cli3+typescript+router
vue基于类的写法,和基于对象的写法并不一致.使用vue-cli3创建的项目,src目录下的文件结构并没有多大区别,store.router.app.view.components.aeests该有的 ...
- Sql Server 连接池
在看缓存的一篇文章中,看到连接池的三个字,来充充电. 原文连接 这篇讲了关键字 其实我们一直在使用SqlServer的连接池.在连接字符串中,Pooling为是否启用连接池,默认值为true,表示启用 ...