`

oracle中的数据库、用户、方案、表空间、表对象之间的关系

 
阅读更多
文章来源:http://blog.csdn.net/blognkliming/article/details/7613189

借鉴学习一下:
最近在学习oracle,给我的第一个感觉就是甲骨文的体系太庞大了(因为我之前一直使用的是mysql,轻量级的数据库)。而开始遇到的最纠结的问题,就是怎么理清oracle中数据库、用户、方案、表空间、表对象之间的关系,如果这个问题搞不清楚,接下来的学习也就会雨里雾里了。所以,下定决心一定把它研究清楚,便开始了搜索各种资料的旅程。
1.首先,我们先看看oracle和sqlserver的一些区别吧。oracle中的一个数据库就是一个实例,而在sqlserver中,在一个实例下面可以建多个数据库。从用户方面来看,oracle的一个用户就是一个Schema(方案,虽然这么说不太准确,但是易于理解,后面我会详细说明这个问题),所有的表都属于不同的用户,一个用户要访问另一个用户的表,需要有授权,而在sqlserver中,表是在数据库中创建的,它并不属于某个用户。oracle的结构是===实例->用户->表,表是属于某个用户的(但是访问时实际上用的是schema进行索引表的)所以在oracle下 建表空间,建用户,设置用户的默认表空间,在用户下建表;而在sqlserver下,结构是===实例->库->表,用户与库、表 独立,sqlserver下是建库,在库下建表,建用户,设置用户访问库的权限。《也可以这么理解,oracle中有数据库,但是不同于sqlserver,oracle的一个实例只有一个数据库,数据库系统的基本信息也保存在这个数据库中,不像sqlserver保存在单独的master数据库中》
2.现在我们再看看表空间和方案之间的关系吧。其实它们之间的关系就是没有关系,在一个instance下可以有多个用户,每个用户只能有一个schema。很多人包括我一直在想的问题就是既然schema是用来存放table object的,而表空间也是存放table object,它们之间是不是存在着某种关系呢,但是结果就是没有关系。在数据库创建一个用户后,并给以这个用户创建表或者其他对象的权限,这时还没有模式存在。只有当这个用户利用这些权限创建了属于自己的第一个对象时,oracle为这个用户创建一个schema,来容纳这个对象以及以后创建的对象。同一个schema的objects可以存储在不同的tablespace(表空间)中,同样,tablespace也可以存储不同schema的objects。schema就是一个用户和它下面的所有对象,而表空间逻辑上用来放objects,物理上对应磁盘上的数据文件或者裸设备。
3.再看方案和用户之间的关系吧。从定义中,我们可以看出方案为数据库对象的集合,为了区分各个集合,我们需要给这个集合起个名字,这些名字也就是我们在企业管理器的方案下看到的许多类似用户名的节点,这些类似用户名的节点其实就是一个schema,schema里面包含了各种对象如tables,views,sequences,stored procedures,synonyms,indexes,clusters,and database links。一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省的schema,这就是我们在企业管理器的方案下看到的schema名都是数据库用户名的原因。oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决(oracle中的create schema语句不是用来创建schema的)。schema的个数通user的个数相同,而且schema名字和user名字一一对应并且相同,所以我们称schema为user的别名,虽然不准确,但是容易理解。在授权情况下,一个用户可以使用其他的schema,一个用户只有一个缺省的schema。如果我们访问一个表时,没有指明该表属于哪一个schema中的,系统就会自动给我们在表上加上缺省的sheman名。比如我们在访问数据库时,访问scott用户下的emp表,通过select * from emp; 其实,这sql语句的完整写法为select * from scott.emp。在数据库中一个对象的完整名称为schema.object,而不属user.object。类似如果我们在创建对象时不指定该对象的schema,在该对象的schema为用户的缺省schema。这就像一个用户有一个缺省的表空间,但是该用户还可以使用其他的表空间,如果我们在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。
oracle中的schema就是指一个用户下所有对象的集合,schema本身不能理解成一个对象,oracle并没有提供创建schema的语法,schema也并不是在创建user时就创建,而是在该用户下创建第一个对象之后schema也随之产生,只要user下存在对象,schema就一定存在,user下如果不存在对象,schema也不存在;这一点类似于temp tablespace group,另外也可以通过oem来观察,如果创建一个新用户,该用户下如果没有对象则schema不存在,如果创建一个对象则和用户同名的schema也随之产生。
下面是一些例子
SQL> Gruant dba to scott
SQL> create table test(name char(10));
Table created.
SQL> create table system.test(name char(10));
Table created.
SQL> insert into test values('scott');
1 row created.
SQL> insert into system.test values('system');
1 row created.
SQL> commit;
Commit complete.
SQL> conn system/manager
Connected.
SQL> select * from test;
NAME
----------
system
SQL> ALTER SESSION SET CURRENT_SCHEMA = scott; --改变用户缺省schema名
Session altered.
SQL> select * from test;
NAME
----------
scott
SQL> select owner ,table_name from dba_tables where table_name=upper('test');
OWNER TABLE_NAME
------------------------------ ------------------------------
SCOTT TEST
SYSTEM TEST
最后,让我们再来总结一下:
数据库是一个大圈,里面圈的是表空间,表空间里面是数据文件,schema是一个逻辑概念,是一个集合,但schema不是一个对象,oracle也并没有提供创建schema的语法。表空间也是个逻辑概念,本质上是一个或者多个数据文件的集合。数据文件是一个物理概念,是具体存储数据的物理文件。一个数据文件只能属于一个表空间,一个表空间可以包含一个或多个数据文件,一个数据库由多个表空间组成,但是一个表空间只能属于一个数据库。
下面有个很形象的比喻,是从网上摘的,不妨一看:
我们可以把database看做是一个大仓库,仓库分了很多很多的房间,schema就是其中的房间,一个schema代表一个房间,table可以看做是每个schema中的床,table被放入每个房间中,不能放置在房间之外,那岂不是晚上睡觉无家可归了,然后床上可以放置很多物品,就好比table上可以放置很多列和行一样,数据库中存储数据的基本单元是table,显示中每个仓库放置物品的基本单位就是床,user就是每个schema的主人,(所以schema包含的是object,而不是user),user和schema是一一对应的,每个user在没有特别指定下只能使用自己schema的东西,如果一个user想使用其他schema的东西,爱就要看哪个schema的user有没有给你这个权限了,或者看这个仓库的老大(DBA)有没有给你这个权限了。换句话说,如果你是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是你的,你有完全的操作权,可以扔掉不用东西从每个房间,也可以防止一些有用的东西到某个房间,你还可以给每个user分配具体的权限,也就是他到某一个房间能做些什么,是只能看(read-only),还是可以像主人一样有所有控制权(R/W),这个就要看这个user所对应的角色Role了。
ps:到此,这个问题基本上算是理清了,小弟刚接触oracle,文章中有不足或者纰漏之处,还请高手耐心指导,谢谢!

分享到:
评论

相关推荐

    oracle数据库用户管理

    Oracle 数据库管理与应用 Oracle数据安全性可分为2类...SYS:具有dba角色的管理帐户,sys方案中的任何表和视图不能由任何其他数据库管理员操作 SYSTEM /manager:执行管理任务 SYSMAN:企业管理器执行数据库管理的帐户

    Oracle 9i 数据库管理员指南(PDF)

    第3部分:模式对象,内容包括管理模式对象空间、管理表、管理索引、管理分区表和分区索引、管理簇、管理散列、管理视图、序列和同义词、模式对象的常规管理、检测和修复数据块损坏。第4部分:数据库的安全,介绍...

    ORACLE表空间恢复方案

    一)用户表空间    错误: 在启动数据库时出现ORA-01157,ORA-01110或操作系统级错误例如ORA-07360, 在关闭数据库(使用shutdown normal或shutdown immediate) 时将导致错误ORA -01116,ORA-01110以及操作系统级错误...

    oracle 12c 数据库 教程

    (六)Oracle 数据库备份的解决方案 89 二、闪回 90 (一)什么是闪回 Flashback? 90 (五)闪回查询:Flashback Query 91 (六)闪回版本查询:Flashback Version Query 92 (七)闪回表:Flashback Table 93 (八...

    Oracle日常维护故障定位故障排除

    21 由于创建表空间时误将其创建在以‘本地管理’,导致在表空间上的所有对象无法修改其存储参数 22 错误地在系统表空间上建无关的数据文件 23 ORACLE客户端在P4上安装不成功 24由于LISTENER.ORA或TNSNAMES.ORA配置...

    5.4空间数据库管理系统.pdf

    的方案——关系表 SDO_GEOMETRY对象类型 每个图层再被分解为若干 几何实体——每一行记录 几何实体又被分解成点、 线、面等基本元素 Oracle中的栅格数据存储 GeoRaster 存储、索引、查询、分析空间GeoRaster栅格数据...

    oracle数据库dba管理手册

    6.1.1 表空间中的自由空间缺乏 131 6.1.2 临时段的空间不足 132 6.1.3 回滚段达到扩展极限 132 6.1.4 数据段碎片 132 6.1.5 自由空间碎片 133 6.1.6 SGA区域大小设置得不正确 133 6.2 目标选择 133 6.3 最终产品 134...

    基于oraclespatial的遥感影像数据库系统设计与实现

    它是Oracle数据库的核心组件,它将以往对空间数据的操作转移到了数据库内部, 围绕它进行可扩展的空间计算而不用担心性能和安全问题。在本项目中,基于 Spatial这个组件设计出的空间数据库,既能保证对空间数据的...

    政务平台数据库设计.doc

    " "ETL "RESOURCE、CONNECT "JSYZT "ETL数据查询用户 " 数据库表汇总 表4-6数据库表汇总 "类别 "表名 "功能说明 " "组织机构用户管理 "用户表 "描述用户的基本信息 " " "用户签章 "描述用户签章的基本信" " " "息 " ...

    Oracle大全

    2、 导出方案(方案中的所有对象,表、索引、约束等) 3、 导出数据库(导出数据库中的对象及数据,需要 DBA 权限,如 system 就可以) 4、 导入表 5、 导入方案(方案中的所有对象,表、索引、约束等) 6、 ...

    oracle10g课堂练习I(1)

    预配置数据库中的表空间 5-14 变更表空间 5-16 对表空间执行的操作 5-18 删除表空间 5-20 查看表空间信息 5-21 采集存储信息 5-22 查看表空间内容 5-23 扩大数据库 5-24 什么是 Automatic Storage Management...

    Oracle DBA workshop1 (中文版)

    预配置数据库中的表空间5-14 变更表空间5-16 表空间操作5-18 删除表空间5-20 查看表空间信息5-21 采集存储信息5-22 查看表空间内容5-23 扩大数据库5-24 什么是自动存储管理5-25 ASM:主要功能和优点5-26 ASM:概念5-...

    Oracle数据库性能优化的艺术 (文平) 高清PDF扫描版

    《oracle数据库性能优化的艺术》内容高屋建瓴,用辩证法中的系统化分析方法,不仅从硬件(服务器系统、存储系统、网络系统等)、软件(操作系统、中间件系统、应用软件等)和应用场景(用户访问模式、用户使用频度、...

    数据库设计培训.pptx

    逻辑阶段可采用的有效方法 ODL(Object Definition Language)方法 面向对象的数据库设计方法 计算机辅助设计 ORACLE Designer 2000 SYBASE PowerDesigner 数据库设计培训全文共37页,当前为第6页。 数据库设计概述 ...

    数据库优化设计方案.doc

    因此首先要对数据库 中的逻辑对象根据他们的使用方式和物理结构对数据库的影响来进行分类,这种分类包 括将系统数据和用户数据分开、一般数据和索引数据分开、低活动表和高活动表分开等 等。 数据库逻辑设计的结果...

    Oracle自学(学习)材料 (共18章 偏理论一点)

    15 管理用户 目标 15-2 用户和安全 15-3 数据库方案 15-4 检查创建用户 15-5 创建新用户:数据库验证 15-6 创建新用户:操作系统验证 15-8 改变用户的表空间限额 15-9 删除用户 15-10 获取用户的信息 15-11 小结 15-...

    ORACLE11G宝典.rar 是光盘里面的内容,书太厚咧没法影印啊

    第5~9章分别介绍了Oracle11g的体系结构、表空间与数据文件的管理、启动和关闭数据库、网络服务与管理,第10—13章介绍了有关安全的几个内容(权限、角色、概要文件、用户的管理),第14—17章介绍了几种方案对象...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,...

Global site tag (gtag.js) - Google Analytics