前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >探秘Oracle表空间、用户、表之间的关系

探秘Oracle表空间、用户、表之间的关系

作者头像
DannyHoo
发布2018-09-13 12:14:14
2.5K0
发布2018-09-13 12:14:14
举报
文章被收录于专栏:Danny的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337082

背景


  之前的DRP项目虽然用到了oracle,但是所有数据库对象的建立都是按文档来的,并没有仔细思考总结,后面再次用到oracle时,不能再那么糊里糊涂的用了,得稍微探索一下下了,究竟这些oracle中的数据库对象之间都存在什么关系呢?

  Think about it,在SQL Server或者MySQL中,一般情况下(暂不考虑多租户等特殊情况),一个项目对应DBMS中的一个数据库,连接字符串中是用“用户名+密码+数据库名”来唯一标识数据库,一个用户可以管理多个数据库;而连接oracle中的字符串主要是用户名+密码来标识数据库,即一个用户管理一个方案(方案就是某用户拥有的所有的数据库对象的逻辑集合,可以看做是SQL Server或MySQL中的一个数据库)。

  通俗来说,除了数据库地址,一个程序连接MySQL或SQLServer需要提供用户名、密码和它需要连接的数据库名,连接Oracle则需要提供用户名和密码即可。

Oracle中建立表空间、用户、表


  下面通过一个在oracle中建立方案的例子来说明oracle中表空间、用户、表之间的关系。

  一般在oracle中建立方案的步骤为:创建表空间→创建用户并设置其表空间和权限→创建数据库对象(表、视图、索引等)

  (1)先用system用户登录oracle

  (2)新建表空间:

代码语言:javascript
复制
create tablespace tbs_danny datafile 'D:\oracle\oracledata\danny\danny_data.dbf' size 50M;

  (3)新建用户并为此用户分配默认的表空间:

代码语言:javascript
复制
create user danny identified by danny default tablespace tbs_danny;

  (4)为用户授权

  刚才建立的用户,只是个空壳,神马权限都没有。

  如果不为其分配connect的权限,则连登录都会被拒绝:

  为其设置了connect权限之后,就可以登录了:

  除此之外,还要为其设置resource权限,这样用户才有权查看、修改属于自己的数据库对象:

代码语言:javascript
复制
grant resource to danny;

  (5)建立表

代码语言:javascript
复制
create table t_user_by_danny(id varchar(32),name varchar(32)) tablespace tbs_danny;

  当然也可以不指定表空间

代码语言:javascript
复制
create table t_user_by_danny(id varchar(32),name varchar(32));

  查询一下,在表空间tbs_danny下属于用户danny的表已经有了:

  建表时如果不指定表空间,表自动放到默认表空间下。

  到这里,最简单的方案基本上就完成了。

分析总结


  下面用一张图来分析一下上面的过程

  一个方案对应一个项目,对应一个用户;每个用户可以管理多个表空间,每个表空间由一个或多个物理文件(.dbf)组成,一个用户可以分配多个表空间,但只能有一个默认表空间,每张表可以存在于一个或多个表空间中(比如图中的表1)。

  如果您有点好奇心,可能会问道,那多个用户可以共享一个表空间吗?答案是可以的,所以这张图可以这么画:

  接着上面的例子,如果再建立一个用户xiaohu,并且设置xiaohu的默认表空间也是tbs_danny,并在用户xiaohu下建立表t_user_by_xiaohu,也是可以实现的,只不过这两个用户danny和xiaohu都只有权查看和管理属于自己的数据库对象:

  只不过一般不会这么做,如果多个用户都共享一个表空间的话,那就体现不了表空间的意义啦!您说是吧 ~_~ 嘿嘿 ~_~


【 转载请注明出处——胡玉洋《探秘Oracle中表空间、用户、表之间的关系》】

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年10月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档