• 17->管理表空间


    一表空间概念

         表空间可以指定多个数据文件(datafile) 数据文件中可以存储段(segment)(表段,索引段,回滚段) 段是由多个连续的区间(extent)组成 

    区间由多个块(block)组成  

      图示如下:

       

    二 表空间的管理方式

    由于发出sql语句对数据的修改 都会涉及到表空间中空间的分配和释放 数据库需要动态的知道某个时间某个区间是空闲(free)哪个区间存在数据被占用 需要

    特定的位置来存在区间的信息  oracle中提供了两种管理区间的方式

           字典管理表空间(DMT)和本地管理表空间(LMT)

         oracle8i之前使用字典管理方式来管理空间的释放和数据的存储   当有数据存储时 先查询字典表 看哪段区间是空闲的 就插入数据  在将字典中该区段修改为经被

      占用 每次数据的修改都会对字典表进行大量的修改  多线程环境下 涉及到字典表的资源竞争 所有的表空间都使用相同的字典表 效率极低

        oracle8i之后提出了本地管理表空间的方式  在表空间的数据文件头部定义bitmap的方式 来确定哪个区段是空闲或者占用 每个表空间只需要管理自己的bitmap信息

       该方式为oracle8i后默认的管理方式  如果在创建数据库(create database)时system表空间的创建 使用本地管理表空间 之后创建的表空间默认都是本地管理表空间 

     比如 create tablespace mytb datafile 'c:/app/data/mytb .dbf' EXTENT MANAGEMENT  LOCAL AUTOALLOCATE (区间的大小按数据库的默认值设置)

             create tablespace mytb datafile 'c:/app/data/mytb .dbf' EXTENT MANAGEMENT  LOCAL UNIFORM SIZE 4M (手工设置每个区间大小)


    三 表空间分类

     oracle表空间分为:永久表空间, 临时表空间, undo表空间


     

    1》 永久表空间

     永久表空闲分为系统表空间(system表空间)和用户表空间(用户创建的表空间)

    2》临时表空间

    一个数据库默认有一个临时表空间 如果创建表默认不指定使用默认的临时表空间  可以通过 database_properties(查看数据库的配置)查看默认的表空间

    SQL> select * from database_properties;


    PROPERTY_NAME        PROPERTY_VALUE       DESCRIPTION
    -------------------- -------------------- --------------------
    DICT.BASE            2                    dictionary base tabl
                                              es version #


    DEFAULT_TEMP_TABLESP TEMP                 Name of default temp
    ACE                                       orary tablespace

     默认的表空间为temp

    创建一个表空间替代它

    create temporary tablespace mytmp tempfile 'c:/mytemp.dbf' size 100m autoextend on  

    查看是否创建临时表空间mytmp

    SQL> select tablespace_name,contents from dba_tablespaces;


    TABLESPACE_NAME                CONTENTS
    ------------------------------ ---------
    SYSTEM                         PERMANENT
    SYSAUX                         PERMANENT
    UNDOTBS1                       UNDO
    TEMP                           TEMPORARY
    USERS                          PERMANENT
    EXAMPLE                        PERMANENT
    MYTB                           PERMANENT
    MYTMP                          TEMPORARY


    修改数据库的默认临时表空间

    alter database temporary tablespace mytmp  --修改后查看database_properties是否成功修改

    四 表空间的状态

    表空间的读写状态

    表空间创建后 默认为可写可读状态  可以将表空间设置为只读  只读的表空间可以用于查询数据 不能修改数据 可能删除表(表的数据记录在system表空间的字典表中)

    alter tablespace mytb read only|write

    表空间的离线和在线状态 默认为在线状态 离线状态的表空间 无法进行数据的操作

    alter tablespace mytb offline|online


    五 表空间拓展

     固定大小的表空间当数据量增长过快 即将要超过表空间设置的大小时 需要对表空间进行扩容

    查询表空间的总大小,剩余空间,占用占比

    select TABLESPACE_NAME,BYTES from dba_data_files;--查询表空间以及总大小
    select TABLESPACE_NAME,BYTES from dba_free_space;--查询表空间以及剩余的表空间
    select dat.TABLESPACE_NAME,dat.BYTES,free.freebyte,round((dat.BYTES-free.freebyte)/dat.BYTES*100,2)||'%' from dba_data_files dat left join (
         select d.TABLESPACE_NAME,sum(d.BYTES) as freebyte from dba_free_space d group by d.TABLESPACE_NAME
    ) free on dat.TABLESPACE_NAME=free.TABLESPACE_NAME --通过表空间名称进行关联  已使用表空间=总大小-剩余表空间大小

    拓展表空间

    表空间不够时可以修改表空间添加数据文件 可以指定大小的表空间也可以指定自动扩展大小的表空间

    SQL> alter tablespace mytbs add datafile 'c:/mytbs1.dmp' size 10M autoextend on
     next 10M maxsize 500M;  --next空间不足时 每次加10M maxsize 最大只能扩容到500M
    或者使用修改数据库的方式将已经存在的数据文件修改为自动扩充

    alter database datafile 'c:/mytbs.tmp' autoextend on;

    或者已经存在的文件 可以给他一个新的固定大小

    alter database datafile 'c:/mytbs.tmp' resize 100M;

    表空间移动

    首先需要将表空间离线 将数据文件拷贝到对应的目录后 使用命令

    alter tablespace mytbs offline

    alter tablespace mytbs rename datafile 'c:/mytbs.tmp' to 'c:/test/mytbs.tmp


    数据文件离线和移动 

    在数据库 mount状态下(移动系统表空间的数据文件)

    alter database  datafile 'c:/a.tmp' offline for drop;

    alter database rename file 'c:/a.tmp' to 'C:appjiaozioradataorcla.tmp';

    alter database datafile 'C:appjiaozioradataorcla.tmp' online;

    alter database open;


    表空间删除

    drop tablespace mytbs including contents and datafiles  --删除内容和数据文件



  • 相关阅读:
    Android推送通知指南
    proteus ISIS学习笔记
    总结ACM 中的基本输入输出
    WINDOWS远程默认端口3389的正确修改方式
    SQL还原数据库后孤立用户问题处理(SQL 数据库 拥有对象 无法删除)
    利用计划任务定时备份Express2005数据库
    使用 bcompiler 给PHP代码加密编译
    Discuz X2.5 编辑DIY数据出现:Unknown column 'pid' in 'where clause' 的解决办法
    批处理解决SqlServer自动备份与自动清理7天以前的备份
    PHP去除全角空格与空白字符
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331226.html
Copyright © 2020-2023  润新知