当前位置:数据库 > Oracle >>

oracle维护表空间和数据文件

oracle维护表空间和数据文件
 
一: oracle 表空间概念
表空间是联系数据库的物理磁盘(数据文件)和逻辑组件的桥梁,表空间是用来存储oralce数据库对象例如:tables、indexes和 rollback segments。可以想象oracle物理磁盘和逻辑磁盘之间的关系,表空间的概念和这个一样。 PS: 数据文件 就相当于一个省的的范围(这个是实实在在存在的),而 表空间相当于在省上建立的管理机构,行政机构等,这些是相当于逻辑的结构,这些 表空间的 信息在数据字典中存储。
 
一个表空间是由至少一个数据库 datafiles(数据文件)组成,在表空间的总大小是可变的,所有分配在表空间的数据文件的物理磁盘空间大小也是可变的。
当表空间被定义的 时候,datafiles自动创建,在大多数情况下,所有的datafile是被提前分配的,当datafile创建的时候,空间即被设置,你,你能够定义datafile的初始大小。
tablespace 就是把一组data file 放在一起 成为一个 tablespace;是一个逻辑概念。
关于oracle的一些概念:
 
 
先科普以下概念:
1:oracle block concept(块概念)
一个oracle块是一个oracle数据块的最小的存储单元,oracle数据库块的大小当创建数据的时候被指定,除非oracle数据进行重构,否则不能进行修改了,数据库块大小通常为2K,4K,8K,16KOR 32K。一旦定义了块的大小,就能够创建新的 表空间了,表空间包含若干个块。
注意:oracle数据库instance也包含一个RAM buffer cache,组成RAM buffer cache的块适合和物理数据文件数据块相对应。
 
 
数据库包含有多个 tablespace  一个 tablespace包含一个或多个 datafiles ,一个表或者一个index 暂居一个segment
extent 由连续的oracle data block组成 : 逻辑上连续。
一个segment可以存储在不同的datafiles里面,跨越的概念;extent不能跨越datafiles。oralce data block  包含  一个或多 os block
 
二:表空间的类型:
1 :一个数据库至少包含一个tablespace 就是 SYSTEM;
 system  tablespace ;创建数据库的时候,创建包含数据字典包含SYSTEM undo  segment  
 Non-SYSTEM tablespace
2:更科学的划分 tablespace的类型:
             1:permanent 永久表空间  (SYSTEM 和 No-SYSTEM tablespace 就是这种类型)
             2: undo  表空间
             3:temporary  表空间
2,3是用于管理数据库 的表空间,所有不永久存储数据,
PS:当一个数据被创建的时候,将包含以下表空间:
SYSTEM (the data dictionary)
SYSAUX (optional database components)
TEMP (temporary tablespace, see tablespace types below)
UNDOTBS1 (undo tablespace, see tablespace types below)
USERS (default users tablespace created)
3:创建表空间     create tablespace oracle doc 11: 
 创建表空间的简单语法:
[sql]
SQL> CREATE TABLESPACE  peng DATAFILE 'D:\APP\TOPWQP\ORADATA\ORCL\peng01.DBF'  S  
IZE 5M;  
  
表空间已创建。  
 
查找表空间信息
[sql]
SQL> select * from v$tablespace;  
  
       TS# NAME                           INC BIG FLA ENC  
---------- ------------------------------ --- --- --- ---  
         0 SYSTEM                         YES NO  YES  
         1 SYSAUX                         YES NO  YES  
         2 UNDOTBS1                       YES NO  YES  
         4 USERS                          YES NO  YES  
         3 TEMP                           NO  NO  YES  
         6 EXAMPLE                        YES NO  YES  
         7 USER_TEMP                      NO  NO  YES  
         8 MY_SPACE                       YES NO  YES  
         9 TS_MYDB                        YES NO  YES  
        10 PENG                           YES NO  YES  
  
已选择10行。  
 
如何知道一个表空间有哪些数据文件:
[sql]
SQL> col file_name format a40  
SQL>  
SQL> select file_name ,tablespace_name from dba_data_files;  
  
FILE_NAME                                TABLESPACE_NAME  
---------------------------------------- ------------------  
D:\APP\TOPWQP\ORADATA\ORCL\USERS01.DBF   USERS  
D:\APP\TOPWQP\ORADATA\ORCL\UNDOTBS01.DBF UNDOTBS1  
D:\APP\TOPWQP\ORADATA\ORCL\SYSAUX01.DBF  SYSAUX  
D:\APP\TOPWQP\ORADATA\ORCL\SYSTEM01.DBF  SYSTEM  
D:\APP\TOPWQP\ORADATA\ORCL\EXAMPLE01.DBF EXAMPLE  
D:\APP\TOPWQP\ORADATA\ORCL\MY_SPACE.DBF  MY_SPACE  
D:\APP\TOPWQP\ORADATA\ORCL\TS_MYDB.DBF   TS_MYDB  
D:\APP\TOPWQP\ORADATA\ORCL\PENG01.DBF    PENG  
  
已选择8行。  
 
4:两种管理数据字典的方式:
1: locally managed  tablespace   自治式管理:
1:自己管理tablespace   
2:数据字典中有个Bitmap 用于管理 tablespace (一个位图对应一个extent的意味1占用 0未占用)
在每一个数据文件的头,都会有一个bitmap 位图,来表示空间的占用情况。一个bit代表一个extent,占用1 未占用 0;locally-managed也是串行,不能并行,但是 每个表空可以自己管理,所有就相当于并行。如果SYSTEM表空间用的是local-managed ,其他表空间就只能是 local-managed的了。以后就要用local-managed 方式管理表空间。
如果由于历史的原因 dictionary 管理的 SYSTEM tablespace 想变成locally managed:需要执行如下命令:
[sql]
DBMS_SPACE_ADMIN.TABLESPACE_MIGRANTE_TO_LOCAL('SYSTEM');  
 
注意:做这个命令前的准备工作: 1:全备份数据库 2:确保临时表空间不是SYSTEM
自己管理的tablespace 有两个表管理这些数据:
?疑问  每个表空间口有自己的 DEBIT和CREDIT表吗?
DEBIT表:记录所有已经被分配的extent
CREDIT表:记录所有空闲的extent
当申请空间的时候,oracle就去查询这些表,然后分配空间,当向表中
插入数据的时候,就是在申请空间。
 
   2: data-dictionary 的管理。
  当自己的表中插入数据的时候,oracle要去查询数据字典(执行很多隐含sql)然后分配空间。因为数据字典只有一个:对数据字典的访问必须是序列化的,不能并发,如果通过数据字典,管理表空间, 容易造成数据库的开销过大,所以这种方式有点过时,中央集群的管理方式是 data-dictionary,地方似的管理是新出的管理表空间的方式。
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,