`

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

阅读更多
最近在学习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数据库大数据迁移方案

    9. 了解 Oracle 数据库迁移的应用场景:本教程中提供了两个应用场景,分别是实现不同库下不同用户之间表空间的迁移和实现不同表空间中表的迁移。 通过本教程,我们可以学习如何快速迁移 Oracle 数据库,以实现稳定...

    Oracle至PostgreSQL数据库迁移方案.pptx

    它连接Oracle数据库,自动扫描并提取其结构或数据,然后生成可以加载到PostgreSQL数据库中的SQL脚本。 二、Ora2PG功能 Ora2PG可以支持大多数SQL的转换,但某些情况下仍需要人工校正语法,使其兼容PostgreSQL。其...

    Oracle数据库基础教程课后习题答案

    Oracle数据库的逻辑结构包括方案(schema)对象、数据块(data block)、区间(extent)、段(segment)和表空间(tablespace)等。数据库由若干个表空间组成,表空间由表组成,表由段组成,段由区间组成,区间则由...

    oracle创建数据库图解

    以上语句创建了一个名为SM71INDEX的表空间,用于存储用户的对象。然后,可以创建其他必要的表空间、用户、角色和权限,以及设置相应的初始化参数。 总之,Oracle创建数据库涉及多个层面,包括数据库设计、存储策略...

    Oracle9i的数据库管理, Oracle9i数据库对象的管理,Oracle9i数据库的安全性,Oracle9i数据库的完整性和并发控制等

    Oracle9i是一款强大的关系型数据库管理系统,其在21世纪初发布,提供了众多先进的功能,以满足企业级数据存储和管理的需求。...理解和掌握这些知识点对于任何Oracle数据库管理员来说都是至关重要的。

    oracle官方数据库教程

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。本教程针对初学者,深入浅出地介绍了Oracle的核心概念、功能和操作,旨在帮助学习者快速掌握这一强大的数据库系统。 首先...

    Oracle数据库培训.ppt

    表空间是 Oracle 数据库中的一个主要结构,用于存储数据库对象。模式对象是 Oracle 数据库中的数据库对象的集合,包括表、视图、序列、存储过程、索引、聚簇、同义词、数据库联结等。 数据块是 Oracle 数据库中的...

    Oracle数据库学习课件

    4. **Oracle数据库管理**:这部分内容可能涵盖数据库实例管理、表空间和数据文件的管理、用户和权限管理、备份与恢复策略、性能监控与调优。还会涉及数据库的安全性、故障排查和问题诊断。 5. **Oracle高级特性**:...

    oracle数据库 详细课件

    学习Oracle的数据块、区、段和表空间之间的关系,理解物理存储的层次结构对于优化存储使用和故障排查很有帮助。 11. **数据库安全管理** 掌握审计、权限管理和密码策略,确保数据库的安全性和合规性。 12. **PL/...

    oracle数据库基础知识

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,它在企业级数据存储和管理中扮演着核心角色。Oracle数据库基础知识是每个IT从业者或自学者必备的知识领域。以下将深入讲解Oracle数据库的一些关键概念和操作...

    Oracle数据库 Synonym和DBLink

    同义词是 Oracle 数据库中的一种对象别名,它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别。同义词扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互。同义词是数据库对象的一个...

    Oracle 9i 数据库管理员指南

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,尤其在企业级应用中占据主导地位。本文将基于"Oracle 9i 数据库管理员指南"及相关补充资料,深入探讨Oracle数据库管理的关键知识点。 首先,"Oracle 9i...

    Oracle数据库基础知识 ISSUE1.0.doc

    表空间是Oracle数据库中的逻辑存储单元,用于存储数据库表和索引。表是Oracle数据库中的基本存储单元,用于存储数据。索引是Oracle数据库中的辅助存储结构,用于加速数据查询。视图是Oracle数据库中的虚拟表,用于...

    用传输表空间技术升级Oracle数据库.pdf

    综上所述,传输表空间技术为医院等关键业务系统的Oracle数据库升级提供了一种高效、可靠的解决方案,尤其是在停机时间有限的情况下。通过熟练掌握和运用这一技术,可以确保数据库升级过程的顺利进行,从而保障医疗...

    ORACLE数据库优化方案.pdf

    【Oracle数据库优化方案】 Oracle数据库是关系型数据库管理系统的一个重要代表,其性能优化对于企业级应用至关重要。本文主要从四个不同级别的调整分析入手,即操作系统级、Oracle RDBMS级、数据库设计级和SQL级,...

    Oracle数据库实用教程

    3. **数据管理**:Oracle数据库中,数据存储在表空间中,表空间由数据文件组成。用户需要理解数据文件、重做日志文件、控制文件的概念和作用。此外,还需要了解如何创建、删除和管理表、索引、视图、序列等数据库...

    大型ORACLE数据库优化设计方案

    在《大型ORACLE数据库优化设计方案》这篇论文中,作者深入探讨了针对ORACLE数据库的多层次优化方法,旨在提升数据库的性能和效率。以下是关于这个主题的详细说明: 一、数据库优化自由结构OFA OFA(Optimal ...

    ORACLe数据库讲义.ppt

    随着XMLDB的加入,Oracle数据库进一步强化了对XML文档的管理和存储能力,使其能够在同一个数据库中与关系数据共存。 Oracle数据库的逻辑结构主要由以下几个部分组成: 1. **数据文件**:数据文件是实际存储数据的...

    oracle数据库用户管理

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

    Oracle对象关系数据库系统故障产生原因及其解决方案.pdf

    【Oracle对象关系数据库系统故障产生原因及其解决方案】 Oracle对象关系数据库系统是企业级的重要数据存储平台,它在处理大量复杂数据和事务时提供了高效、安全的解决方案。然而,由于多种因素,如硬件故障、软件...

Global site tag (gtag.js) - Google Analytics