Oracle 11g Release 1 (11.1) 表空间——创建和扩展永久表空间

本文内容

  • 创建永久表空间
  • 查看表空间
  • 扩展表空间
  • 参考资料

 

创建永久表空间


Oracle 按照区和段空间进行管理表空间。

区管理方式 - 针对区的分配方式的不同,有两种方式:字典管理方式(dictionary-managed tablespace,DMT)和本地管理方式(local-managed tablespace,LMT)。Oracle 10g 开始强烈建议使用 LMT 方式。从 Oracle 9i 开始,创建表空间时默认使用 LMT。

其中,LMT 区的分配方式:

  • 统一(UNIFORM)- 统一分配。指定表空间中所有区的大小都相同。默认值是 1MB。
  • 自动(AUTOALLOCATESYSTEM)- 自动分配。指定有 Oracle 系统来自动管理区的大小。这是默认设置。

段管理方式 – LMT 方式,除了可以指定区的分配方式外,还可以指定段的管理方式。段空间管理方式主要是指 Oracle 用来管理段中已用数据块和空闲数据块的机制。分为两种:

  • 手动(MANUAL)- Oracle 将使用空闲列表(free list)管理段的已用数据块和空闲数据块。这是传统的段空间管理方式,为了与以前的版本兼容。
  • 自动(AUTO)- Oracle 将使用位图(bitmap)来管理段的已用数据块和空闲数据块。通过位图中单元的取值判断段中的数据块是否可用。

字典管理方式没有段管理。

下面示例演示用本地管理方式创建表空间。这是 Oracle 推荐的方式。

示例 1:使用 AUTOALLOCATE 区分配方式。创建表空间 mytbs01,数据文件是 D:\oracledata\mytbs01_1.dbf,大小为 2M,并指定区分配方式为 AUTOALLOCATE

create tablespace mytbs01
datafile 'D:\oracledata\mytbs01_1.dbf' size 2M
autoallocate;

示例 2:使用 UNIFORM 区分配方式。创建表空间 mytbs02,数据文件是 D:\oracledata\mytbs02_1.dbf 和 D:\oracledata\mytbs02_2.dbf,有两个文件,大小分别为 1M 和 2M,并指定区分配方式为 UNIFORM

create tablespace mytbs02
datafile 'D:\oracledata\mytbs02_1.dbf' size 1M,
         'D:\oracledata\mytbs02_2.dbf' size 2M
uniform size 128k;

示例 3:使用数据文件扩展方式。创建表空间 mytbs03,并指定数据文件扩展方式为自动增长,每次 1M,最大扩展到 11M。

create tablespace mytbs03
datafile 'D:\oracledata\mytbs03_1.dbf' size 1M
autoextend on next 2M maxsize 11M;

此时,就不能再指定 UNIFORM

示例 4:使用 AUTO 段管理方式。创建表空间 mytbs04,区分配管理方式为 UNIFORM ,大小为默认值;用 segment space management 指定段管理方式。

create tablespace mytbs04
datafile 'D:\oracledata\mytbs04_1.dbf' size 3M reuse
uniform
segment space management auto;

 

查看表空间


可以通过下面 Oracle 系统表查看上面创建的表空间的相关信息。

  • dba_tablespaces - 数据库表空间管理信息。
  • dba_data_files - 数据库表空间文件管理信息。
  • dba_free_space - 数据库表空间文件使用信息。

示例 5:表空间使用情况,包括表空间名称、DBF 文件个数、总大小、剩余/占用大小等等。

select a.tablespace_name as "表空间名称",
       c.pieces as "DBF文件个数",
       a.totalspace || 'M' as "总大小",
       b.freespace || 'M' as "剩余大小",
       a.totalspace - nvl(b.freespace, 0) || 'M' as "占用大小",
       c.max_blocks as "最大块",
       c.min_blocks as "最小块",
       c.avg_blocks as "平均块",
       c.sum_blocks as "块总数"
  from (select t1.tablespace_name, sum(t1.bytes) / 1024 / 1024 as totalspace
          from dba_data_files t1
         group by t1.tablespace_name) a,
       (select t2.tablespace_name, sum(t2.bytes) / 1024 / 1024 as freespace
          from dba_free_space t2
         group by t2.tablespace_name) b,
       (select t.tablespace_name,
               count(*) as pieces,
               max(t.blocks) as max_blocks,
               min(t.blocks) as min_blocks,
               avg(t.blocks) as avg_blocks,
               sum(t.blocks) as sum_blocks
          from dba_free_space t
         group by t.tablespace_name) c
 where a.tablespace_name = b.tablespace_name
   and b.tablespace_name = c.tablespace_name;

示例 6:表空间信息参看,包括表空间名称、路径、类型、管理方式、区管理方式、段管理方式和是否自动增长。

select t1.tablespace_name          as "表空间名称",
       t2.file_name                as "文件名",
       t1.contents                 as "类型",
       t1.extent_management        as "管理方式",
       t1.allocation_type          as "区管理方式",
       t1.segment_space_management as "段管理方式",
       t2.autoextensible           as "是否自动扩展",
       t1.status                   as "是否联机"
  from dba_tablespaces t1, dba_data_files t2
 where t1.tablespace_name = t2.tablespace_name;

 

扩展表空间


表空间在物理上是由保存在磁盘上的数据文件组成的,例如,示例 1 创建的表空间 mybtb01,最大为 2MB。假设里面有个表,当数据占满了 2MB 空间之后,如果继续向表插入数据,Oralce 就会因为在 mytbs01 表空间上已经没有足够的空闲空间,而显示错误信息。

创建数据文件时会指定大小。为了提供更大的表空间,增加数据,必须扩展表空间。

通常扩展表空间有三种方式:

  • 添加数据文件
  • 改变数据文件大小
  • 允许数据文件自动扩展

示例 7:添加数据文件。为示例 1 的表空间 mytbs01 添加新的数据文件 D:\ORACLEDATA\MYTBS01_2.DBF。

SQL> column tablespace_name format a15
SQL> column file_name format a28
SQL> column total format a5
SQL> select t.tablespace_name,
  2         t.file_name,
  3         t.bytes / 1024 / 1024 || 'M' as total
  4    from dba_data_files t
  5   where t.tablespace_name = 'MYTBS01';
 
TABLESPACE_NAM FILE_NAME                    TOTAL
-------------- ---------------------------- -----
MYTBS01        D:\ORACLEDATA\MYTBS01_1.DBF  2M     
 
SQL> alter tablespace mytbs01
  2  add datafile 'd:\oracledata\mytbs01_2.dbf' size 3M;
 
数据库已更改。
 
SQL> select t.tablespace_name,
  2         t.file_name,
  3         t.bytes / 1024 / 1024 || 'M' as total
  4    from dba_data_files t
  5   where t.tablespace_name = 'MYTBS01';
 
TABLESPACE_NAM FILE_NAME                    TOTAL
-------------- ---------------------------- -----
MYTBS01        D:\ORACLEDATA\MYTBS01_1.DBF  2M  
MYTBS01        D:\ORACLEDATA\MYTBS01_2.DBF  3M 

扩展前先查看表空间 mytbs01 数据文件情况。再为表空间 mytbs01 添加新的数据文件。

示例 8:改变数据文件大小。在示例 7 基础上,扩展表空间 mytbs01 数据文件 D:\ORACLEDATA\MYTBS01_2.DBF 的大小。

SQL> column tablespace_name format a15
SQL> column file_name format a28
SQL> column total format a5
SQL> select t.tablespace_name,
  2         t.file_name,
  3         t.bytes / 1024 / 1024 || 'M' as TOTAL
  4    from dba_data_files t
  5   where t.tablespace_name = 'MYTBS01';
 
TABLESPACE_NAM FILE_NAME                    TOTAL
-------------- ---------------------------- -----
MYTBS01        D:\ORACLEDATA\MYTBS01_1.DBF  2M   
MYTBS01        D:\ORACLEDATA\MYTBS01_2.DBF  3M   
 
SQL> alter database
  2  datafile 'd:\oracledata\mytbs01_2.dbf'
  3  resize 4M;
 
数据库已更改。
 
SQL> select t.tablespace_name,
  2         t.file_name,
  3         t.bytes / 1024 / 1024 || 'M' as TOTAL
  4    from dba_data_files t
  5   where t.tablespace_name = 'MYTBS01';
 
TABLESPACE_NAM FILE_NAME                    TOTAL
-------------- ---------------------------- -----
MYTBS01        D:\ORACLEDATA\MYTBS01_1.DBF  2M   
MYTBS01        D:\ORACLEDATA\MYTBS01_2.DBF  4M 

示例 9:允许数据文件自动扩展。在示例 8 基础上,修改表空间 mytbs01 数据文件 D:\ORACLEDATA\MYTBS01_2.DBF 为自动扩展。

SQL> column tablespace_name format a15
SQL> column file_name format a28
SQL> column autoextensible format a15
SQL> column total format a5
SQL> column maxsize format a7
SQL> select t.tablespace_name,
  2         t.file_name,
  3         t.bytes / 1024 / 1024 || 'M' as TOTAL,
  4         t.autoextensible,
  5         t.maxbytes / 1024 / 1024 || 'M' as MAXSIZE
  6    from dba_data_files t
  7   where t.tablespace_name = 'MYTBS01';
 
TABLESPACE_NAM FILE_NAME                    TOTAL AUTOEXTENSIBLE  MAXSIZE
-------------- ---------------------------- ----- --------------- -------
MYTBS01        D:\ORACLEDATA\MYTBS01_1.DBF  2M    NO              0M
MYTBS01        D:\ORACLEDATA\MYTBS01_2.DBF  4M    NO              0M
 
SQL> alter database
  2  datafile 'd:\oracledata\mytbs01_2.dbf'
  3  autoextend on next 1M maxsize 20M;
 
数据库已更改。
 
SQL> select t.tablespace_name,
  2         t.file_name,
  3         t.bytes / 1024 / 1024 || 'M' as TOTAL,
  4         t.autoextensible,
  5         t.maxbytes / 1024 / 1024 || 'M' as MAXSIZE
  6    from dba_data_files t
  7   where t.tablespace_name = 'MYTBS01';
 
TABLESPACE_NAM FILE_NAME                    TOTAL AUTOEXTENSIBLE  MAXSIZE
-------------- ---------------------------- ----- --------------- -------
MYTBS01        D:\ORACLEDATA\MYTBS01_1.DBF  2M    NO              0M
MYTBS01        D:\ORACLEDATA\MYTBS01_2.DBF  4M    YES             20M

 

参考资料


转载于:https://www.cnblogs.com/liuning8023/archive/2012/07/15/2592430.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值