Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选

首页 / 数据库 / MySQL / Oracle 表空间——简单管理永久表空间

本文内容

  • 创建表空间
  • 查看表空间
  • 修改表空间可用性/可读写性
  • 删除表空间
假设数据库为 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:oracledatamytbs01_1.dbf,大小为 2M。create tablespace mytbs01<!--CRLF-->datafile "D:oracledatamytbs01_1.dbf" size 2M<!--CRLF-->autoallocate;<!--CRLF-->示例 2:使用 UNIFORM 区分配方式创建表空间 mytbs02,数据文件是 D:oracledatamytbs02_1.dbf 和 D:oracledatamytbs02_2.dbf,有两个文件,大小分别为 1M 和 2M。create tablespace mytbs02<!--CRLF-->datafile "D:oracledatamytbs02_1.dbf" size 1M,<!--CRLF--> "D:oracledatamytbs02_2.dbf" size 2M<!--CRLF-->uniform size 128k;<!--CRLF-->示例 3:创建表空间 mytbs03,并指定数据文件扩展方式为自动增长,每次 1M,最大扩展到 11M。create tablespace mytbs03<!--CRLF-->datafile "D:oracledatamytbs03_1.dbf" size 1M<!--CRLF-->autoextend on next 2M maxsize 11M;<!--CRLF-->此时,就不能再指定 UNIFORM。示例 4:使用 AUTO 段管理方式。创建表空间 mytbs04,采用 UNIFORM 区分配管理方式,大小为默认值;用 segment space management 指定段管理方式。create tablespace mytbs04<!--CRLF-->datafile "D:oracledatamytbs04_1.dbf" size 3M reuse<!--CRLF-->uniform<!--CRLF-->segment space management auto;<!--CRLF--> 

    查看表空间


    可以通过下面 Oracle 系统表查看上面创建的表空间的相关信息。
    • dba_tablespaces - 数据库表空间管理信息。
    • dba_data_files - 数据库表空间文件管理信息。
    • dba_free_space - 数据库表空间文件使用信息。
    示例 5:表空间使用情况,包括表空间名称、DBF 文件个数、总大小、剩余/占用大小等等。select a.tablespace_name as "表空间名称",<!--CRLF--> c.pieces as "DBF文件个数",<!--CRLF--> a.totalspace || "M" as "总大小",<!--CRLF--> b.freespace || "M" as "剩余大小",<!--CRLF--> a.totalspace - nvl(b.freespace, 0) || "M" as "占用大小",<!--CRLF--> c.max_blocks as "最大块",<!--CRLF--> c.min_blocks as "最小块",<!--CRLF--> c.avg_blocks as "平均块",<!--CRLF--> c.sum_blocks as "块总数"<!--CRLF-->from (select t1.tablespace_name, sum(t1.bytes) / 1024 / 1024 as totalspace<!--CRLF-->from dba_data_files t1<!--CRLF--> group by t1.tablespace_name) a,<!--CRLF--> (select t2.tablespace_name, sum(t2.bytes) / 1024 / 1024 as freespace<!--CRLF-->from dba_free_space t2<!--CRLF--> group by t2.tablespace_name) b,<!--CRLF--> (select t.tablespace_name,<!--CRLF--> count(*) as pieces,<!--CRLF--> max(t.blocks) as max_blocks,<!--CRLF--> min(t.blocks) as min_blocks,<!--CRLF--> avg(t.blocks) as avg_blocks,<!--CRLF--> sum(t.blocks) as sum_blocks<!--CRLF-->from dba_free_space t<!--CRLF--> group by t.tablespace_name) c<!--CRLF--> where a.tablespace_name = b.tablespace_name<!--CRLF--> and b.tablespace_name = c.tablespace_name<!--CRLF--> 示例 6:表空间信息参看,包括表空间名称、路径、类型、管理方式、区管理方式、段管理方式和是否自动增长。select t1.tablespace_nameas "表空间名称",<!--CRLF--> t2.file_nameas "文件名",<!--CRLF--> t1.contents as "类型",<!--CRLF--> t1.extent_managementas "管理方式",<!--CRLF--> t1.allocation_typeas "区管理方式",<!--CRLF--> t1.segment_space_management as "段管理方式",<!--CRLF--> t2.autoextensible as "是否自动扩展",<!--CRLF--> t1.status as "是否联机"<!--CRLF-->from dba_tablespaces t1, dba_data_files t2<!--CRLF--> where t1.tablespace_name = t2.tablespace_name<!--CRLF--> 
    • 1
    • 2
    • 下一页
    GoldenGate for Oracle的系统需求Linux下MySQL链接被防火墙阻止相关资讯      Oracle表空间 
    • 关于Oracle可传输表空间的总结  (今 20:12)
    • Aix下删除Oracle表空间以及对应的  (04月17日)
    • Oracle表空间过大时候的处理  (10/27/2015 20:42:50)
    • Oracle删除表空间遇到的问题及解决  (04月17日)
    • Oracle使用SQL传输表空间  (03月01日)
    • Oracle 设置表空间自增长  (10/09/2015 11:42:07)
    本文评论 查看全部评论 (0)
    表情: 姓名: 字数