`
m635674608
  • 浏览: 5029227 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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,文章中有不足或者纰漏之处,还请高手耐心指导,谢谢!

转载http://blog.csdn.net/blognkliming/article/details/7613189
分享到:
评论

相关推荐

    基于C#连接Oracle数据库Oracle.ManagedDataAccess

    Oracle数据库是一种广泛应用的关系型数据库管理系统,而C#作为.NET框架的主要编程语言,广泛用于构建各种企业级应用。本篇将详细讲解如何使用C#通过Oracle.ManagedDataAccess库实现与Oracle数据库的连接,无需在本地...

    如何解决Oracle8i数据库临时表空间满的问题.pdf

    1. Oracle数据库的基本概念:Oracle数据库是一种对象关系型数据库管理系统,它能够将大量数据存储在计算机存储设备中,并可以实现对数据的高效访问。它使用结构化查询语言(SQL)作为数据查询的主要语言,并提供了一...

    C#使用Oracle.ManagedDataAccess.dll轻松访问oracle数据库

    在.NET开发环境中,C#语言提供了丰富的库来与各种数据库进行交互,其中之一就是Oracle数据库。Oracle.ManagedDataAccess.dll是Oracle公司为.NET Framework提供的一款托管数据访问组件,它允许开发者无需安装Oracle...

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

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

    Oracle数据库中有关表空间设计管理方法.pdf

    Oracle数据库表空间设计管理方法是一篇专门介绍Oracle数据库中如何进行表空间设计与管理的文章,涵盖了数据库结构、设计原则以及表空间问题解决方法等重要知识点。为了更好地理解和运用这些知识点,我们将从以下几个...

    快速实现Oracle数据库大数据迁移方案

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

    Oracle数据库维护培训

    表空间是Oracle数据库中数据组织的主要逻辑单元,它充当了数据库对象的容器。在逻辑上,一个数据库由一个或多个表空间组成,每个表空间可以包含多个段。表空间下还可以进一步分为段、区和块。表空间允许数据库管理...

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

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

    Oracle数据库培训.ppt

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

    ORACLE SYSTEM表空间已满解决方案.docx

    SYSTEM表空间是Oracle数据库中的一个关键组成部分,在数据库创建时会自动创建。它包含了许多重要的数据库元数据和控制信息,对于数据库的正常运行至关重要。具体来说,SYSTEM表空间通常包含以下内容: 1. **数据...

    oracle导入时表空间不一致解决方法

    在Oracle数据库管理中,经常会出现因表空间不一致而导致的数据导入失败的问题。本文将详细介绍如何解决这一常见问题,并确保数据能够顺利地从一个环境迁移到另一个环境中。 #### 一、问题背景 在进行Oracle数据...

    Linux安装Oracle11g数据库,并创建数据库表空间、用户及表.docx

    最后一步是在安装好的Oracle数据库中创建表空间、用户以及相关的数据表。这部分内容将指导如何通过SQL语句创建这些数据库对象。 通过以上详细的步骤,可以确保在Linux环境下顺利安装Oracle11g数据库,并创建必要的...

    ORACLE数据库优化方案.pdf

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

    Ch1Oracle关系数据库.ppt

    Oracle数据库的历史可以追溯到1977年,经过多次版本迭代,不断进化和完善,如今已成为全球领先的企业级数据库解决方案。随着云计算和大数据的发展,Oracle数据库技术的重要性愈发凸显,对掌握Oracle技术的人才需求也...

    ORACLe数据库讲义.ppt

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

    Oracle数据库日常维护方案书

    ### Oracle数据库日常维护方案知识点详解 #### 一、项目背景及目标 - **项目背景**:随着企业信息化建设的不断推进和发展,当前已有成熟稳定的网络环境以及覆盖生产经营管理的多种应用系统。面对超过600台在线运行...

    共享商业银行数据平台培养学生ORACLE数据库应用方案设计能力.pdf

    【数据库字典】在Oracle数据库中,数据库字典是一组系统表和视图,用于存储关于数据库对象(如表、索引、用户、权限等)的信息。通过查询数据库字典,可以获取元数据,帮助理解和管理数据库结构。 【解决方案设计】...

Global site tag (gtag.js) - Google Analytics