a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 60|回复: 0

[综合] Oracle综合辅导Schema简析

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
在一个数据库中可以有多个应用的数据表,这些不同应用的表可以放在不同的schema之中,' E8 b1 M. T6 F, V# Y: ~+ k2 n
    . k& u: g- ?0 H$ k& O1 I0 ~
    同时,每一个schema对应一个用户,不同的应用可以以不同的用户连接数据库,: R! P! g4 h( [, p, q
   
) w, y% x/ r! _. }    这样,一个大数据库就可以根据应用把其表分开来管理。, Q9 f# t& _' F! }
   
  m2 `6 N9 k5 u    不同的schema之间它们没有直接的关系,不同的shcema之间的表可以同名,1 b1 f% d' c' }  h: m) j0 M' N
   
! p$ c/ H1 A. b9 _6 t" ]: V9 E    也可以互相引用(但必须有权限),在没有操作别的schema的操作根权下,+ }( z6 W  ^; Q1 v5 J: }' Y
   
2 C. X% u% c* {# x4 K    每个用户只能操作它自己的schema下的所有的表。不同的schema下的同名的表,
6 G6 z6 Q. H! Y( ?6 i   
" B) l) I1 h/ \( D6 v; ^6 h    可以存入不同的数据(即schema用户自己的数据)。
2 [6 ]7 y0 D% b0 `    , a2 M! F3 r0 z9 c
    Oracle里schema几乎和user/用户是通用的。schema是指一组数据库object! r7 J1 A6 \2 J: s
   
" Y, S5 e# y' f& j: x, q    (比如:表,视图,包,序列,等等),而这些object是属于用户的,* l" N  n3 p' o' o) h! M: S" B; I$ A
    4 b' R( D0 p8 Q4 H
    属于一个用户的所有object就叫schema." G5 D' `" Z7 m% J9 [9 e  w/ `- G
   
0 ~3 i4 f5 J6 n+ B6 B% C    如果你使用Oracle的企业管理器Enterprise Manager,你会发现里面的用户就叫schema.1 S  @6 {" @7 p$ [; K
    5 d* c! n" K% \! A
    Schema 中文意思是 方案。 "方案"只是 Oracle 一个分类,不同用户有不同的方案。5 T; e. m9 a; B' }2 x% |
    ) H5 u* a' }9 e$ I/ E
    拿 DBA Studio 来说吧,在左边分了四大类:(例程,存储,安全,方案)
( Y9 k; E+ |. Y  C    , i' ?$ v' ]* |" r5 o- \3 ~# H
    例程: 是管理库的启动…之类的。 www.2cto.com
: Q- T7 L! W( F" S; ?& F0 f5 P    ) i3 C- h  U8 x: D/ O
    存储: 管理表空间,数据文件之类。, _. p" p% P; q& Y
    6 T; s, B& q- R+ }* Z, z0 Q5 c
    安全: 就是管理用户(密码,表空间分配…)4 ?) l- ?# k) o. F7 ~
    * D! Z" h1 a, O5 ?) s. Y" s
    方案: 有(表,视图,存储过程…),不同用户有不同的案。/ b8 y. k0 v, `6 c! w
   
5 c0 p' p6 y- f: {& [7 L    如: 在"方案"->选你的"用户名"之后,才会出现用户名相关的表。  }$ g+ C! M- Y0 i3 c) p& Q
   
2 L! L, \# W" ]! z4 i    ----------------------------两个不容易理解的概念──user和schema8 `( H! o4 ], p) o% Z$ Z
    " D9 d9 i' b0 V7 F% ~6 F* @
    user是控制权限的,而schema则是一个容器,非所有者如果需要访问这个容器下的对象
" u! L! f7 i! ?1 \  N0 N    3 H; _- X  O5 v- ?
    就需要在对象前面写上schema(owner)的名字,如果不想写而又没有创建synonym,此时可以通过alter session set current_schema=schema_name来改变当前session的schema从而在访问对象时省去schema(owner);最终能否访问对象还是要看是否有访问这个对象的权限而和schema无关。' p4 R0 }; z3 x$ g+ ]
    - ^! j& v7 i: X& D; \5 _
    深入理解user和schema的区别:
3 M! B% |/ \$ N" Z  ]' w  c+ e   
- |! p6 r. ?+ S* I& n    user即Oracle中的用户,和所有系统的中用户概念类似,用户所持有的是系统的权限及资源;
9 N! c' C2 m+ j$ \) a$ o% L    + f; c- V+ g! k5 \
    而schema所涵盖的是各种对象,它包含了表、函数、包等等对象的"所在地",并不包括对他们的权限控制。
6 N6 H; X- z( w; c' X0 E0 }8 u   
2 i1 t4 B: @( _$ ]: z* A    好比一个房子,里面放满了家具,对这些家具有支配权的是房子的主人(user),而不是房子(schema)。
& \5 [& V* N1 j3 r1 V2 z2 k# D9 {   
' Q, G& h0 f! e; ?$ A    你可以也是一个房子的主人(user),拥有自己的房子(schema)。可以通过alter session的方式9 o3 |$ w" O  N# o& A
   
- Q( k, ~$ F7 L' R' ]; P    进入别人的房子。
1 `8 ~" A, a* {. b  e: B   
+ N. a) Z2 {+ |- |( p: c    这个时候,你可以看到别人房子里的家具(desc)。
4 I" G9 Y* U* i7 F# ~- z6 u   
% s( X4 N5 y" {& x- H; C# E* L    如果你没有特别指定的话,你所做的操作都是针对你当前所在房子中的东西。( @4 v( o' P, {. f1 ~/ S3 V; t
   
& s' l9 O  P2 {    至于你是否有权限使用(select)、搬动(update)或者拿走(delete)这些家具就看这个房子的
# Q: P# D+ B1 \6 T( n* U# {. E   
3 `$ h. Z- j9 j5 D# v    主人有没有给你这样的权限了,或者你是整个大厦(DB)的老大(DBA)。* D# ]8 o1 E: S+ U6 t
    ; }. i7 f# k7 t5 @6 C
    alter session set schema可以用来代替synonyms.! @: Q  p* \% l' p0 D; j
    ) B$ Y7 t+ \7 T
    如果你想调用其他schema的对象(有权限的前提下),但并没有建synonym,
1 B/ I) K2 [# [$ D* e9 S) u   
5 Y5 l. q# R8 `/ k; W& Y    同时又不想把其他schema名字放入代码中,就可以首先使用alter session set schema=.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-22 12:19 , Processed in 1.143960 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表