欢迎各位兄弟 发布技术文章
这里的技术是共享的
我们可以在Oracle数据库中,建立不同的表空间,为其设置最大的存储容量,然后把用户归属于这个表空间。如此的话,这个用户的存储容量,就受到这个表空间大小的限制。当然,表空间的优势还不仅仅这些,企业对于数据库的性能要求越高,或者数据库容量越大,则表空间的优势就会越大。
在一个房间里面这个房间可以存储很多箱子,箱子里面可以存储物品! 表空间可以看成房间 箱子可以看成数据文件 物品可以看成表。 用户指定表空间也就是你希望把属于这个用户的表放在那个房间(表空间)里面。
表空间是一个虚拟的概念可以无限大,但是需要由数据文件作为载体。
一个表空间对会应一个文件
如果同一个数据库下 有成百上千个表,
放在一个表空间,就相当于数据都放一个文件里,这个文件会很大
分成十个表空间,可放不同目录十个文件
tablespace就是存放数据逻辑区域,可以建立在不同的数据文件上,并且分到不同的磁盘空间中,有利于区别用户和高效利用磁盘空间
你可以先把它想象成文件夹,以后用户的所有操作必须在这个文件夹下进行,比如创建一个excel文件,文件就保存在这个文件下。慢慢的,你就更能明白表空间的意思的。
表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表, 所以称作表空间。
创建用户的时候需要指定默认表空间和temp表空间,主要是为了当该用户创建对象不指定表空间时使用默认表空间来存储对象,而temp表空间是用户执行查询、排序、分组等操作时使用temp表空间来存储临时数据块
表空间里ORACLE中的一个逻辑概念,它用于存放数据库文件,而数据库文件是存放在磁盘的数据文件,是物理概念,表空间里是后台的一个内存区域,通过它来连接到数据库文件,表空间只是一个虚拟的空间,但是它又没有实际的大小,表空间是恢复数据库的最小单元,表空间不能单独存在,它至少应该包涵一个数据库文件,可以把具有相同数据结构的数据库文件同时放到一个表空间里,而表空间用来逻辑的加以管理这些文件,可以想象成ORACLE是一个柜子,而表空间就是柜子上的空抽屉,而数据库文件就是文件夹,它放在抽屉里,嘿嘿
ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构。一个ORACLE数据库能够有一个或多个Oracle表空间,而一个表空间则对应着一个或多个物理的数据库文件。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。
每个ORACLE数据库均有SYSTEM表空间,这是数据库创建时自动创建的。SYSTEM表空间必须总要保持联机,因为其包含着数据库运行所要求的基本信息(关于整个数据库的数据字典、联机求助机制、所有回退段、临时段和自举段、所有的用户数据库实体、其它ORACLE软件产品要求的表)。
就是存放该用户表数据的地方 一般情况下默认就可以了
来自 https://zhidao.baidu.com/question/274472513.html
2012-08-12 14:35 虫师 阅读(85962) 评论(4) 编辑 收藏 举报
我们知道oarcle数据库真正存放数据的是数据文件(data files),Oarcle表空间(tablespaces)实际上是一个逻辑的概念,他在物理上是并不存在的,那么把一组data files 捻在一起就成为一个表空间。
表空间属性:
一个数据库可以包含多个表空间,一个表空间只能属于一个数据库
一个表空间包含多个数据文件,一个数据文件只能属于一个表空间
表这空间可以划分成更细的逻辑存储单元
Oracle数据库的存储结构:
从逻辑的角度来看,一个数据库(database)下面可以分多个表空间(tablespace);一个表空间下面又可以分多个段(segment);一个数据表要占一个段(segment),一个索引也要占一个段(segment )。 一个段(segment)由多个 区间(extent)组成,那么一个区间又由一组连续的数据块(data block)组成。这连续的数据块是在逻辑上是连续的,有可能在物理磁盘上是分散。
那么从物理的角度上看,一个表空间由多个数据文件组成,数据文件是实实在在存在的磁盘上的文件。这些文件是由oracle数据库操作系统的block 组成的。
Segment(段) :段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。
Extent (区间):分配给对象(如表)的任何连续块叫区间;区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块);一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象.
查看表空间:
SQL> select * from v$tablespace;
TS# NAME INCLUD BIGFIL FLASHB ENCRYP
---------- ------------------------------------------------------------ ------------ ------ ------
0 SYSTEM YES NO YES
1 UNDOTBS1 YES NO YES
2 SYSAUX YES NO YES
4 USERS YES NO YES
3 TEMP NO NO YES
查看每个表空间有哪些数据文件:
SQL> desc dba_data_files;
Name Null? Type
----------------------------------------- -------- ----------------------------
FILE_NAME VARCHAR2(513)
FILE_ID NUMBER
TABLESPACE_NAME VARCHAR2(30)
BYTES NUMBER
BLOCKS NUMBER
STATUS VARCHAR2(9)
RELATIVE_FNO NUMBER
AUTOEXTENSIBLE VARCHAR2(3)
MAXBYTES NUMBER
MAXBLOCKS NUMBER
INCREMENT_BY NUMBER
USER_BYTES NUMBER
USER_BLOCKS NUMBER
ONLINE_STATUS VARCHAR2(7)
查看详细数据文件:
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
----------------------------------------------------------------------------------------------------------------
/ora10/product/oradata/ora10/users01.dbf USERS
/ora10/product/oradata/ora10/sysaux01.dbf SYSAUX
/ora10/product/oradata/ora10/undotbs01.dbf UNDOTBS1
/ora10/product/oradata/ora10/system01.dbf SYSTEM
创建一个表空间:
SQL> create tablespace paul datafile '/ora10/product/oradata/ora10/paul01.dbf' size 20m;
Tablespace created.
查看我们创建的表空间:
[ora10@localhost ora10]$ pwd
/ora10/product/oradata/ora10
[ora10@localhost ora10]$ ls
control01.ctl control03.ctl redo01.log redo03.log system01.dbf undotbs01.dbf
control02.ctl paul01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf
表空间根据对区间(extents)的管理分为两种类型
词典管理表空间(Dictionary-managed tablespaces)
在表空间里,有的区间被占用了,有的没被占用,这些数据是放在数据字典里的。当你对这个表空间进行分配或释放的时候,数据文件里相关的表就会做修改。
本地管理表空间(locally managed tablespace)
本地管理表空间不是在数据词典里存储表空间的,由自由区管理的表空间。用位图来自由的管理区间。一个区间对一个位,如果这个位是1表示已经被占用,0表示未被占用。
词典管理空间表示“中央集权治”,本地管理表空间表示“省市自治区”,一个databases表示中国,tablespaces表示一个省或直辖市。词典管理统一由中央调配。而本地管理表示有高度的自治权利,自己各种资源的分配不用上报中央。
Undo tablespace
Undo 类型的表空间,当你对一张表或一条记录进行修改的时候,它会对修改之前的信息进行保存,这样可以保证数据的回滚。Undo 只包含undo类型的对象,不能包含任何其他对象,只适合于数据文件和区间管理。
创建undo 类型的表空间:
SQL>create undo tablespace undo1 datafile '/ora10/product/oradata/ora10/paul01.dbf' size 20m;
Temporary Tablespaces
临时表空间,相当于一个临时的垃圾场。用于排序操作,比如你要做一次大数据量的查询,但在内存无法存储这么大量的数据,然后会在磁盘上建立一个临时的表空间用记存放这些数据。Oracle就会用这个临时表空间做排序,存储中间结果。
一个全局的临时表空间,可以由多个用户共享,谁需要谁使用。但它只能存放临时的数据,不能包含任何永久性对象。 建议用本地管理方式创建这个表空间。
创建临时表空间:
SQL>create temporary tablespace temp datafile '/ora10/product/oradata/ora10/paul01.dbf' size 20m extent management local uniform size 4m;
删除表空间:
删除表空间,使用命令drop tablespace ‘表空间名’ 但是有3个选项需要注意:
INCLUDING CONTENTS:指删除表空间中的segments;
INCLUDING CONTENTS AND DATAFILES:指删除segments和datafiles;
CASCADE CONSTRAINTS:删除所有与该空间相关的完整性约束条件。
例:
DROP TABLESPACE FESCO ‘表空间名’ CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
来自 https://www.cnblogs.com/fnng/archive/2012/08/12/2634485.html
来自 https://bbs.csdn.net/topics/50282621
Oracle表空间(tablespaces)是一个逻辑的概念,真正存放数据的是数据文件(data files)。一个Oracle数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。表空间是Oracle数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。
1.Oracle表空间的特性:
(1)控制数据库数据磁盘分配;
(2)限制用户在表空间中可以使用的磁盘空间大小;
(3)表空间具有 online, offline, readonly, readwrite属性。
2.表空间的分类:
永久表空间:数据库中要永久化存储的一些对象,如:表、视图、存储过程
临时表空间:数据库操作当中中间执行的过程,执行结束后,存放的内容会被自动释放
UNDO表空间:用于保存事务所修改数据的旧值,可以进行数据的回滚
Segment(段)是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。
Extent(区间/扩展),分配给对象(如表)的任何连续块叫区间;区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块);一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象.
select * from dba_data_files; --describes database files 数据文件信息
select * from dba_temp_files; --describes all temporary files (tempfiles) in the database 临时数据文件信息
select * from dba_free_space; --describes the free extents in all tablespaces in the database 数据库中所有表空间中的空闲扩展区
select * from dba_segments; --describes the storage allocated for all segments in the database 数据库中的所有段分配的存储
1.创建表空间
--语法:
create [temporary] tablespace tablespace_name tempfile|datafile ‘xx.dbf’ size xx;
--创建临时表空间时,加上temporary关键字;
2.扩大表空间,当某个表空间被用完以后,就不能再对数据库表进行insert操作,此时我们需要扩大表空间,即可通过增加datafile文件来扩大表空间。
select f.* from dba_data_files f where f.tablespace_name='MLT';--查看表空间信息
alter tablespace MLT --表空间名
add datafile '/home/oracle/oradata/crm/mlt04.dbf' --datafile文件路径
size 100M --表空间大小
autoextend on --自动扩展
3.修改表空间的状态
alter tablespace tablespace_name online|offline;--表空间是脱机时不可用,默认是联机的
4.删除表空间
drop tablespace tablespace_name[including contents];
--including contents 表示删除表空间包括datafile数据文件,不加则不删除相关数据文件;
--删除数据文件时,不能删除表空间当中第一个数据文件,如果要删除就需要删除整个表空间。
5.表空间使用情况查看
--查询表空间使用情况
SELECT Upper(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99')
|| '%' "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
Round(Sum(BYTES) / ( 1024 * 1024 ), 2) TOTAL_BYTES,
Round(Max(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
Round(Sum(DD.BYTES) / ( 1024 * 1024 ), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
--查询表空间的空闲扩展区
select tablespace_name, count(*) AS extends,round(sum(bytes) / 1024 / 1024, 2) AS 大小/MB
,sum(blocks) AS blocks
from dba_free_space group BY tablespace_name;
--查询表空间的总容量
select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_data_files group by tablespace_name;
--查询表空间使用率
SELECT total.tablespace_name,
Round(total.MB, 2) AS 总量/MB,
Round(total.MB - free.MB, 2) AS 已使用/MB,
Round(( 1 - free.MB / total.MB ) * 100, 2) || '%' AS 使用率
FROM (SELECT tablespace_name,
Sum(bytes) / 1024 / 1024 AS MB
FROM dba_free_space
GROUP BY tablespace_name) free,
(SELECT tablespace_name,
Sum(bytes) / 1024 / 1024 AS MB
FROM dba_data_files
GROUP BY tablespace_name) total
WHERE free.tablespace_name = total.tablespace_name;
来自 https://zhuanlan.zhihu.com/p/48446222
什么是表空间
terryhuang 2007-05-17 16:37:00 5742 收藏 2
分类专栏: [分类11]oracle 文章标签: oracle 磁盘 语言
版权
[分类11]oracle
专栏收录该内容
50 篇文章0 订阅
订阅专栏
ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成
的.............
这里讨论表空间........就只谈相关的数据文件吧..............控制文件和
LOGFILE的具体用途有空了再说吧..................
首先明确概念:表空间是ORACLE内部定义的一个概念,是为了统一ORACLE物理和逻辑
上的结构而专门建立的,从物理上来说,一个表空间是由具体的一个或多个磁盘上数
据文件构成的(至少1对1,可以1对多),从逻辑上来说一个表空间是由具体的一个或
多个用户模式下的表,索引等等里面的数据所构成的.............
因此从用户的角度来看是不应该看到磁盘上物理的数据文件的,其从小到大的视角是
这样的关系:
字段值 --> 记录值 --> 表数据 --> 用户 --> 表空间 --> ORACLE
而从一个ORACLE DBA的视角来看应是这样的关系:
数据文件 --> 表空间 --> ORACLE
综合一下,也就是说在ORACLE中表不可能单独存在,一定隶属于某一个用户,而某一
用户的数据必定存在于某个表空间中................
当然,上面我是用最通俗的语言介绍的............
实际上来说中间还存在很多技术术语和概念,比如说SEGMENTS,EXTENTS,BLOCK等
等...
————————————————
来自 https://blog.csdn.net/guo_cw/article/details/80530726
Oracle表空间概念详解
疯狂的咸鸭蛋 2018-05-31 21:51:30 14977 收藏 18
分类专栏: Linux学习笔记 数据库 文章标签: Oracle Dataspace
版权
Linux学习笔记
同时被 2 个专栏收录
9 篇文章0 订阅
订阅专栏
数据库
10 篇文章0 订阅
订阅专栏
表空间概念详解
1.使用系统用户登录SQL Plus:
sys,system;sysman;scott
用户登录格式:[username/password] [@server] [as sysdba|sysoper]
system/orcl @orcl as sysdba
备注:orcl 就是自己设置的服务名system/orcl
如果已经使用某个用户登录了SQL Plus,切换登录用户:
connect sys/orcl as sysdba
备注:书写不区分大小写
2. 查看登录用户
show user
备注:sqlplus 中输入的命令不需要分号,当输入的是sql语句时需要加分号
通过”数据字典”—dba_users(数据库提供的表,也是由很多的字段组成)查看用户的其他字段信息
查看数据字典中的字段:
desc dba_users
通过数据字典查看有多少个用户:
select username from dba_users;
3. 启用(scott)用户的语句:
使用scott用户登录sqlplus:(scott用户的默认密码是tiger)
connect scott/tiger
4. 表空间概述:
表空间:
数据库的逻辑存储空间,可以理解为在数据库中开辟的空间用来存储数据库对象;
表空间和数据文件的关系:
表空间由一个或多个数据文件组成;数据文件的大小和位置可以自己定义;
表空间的分类:
永久表空间:数据库中要永久化存储的一些对象,如:表、视图、存储过程
临时表空间:数据库操作当中中间执行的过程,执行结束后,存放的内容会被自动释放
UNDO表空间:用于保存事务所修改数据的旧值,可以进行数据的回滚
5. 查看用户的表空间:
①数据字典
dba_tablespaces(系统管理员级别查看的数据字典)
user_tablespaces(普通用户查看的数据字典)
②.查看表空间的字段
desc dba_tablespaces
③.查看有几个表空间
select tablespace_name from dba_tablespaces;
⑤.查看用户的字段信息
desc dba_users
⑥.查看用户的默认表空间、临时表空间等等
select default_tablespace from dba_users where username=’SYS’;
6. 设置用户的默认或临时表空间
alter user username default|tempporart tablespace tablespace_name;
备注:普通用户没有设置表空间的权限
7. 创建、修改、删除表空间
①.创建表空间
create [temporary] tablespace tablespace_name tempfile|datafile ‘xx.dbf’ size xx;
备注:如果创建的是临时表空间,需要加上temporary关键字;
②.查看表空间的具体路径:(通过dba_data_files 和 dba_temp_files这个数据字典)
desc dba_data_files
select file_name from dba_data_files where tablespace_name=”;(条件是表空间的名字,需要大写)
③.修改表空间的状态
设置联机或脱机的状态(表空间是脱机时不可用,默认是联机的)
alter tablespace tablespace_name online|offline;
如何知道表空间所处的状态?(通过这个dba_tablespaces数据字典)
desc dba_tablespaces
select status from dba_tablespaces where tablespace_name=”;(条件是表空间的名字,需要大写)
设置只读或可读写的状态(只有在联机状态才可以更改,默认的联机状态就是读写状态)
alter tablespace tablespace_name read only | read write;
④.修改数据文件
增加数据文件
alter tablespace tablespace_name add datafile ‘xx.dbf’ size xx;
select file_name from dba_data_files where tablespace_name=”;(条件是表空间的名字,需要大写)
备注:通过这条select语句就查询到当前表空间中的数据文件
删除数据文件(不能删除表空间当中第一个数据文件,如果要删除就需要删除整个表空间)
alter tablespace tablespace_name drop datafile ‘xx.dbf’;
⑤.删除表空间
drop tablespace tablespace_name[including contents];
备注:如果只是删除表空间不删除该表空间下的数据文件,则不加including contents;
————————————————
来自 https://blog.csdn.net/guo_cw/article/details/80530726