表空间

表空间的管理
表空间是ORACLE数据库中最大的逻辑结构,表空间是组织数据和分配空间的逻辑结构。ORALCE数据库中的所有对象和方案对象都被逻辑的存储在表空间中。
   控制文件、重做日志文件、归档日志文件等其他文件不属于任何表空间。
 表空间可以理解为是数据库对象的容器。表空间被划分为一个一个的独立的逻辑“段”,分别对应存储数据库中所创建的一个一个对象、方案对象,即数据库的所有对象和方案对象都被逻辑的存储保存在表空间中。
 可以更简单的理解表空间为现实中写字楼中的公司;而写字楼则对应为数据库;公司占用的房间为数据库中对应的数据文件。
 表空间分为:系统表空间(SYSTEM、SYSAUS表空间。一般存放oracle的数据字典表及其数据)和非系统表空间(除了system、sysaus表空间都是非系统表空间)。
 除了撤销表空间,相对于临时表空间而言,其他表空间度是永久表空间。

 表空间的特性      
 一个数据库包含多个表空间,一个表空间包含多个数据文件。表空间只能属于一个数据库。表空间的大小 等于其内部数据文件大小之和。
   数据库的大小 等于 其所包含表空间之和。表空间可以脱机或联机,但是SYSTEM表空间不能脱机。
   表空间存在 只读和读写状态可以互相切换。可以向表空间中增加或删除数据文件。任何一个用户使用表空间的数量是有一定限额的。
   一个用户默认属于一个表空间,但是该用户的不同方案对象的数据可以存放到不同表空间中。
可以将一个表中的数据和该表的索引数据存放到不同的表空间中。以提高I/O性能。

表空间分为:永久表空间(permanent)、临时表空间(temporary)、撤销表空间(undo)、大表空间等
  
  表空间类型
    系统表空间 (SYSTEM 、SYSAUX),其他都是非系统表空间;

 临时表空间(temporary):当执行排序、分组汇总、索引等功能的SQL语句时,服务器进程首先将临时数据存放搭配PGA区的排序区中,当排序区不够用时, 服务器进程就会在临时表空间中建立临时段,并将这些临时数据存放到临时段中。在临时表空间中,同一个例程的所有SQL语句的排序操作将共享使用一个排序段(sort segment)。排序段在执行第一条排序操作时被创建,在例程关闭时被释放。通过V$SORT_SEGMENT来查询排序段的使用情况,通过V$SORT_USAGE来查询使用排序段的会话和用户信息。
        
撤销表空间(undo):即将回退段(rollback segment)放到了撤销表空间中。由系统自动管理回退段。通过DBA_ROLLBACK_SEGS 查询得到撤销表空间中的回退段信息。 在ORACLE中可以创建多个撤销表空间,但是同一时刻只允许激活一个撤销表空间。当回退段不足时,一个事务可以使用多个回退段。
     撤销表空间中的撤销段的主要目的是:
    1、用一条ROLLBACK语句明确地回退一个事事务;
    2、隐含地回退一个事务;
    3、重构数据的一个读一致性图像;
    4、从逻辑错误中恢复;
        
    大文件表空间(bigfile):大文件表空间只能放置一个数据文件或临时文件。其数据文件可以包括G个数据库。
    大文件表空间BIGFILE只能放置一个数据文件或临时文件。但其数据文件可以包括4G个数据块。
    CREATE BIGFILE TABLESPACE wenzhongBigFile
    DATAFILE 'D:/DATABASEORACLE/wenzhongbigfile01_1.dbf' SIZE 2G
    SEGMENT SPACE MANAGEMENT AUTO;

    小文件表空间 smallfile可以放置多个数据文件,一个数据库可以放置多达64K个数据文件
   SYSTEM和SYSAUS表空间总是被创建为小文件表空间。
   CREATE SMALLFILE TEMPORARY TABLESPACE wenzhongSmallFile
   TEMPFILE 'D:/DATABASEORACLE/wenzhongSmallfile01_1.dbf' SIZE 2M
   UNIFORM SIZE 64K

 表空间是按照区和段空间进行管理的。
 表空间的管理流程是:先判断属于那种管理,如果是区管理,再判断是本地管理方式还是字典管理方式。字典管理方式则指定存储参数。本地管理方式则判断区是如何分配的(自动、统一),再判断是否为段空间管理(本地管理的特殊管理方式),然后再判断段空间的管理方式(自动、手动)
 表空间的区、段管理方式:
          表空间是按照区和段空间进行管理的。
          区管理又分为:本地管理方式 和字典管理方式;  
          本地管理方式按区进行分配;区的分配方式有 自动分配 和 统一分配 两种;
          紧接着 区分配是 按段空间管理;段空间管理分为  自动管理和手动管理 ;

字典管理方式(dictionary managed tablespace DMT):当在表空间中分配新的区,或回收已分配的区时,oracle将对数据字典中的相关“基础表”进行查询、更新、并且在这一过程总,使用单线程搜索方法,速度较慢。对表的更新操作会产生回退信息和重做信息,因此,在分配区和回收区时,会在数据库中产生回退信息和重做信息。
如果其他表空间要采用字典管理方式,则要求SYSTEM表空间也必须要采用字典管理方式,并且必须在CREATE TABLESPACE语句中显式地使用EXTENT MANAGEMENT DICTIONARY子句进行申明。

本地管理方式(local managed tablespace LMT)下,表空间中区分配与区回收的管理信息都被存储在表空间的数据文件中,而与数据字典无关。表空间会在每个数据文件中维护一个“位图(bitmap)”结构,用于记录表空间中所有区的分配情况。对区的分配、回收时,ORACLE将对数据文件中的“位图”进行更新。而这种更新不是对表的操作,所以不会产生回退信息和重做信息。DBMS_SPACE_ADMIN包对本地管理的表空间提供维护过程。

本地管理方式中有两个选项来指定表空间的区的分配方法:
UNIFORM统一分配,指定表空间中所有区的大小都相同。区的大小默认值是1M,也可以指定其大小。但不能在撤销表空间中使用这个选项。
AUTOALLOCATE或SYSTEM自动分配,指定由ORACLE系统来自动管理区的大小,这是默认是设置。区的大小随表的大小自动动态改变。

本地管理方式的表空间中,除了UNIFORM、AUTOALLOCATE来指定区的分配方式之外,还可以指定使用段空间的管理方式。段空间管理方式主要是指ORACLE用来管理端中已用数据块和空闲数据块的机制。
可用两个关键字来指定表空间的段空间管理方式:
MANUAL手动方式,这时ORACLE将使用空闲列表(free list)来管理段的空闲数据块。
AUTO自动方式,这时ORACLE将使用位图来管理段的已用数据块和空闲数据块。即,通过位图中单元的取值来判断段中的数据块是否可用。
         
SYSTEM表空间的区管理方式决定了创建什么区管理方式的表空间。
SYSTEM表空间不能被设置为只读状态或脱机状态。      
             
 表大小和区大小的对应关系为:
    表大小           区大小
               
      64KB(或前个区)         64KB
      1MB(接下来的个区)        1MB
      64MB(接下来的个区)        8MB
      1000MB(以后的区)        64MB   

  
   表空间的几种状态:
             读写状态(Read Write)、只读状态(Read Only);
             联机状态(Online)、脱机状态(Offline);
           
脱机模式的种情况:
  正常(Normal):是ORACLE默认的脱机模式。必须保证所有数据文件都是联机的、可用的。ORACLE会执行一次检查点,以便将SGA区中与该表空间相关的脏缓存块都写入数据文件中。然后再关闭表空间中的所有数据文件。下一次将表空间恢复为联机状态无需进行数据库恢复。
 临时(Temporary):不必保证该表空间的所有数据文件为联机的、可用的,ORACLE会执行一次检查点。下次将表空间恢复为联机可能需要数据库恢复。
 立即(Immediate):不必保证该表空间的所有数据文件为联机的、可用的,ORACLE也不会执行一次检查点。而是直接将该表空间中的所有数据文件都设置为脱机状态。下次将表空间设置为联机必须进行数据库恢复。
 用于恢复(For Recover):如果要对表空间进行基于时间的恢复,可以使用该种脱机模式将表空间切换到脱机状态。然后DBA就可以使用备份的数据文件覆盖原有的数据文件,而后再在这些数据文件上,利用归档重做日志,就可以将表空间恢复为某个时间点的状态。
            
表空间的管理准则
  如果表空间是本地管理方式,则在创建表空间时不能指定区分配的默认存储参数;只能将它设置为自动(AUTOALLOCATE)或统一(UNIFORM)方式;并且在表空间创建之后不能再更改。
  如果表空间是字典管理方式,则不仅要在创建时设置默认存储参数,而且在创建之后还可以通过修改存储参数对表空间的存储管理方式进行更改。
            
确定表空间的大小
表空间是用来存储表、索引中的数据的。表空间的大小取决于表的大小和索引数据量的大小。
            
确定一个表的大小的主要因素:
  1、每行大约有多少个字节;
  2、该表最初或至少包含多少行;
  3、每个时间段(每天、每周、每月、每季度、每年等)该表中的行的增长情况;
  4、在该表上进行的操作类型(插入、删除、更新);
  5、哪种操作类型比较多;
     
  表的大小 = 最大行长 * 行数 * (1+PCTFREE/100) *预留的百分比;
      
  最大行长 : 表中一条记录的长度即所有字段长度之和;
  PCTFREE: 即空闲百分比。是用于设置块中现有行的可能的update 而需要保留的百分比。另一个与块管理相关的参数是PCTUSED(已用百分比).当一个块被insert数据时,要留下PCTFREE指定的百分比空间以便进行更新数据时使用,如果剩余的空间小雨PCTFREE指定的百分比,该块就要被从空闲列表中取出来,在空闲空间中没有因 delete 数据而降低到PCTUSED指定的百分比空间之前,不考虑在该块中插入新的数据。如果该块中的数据少于PCTUSED指定的百分比时,该块就被认为空闲得足够供插入操作使用,并被放到空闲列表中。
根据插入、更新操作比较多,删除较少的情况 。设置PCTFREE =50 , PCTUSED =30.
          
  预留的百分比:例如 表行月增长%,按年计算 则预留百分比 = (1 + 1%)的次幂。
      
 撤销表空间大小 = (UNDO_RETENTION参数的值(默认秒) * 每秒需要的撤销块 * DB_BLOCK_SIZE) +DB_BLOCK_SIZE
 说明:UNDO_RETENTION参数表示将在UNDO表空间中保留多长时间的撤销信息。
表空间类型:
 CREATE (PERMANENT) TABLESPACE
 创建永久表空间
 CREATE BIGFILE      TABLESPACE
 创建大文件表空间
 CREATE SMALLFILE    TABLESPACE
 创建小文件表空间
 CREATE TEMPORARY  TABLESPACE
 创建临时表空间
 CREATE UNDO       TABLESPACE
 创建撤销表空间 
          
创建表空间
        创建表空间ORACLE会完成以下工作:
1、 在数据字典和控制文件中记录该新创建的表空间;
2、 在操作系统中按指定的位置和文件名创建指定大小的操作系统文件,作为该表空间对应的数据文件;
3、 在预警文件中记录创建表空间的信息。
语法:
CREATE [SMALLFILE | BIGFILE ] [PERMANENT | TEMPORARY | UNDO]
    TABLESPACE    DATAFILE | TEMPORARY datafile_clause [,datafile_clause] [EXTENT MANAGEMENT LOCAL]
[AUTOALLOCATE | UNIFORM SIZE integer [K | M]]------区分配方式
[SEGMENT SPACE MANAGEMENT AUTO | MANUAL]   ----段空间分配方式
[BLOCKSIZE integer [K | M]]   ----只适用永久表空间(PERMANENT)
[MININUM EXTENT integer [K | M]]
[LOGGING | NOLOGGING]
[ONLINE | OFFLINE [NORMAL | TEMPORARY | IMMEDIATE]];

datafile_clause 的语法为:
‘path_filename_suffix’ SIZE integer [K | M]
[REUSE]  [AUTOEXTEND OFF | ON]
[NEXT integer [K | M]]
[MAXSIZE UNLIMITED | integer [K | M]]

特别注意:
如果在数文件子句中指定了数据文件的扩展方式就不能再指定表空间的区分配方式了;
如果创建的是大表空间可以指定区分配方式,但是不能指定段管理方式为MANUAL方式;
如果创建的是临时表空间,区分配方式不能指定为AUTOALLOCATE方式;
创建的是临时表空间,段的管理方式不能指定为AUTO方式;
撤销表空间只能是本地管理方式;不能指定统一区大小的选项(不能指定UNIFORM SIZE)

要为不同的表空间指定不同的块大小,首先要修改初始化参数文件中的数据高速缓冲区参数(db_2k_cache_size,db_4k_cache_size…..db_32k_cache_size):
步骤如下:
1、 CREATE PFILE=’d:\OracleDatabase\initwenzhongid.ora’ FROM SPFILE;
2、 打开该导出的文件,并在其中增加一条 *.db_16k_cache_size=16384;
3、 然后 
CREATE SPFILE=’d:\OracleDatabase\App\SPFILEWENZHONGID.ORA’ FROM PFILE;
4、 关闭数据库 SHUTDOWN IMMEDIATE 将新的服务器初始化参数问价复制到默认位置 即 HOST COPY d:\OracleDatabase\App\SPFILEWENZHONGID.ORA d:\OracleDatabase\App\WENZHONG\SPFILEWENZHONGID.ORA
5、 重新启动数据库。
6、 重新创建BLOCKSIZE值为16K的表空间
CREATE TABLESPACE test DATAFILE ‘e:\oracletest.dbf’ SIZE 5M
BLOCKSIZE 16K SEGMENT SPACE MANAGEMENT AUTO;

撤销表空间
     要想使用UNDO表空间的管理功能,则必须在初始化参数文件中设置如下参数:
 *.undo_management=’AUTO’
*.undo_tablespace=’UNDOTABSn’;
如果不指定 AUTO 则系统将使用回退表空间(ROLLBACK);
UNDO表空间之间的切换方式为;
 ALTER SYSTEM SET undo_tablespace=’new_undotablespace’ SCOPE=SPFILE;

修改或扩展表空间
1、 添加数据文件;
2、 改变数据文件的大小;(RESIZE )
3、 允许数据文件自动扩展性;

修改表空间的可用性
 语法为:
ALTER TABLESPACE tablespace_name [ONLINE |OFFLINE {NORMAL | TEMPORARY |IMMEDIATE | FOR RECOVER}] [READ ONLY | WRITE]
如果 表空间脱机时使用了 IMMEDIATE ,则其前提是启用了介质恢复,即在ARCHIVELOG模式下才能执行立即脱机,否则是不允许立即脱机的。
临时表空间、系统表空间SYSTEM 、SYSAUX、UNDOTBS1 表空间是不允许脱机和只读的,永久表空间和UNDO表空间可以脱机
表空间的只读、读写状态在脱机或联机后一直保持。在脱机状态下不能修改表空间的只读、读写状态。在只读状态下,允许执行DROP操作删除该表空间上的对象。

修改表空间的备份模式
  如果执行的是非RMAN(non RECOVERY MANAGER)联机备份,即在ARCHIVELOG模式下的热备份,则需要修改表空间的备份模式。目的是类是与给需要备份的表空间加锁,防止在备份的过程中用户对表空间进行操作。
   即先执行 ALTER TABLESPACE tablespac_name BEGIN BACKUP
 手动备份完成后 执行
            ALTER TABLESPACE tablespace_name END BACKUP

修改表空间名称
     ALTER TABLESPACE tablespace_name RENAME newtablespace_name;
当表空间或表空间中的数据文件处于OFFLINE状态时,不能修改表空间的名称。

设置默认表空间和临时表空间
 ALTER DATABASE DEFAULT TABLESPACE tablespace_name;
 ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tempspace_name;
删除表空间
 被删除的表空间是不能被恢复的。
 删除空的表空间 DROP TABLESPACE tablespace_name;
 删除不为空的表空间 DROP TABLESPACE tablespace_name INCLUDING CONTENTS;
删除非空表空间及其相关的数据文件
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
注:先将表空间脱机,否则不会删除数据文件,手动删除时也会报错.

与表空间相关的数据字典视图和动态性能视图

来自控制文件的所有表空间名称和编号
V$TABLESPACE
 
所有表空间的信息(有权限看到的表空间)
DBA_TABLESPACE

用户表空间信息
USER_TABLESPACE

所有表空间组的信息
DBA_TABLESPACE_GROUPS

所有(可以访问的)表空间中的段的信息
DBA_SEGMENTS
USER_SEGMENTS

所有(可以访问的)表空间中的数据盘区的信息
DBA_EXTENTS
USER_EXTENTS

所有(可以方位的)表空间中的空闲盘区的信息
DBA_FREE_SPACE
USER_FREE_SPACE

所有数据文件的信息,包括所属表空间的名称和编号
V$DATAFILE

所有临时文件的信息,包含锁属表空间的表空间名称和编号
V$TEMPFILE

数据文件及其所属的表空间的信息
DBA_DATA_FILES

临时文件及其所属的临时表空间的信息
DBA_TEMP_FILES

本地管理的临时表空间中所有盘区的信息
V$TEMP_EXTENT_MAP

本地管理的临时表空间的缓存信息,使用的临时表空间的状态信息
V$TEMP_EXTENT_POOL

每个临时文件的已用/空闲空间信息
V$TEMP_SPACE_HEADER

所有用户的默认的和临时的表空间信息
DBA_USERS

所有用户的表空间配置信息
DBA_TS_QUOTAS

例程的每个排序段的信息。该视图只在表空间是TEMPORARY类型是更新
V$SORT_SEGMENT

用户使用的临时排序段的信息
V$SORT_USER

查询表空间基本信息
DESC DBA_TABLESPACES;

查询表空间中的数据文件信息
DESC DBA_DATA_FILES;

统计每个表空间的空闲空间信息
DESC DBA_FREE_SPACE;
SELECT MAX_BLOCKS, MIN_BLOCKS,AVG_BLOCKS,SUM_BLOCKS FROM DBA_FREE_SPACE  WHERE TABLESPACE_NAME='user_tablespacename';
查询临时表空间的临时文件信息
DESC DBA_TEMP_FILES

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值