zoukankan      html  css  js  c++  java
  • Oracle 11g Release 1 (11.1) 表空间——简单管理永久表空间

    本文内容

    • 创建表空间
    • 查看表空间
    • 修改表空间可用性/可读写性
    • 删除表空间
    • Toad 创建表空间
    • 参考资料
    • 修改记录

    假设数据库为 Oracle 11g,在 SQL *PLUS 下,用 SYS 用户登录。本文演示创建(永久)表空间,之后,查看表空间信息,再修改表空间的配置,最后,删除表空间。

    创建表空间


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

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

    其中,LMT 区的分配方式:

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

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

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

      字典管理方式不存在段管理。

      下面示例演示用本地管理方式创建表空间。

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

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

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

      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;

      一个较完整的创建表空间的语句如下所示:

      CREATE TABLESPACE mytbs DATAFILE 
        'mytbs01' SIZE 10M AUTOEXTEND ON NEXT 5120M MAXSIZE UNLIMITED
      LOGGING
      EXTENT MANAGEMENT LOCAL AUTOALLOCATE
      BLOCKSIZE 8K
      SEGMENT SPACE MANAGEMENT AUTO
      FLASHBACK ON;

      查看表空间


      可以通过下面 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

      1

      示例 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

      2

      修改表空间可用性/可读写性


      示例 7:修改表空间可用性——联机/脱机。

      SQL> alter tablespace mytbs01 offline;
       
      表空间已更改。
       
      SQL> alter tablespace mytbs01 online;
       
      表空间已更改。
       
      SQL>

      表空间是否联机,表明了表空间是否可用。

      让表空间脱机,是为了提高数据文件的 I/O 性能,可能需要移动特定表空间的数据文件。为了确保表空间中数据文件的一致性,在移动数据文件之前,需要将该表空间修改为脱机状态,以防止其中的数据文件被修改。

      完成对表空间的维护操作后,应该立即将表空间转变为 ONLINE 状态,以便该表空间可以被访问。

      示例 8:修改表空间可读写性——只读/读写。

      SQL> alter tablespace mytbs01 read only;
       
      表空间已更改。
       
      SQL> alter tablespace mytbs01 read write;
       
      表空间已更改。
       
      SQL>

      如果表空间只用于存放静态数据,或是要将表空间移动到其他数据库,就应该先将表空间修改为只读状态。

      删除表空间


      示例 9:删除表空间,并删除所有相关的操作系统的数据文件。

      SQL> CREATE TABLESPACE mytbs05
        2  DATAFILE 'd:\oracledata\mytbs05_1.dbf' size 1M REUSE
        3  AUTOALLOCATE;
       
      表空间已创建。
       
      SQL> ALTER TABLESPACE mytbs05 offline;
       
      表空间已更改。
       
      SQL> DROP TABLESPACE mytbs05 INCLUDING CONTENTS AND DATAFILES;
       
      表空间已删除。
       
      SQL>

      若表空间非空,则必须加 INCLUDING 子句。INCLUDING CONTENTS AND DATAFILES 表明删除表空间的内容和数据文件。也可以是 INCLUDING CONTENTS AND DATAFILES cascade constraints 表明除了删除表空间的内容和数据文件外,还要删除其约束。

      Toad 创建表空间


      以上是关于表空间最简单的操作。当使用 Toad 创建表空间时,会直观地看到表空间基本信息和数据文件的相关选项。如图所示。

      2012-08-25_170006

      图 1 Toad 表空间基本信息相关选项

      2012-08-25_170203

      图 2 Toad 表空间数据文件相关选项

      参考资料


      修改记录


      • 第一次 2012-08-24 [ADD][UPDATE]
    • 相关阅读:
      找到一种给vs2012对话框插入背景图片不会失真的方法
      第一次用C语言把数据写入文件中
      Java学习路线图
      一:MyBatis Generator 【SpringMvc+Spring+MyBatis+Maven整合学习笔记】
      windows系统安装Redis
      js子级窗口相互调用父级的方法
      MSSQL 发布订阅,实现读写分离
      查看MS SQL最耗时间资源的SQL
      数据库优化
      mybatis与hibernate区别
    • 原文地址:https://www.cnblogs.com/liuning8023/p/2591644.html
    Copyright © 2011-2022 走看看