`

Oracle-表空间

 
阅读更多

一、表空间概念

       表空间是Oracle数据库中的逻辑结构。是组织数据和进行空间分配的逻辑结构,可以将表空间看成是数据库对象的容器。

       物理上,表空间由一个或者多个数据文件组成。

       一个数据库通常包括 SYSTEM       SYSAUX    TEMP三个默认表空间,一个或多个临时表空间,一个撤销表空间和几个应用程序使用的表空间。

 1、表空间的类型

    系统表空间:

    包括SYSTEM   SYSAUX表空间,是所有数据库必需的,且自动创建,一般存放oracle的数据字典表及相应数据。

    永久表空间:

    保存永久性数据,如系统数据、应用数据。

    每个用户都会被分配一个永久表空间来保存其相关数据。

    临时表空间:

    主要是在查询带有排序算法时使用,用完后立即释放,一般安装后只有一个TEMP表空间。

    大文件表空间和小文件表空间:

     大文件表空间(bigfile tablespace)是为超大型数据库设计的,当数据库有上千个数据文件时,更新数据文件头部信息的操作可能会话费很长时间,使用大文件表空间可以减少数据文件的数量,从而减少更新时间。

     小文件表空间是默认的创建表空间的类型,最多可以放置1022个数据文件,一个数据库最多可以放置64k个数据文件。

 2、表空间管理

1、创建表空间
create tablespace ts1               --指定表空间名称
  datafile 'c:/tablespace/ts1.dbf'  --数据文件
  size 100M                         --初始大小
  autoextend on                     --自动增长
  next 10M                          --每次自动增长大小
  maxsize 2048M                     --数据文件最大容量
  extent management local           --表空间采用本地表空间管理

 

 2、表空间数据文件

 

--增加数据文件
alter tablespace ts1
  add datafile 'c:/tablespace/ts2.dbf'
  size 100M
  autoextend on
  next 10M
  maxsize 2048M
--删除数据文件
alter tablespace ts1
  drop datafile 'c:/tablespace/ts2.dbf'
--移动数据文件
  
1.1:连接数据库  
     SQL> conn sysdba/manage as sysdba  
          已连接。  
1.2:把要移动数据文件的表空间脱机
     SQL> ALTER TABLESPACE TBS_EDS_DAT OFFLINE NORMAL ;
          表空间已更改。
1.3:移动物理数据文件。
1.4:重命名文件
     SQL> ALTER DATABASE  RENAME FILE 'C:\TABLESPACES\TS1.DBF' TO 'G:\TABLESPACES\TS1.DBF';
          数据库已更改。
1.5:表空间联机
     SQL> ALTER TABLESPACE TBS_DM_DAT ONLINE;
          表空间已更改。
1.6:如果要删除以前的数据文件,则必须先关闭数据库,手动删除文件,否则会报错。
     SQL> shutdow immediate
          数据库已经关闭。
            已经卸载数据库。
            ORACLE 例程已经关闭。
     SQL> startup
          ORACLE 例程已经启动。
            Total System Global Area 612368384 bytes
          Fixed Size 1250428 bytes
          Variable Size 104860548 bytes
          Database Buffers 499122176 bytes
          Redo Buffers 7135232 bytes
          数据库装载完毕。
            数据库已经打开。
3、 查看表空间和数据文件(转载)

 

--查看表空间--
SELECT * FROM DBA_TABLESPACES     --查看数据库中所有表空间的描述信息
SELECT * FROM USER_TABLESPACES    --查看当前用户的表空间的描叙信息
SELECT * FROM V$TABLESPACE        --从控制文件中获取的表空间名称和编号信息
--查看数据文件--
SELECT * FROM DBA_DATA_FILES      --查看据文件以及所属的表空间的描述信息
SELECT * FROM DBA_TEMP_FILES      --查看临时数据文件以及所属的表空间的描述信息
SELECT * FROM V$DATAFILE          --从控制文件中获取的数据文件的基本信息,包括它所属的表空间名称、编号等
SELECT * FROM V$TEMPFILE          --包含所有临时数据文件的基本信息

--查看数据库默认的TEMP表空间--
SELECT PROPERTY_NAME, PROPERTY_VALUE  FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE'

--查看数据库默认的永久表空间,如果不为用户指定永久表空间,则使用默认的表空间
SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES;

--查看默认的表空间类型--
SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TBS_TYPE'

--查看用户默认的表空间--
SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS

--查看表空间情况--
SELECT * FROM DBA_TABLESPACES

--查看表空间的数据文件--
SELECT * FROM DBA_DATA_FILES;   --永久表空间/UNDO表空间
SELECT * FROM V$TEMPFILE        --临时表空间

--查看表空间使用情况
SELECT A.TABLESPACE_NAME                AS TABLESPACE_NAME, 
   ROUND(A.BYTES/(1024*1024*1024),2)    AS "TOTAL(G)"     , 
   ROUND(B.BYTES/(1024*1024*1024),2)    AS "USED(G)"      , 
   ROUND(C.BYTES/(1024*1024*1024),2)    AS "FREE(G)"      , 
   ROUND((B.BYTES * 100) / A.BYTES,2)   AS "% USED"       , 
   ROUND((C.BYTES * 100) / A.BYTES,2)   AS "% FREE" 
   FROM SYS.SM$TS_AVAIL A, SYS.SM$TS_USED B, SYS.SM$TS_FREE C 
   WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME 
   AND A.TABLESPACE_NAME = C.TABLESPACE_NAME;

--计算表空间使用情况(考虑了数据文件自动增长情况)  
SELECT UPPER(F.TABLESPACE_NAME)      AS "表空间名称", 
            ROUND(D.AVAILB_BYTES ,2) AS "表空间大小(G)", 
            ROUND(D.MAX_BYTES,2)     AS "最终表空间大小(G)", 
            ROUND((D.AVAILB_BYTES - F.USED_BYTES),2) AS "已使用空间(G)", 
            TO_CHAR(ROUND((D.AVAILB_BYTES - F.USED_BYTES) / D.AVAILB_BYTES * 100, 2), '999.99') AS "使用比", 
            ROUND(F.USED_BYTES, 6)   AS "空闲空间(G)", 
            F.MAX_BYTES              AS "最大块(M)" 
     FROM (
           SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 6) USED_BYTES, ROUND(MAX(BYTES) / (1024 * 1024 * 1024), 6) MAX_BYTES 
           FROM SYS.DBA_FREE_SPACE 
           GROUP BY TABLESPACE_NAME) F, 
         (SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024 * 1024 * 1024), 6) AVAILB_BYTES,  ROUND(SUM(DECODE(DD.MAXBYTES, 0, DD.BYTES, DD.MAXBYTES))/(1024*1024*1024),6) MAX_BYTES 
          FROM SYS.DBA_DATA_FILES DD 
          GROUP BY DD.TABLESPACE_NAME) D 
          WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME 
   ORDER BY 4 DESC
4、删除表空间

 

--删除表空间
drop tablespace ts1                --删除
  including contents and datafiles  --指定同时删除数据文件
5、表空间状态
--查看表空间状态--
SELECT TABLESPACE_NAME,STATUS FROM DBA_TABLESPACES;
--脱机
alter tablespace ts1 offline;
--联机
alter tablespace ts1 online;
--只读
alter tablespace ts1 read only;
--读写
alter tablespace ts1 read write;

 

6、关于默认表空间

创建数据库用户时,如果没有指定默认的表空间,则使用数据库默认配置的表空间:

     Oralce 9i:          永久表空间  SYSTEM,临时表空间 TEMP

     Oracle 10/11g:永久表空间 USERS,  临时表空间  TEMP

ORACLE允许使用自定义的表空间作为默认永久性表空间:

      数据库级别:
              永久表空间
              SQL>ALTER DATABASE DEFAULT TABLESPACE USER;
              临时表空间
              SQL>ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;
      用户级别
              SQL>ALTER USER USERNAM DEFAULT TABLESPACE NEW_TABLESPACE_NAME
      查看用户对应的默认表空间
              SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS

 

 

 参考:http://www.cnblogs.com/kerrycode/p/3418694.html

补充:

1、表空间的管理方式主要有两种:
      字典管理  在数据字典中管理表空间的空间分配
      本地管理  在每个数据文件中使用位图来管理空间的分配,表空间中所有区的分配信息都保存在该表空间对应的数据文件的头部。
      oracle 8i
以前只有字典管理,之后引入本地管理
      本地管理的表空间的优点:
             速度快,存储空间的分配和回收只是简单地改变数据文件中的位图,而不像字典管理方式还需要修 改数据库。
             改善了存储管理的性能。某些在字典管理方式下的存储分配有时会产生递归操作,从而影响了系统的性能,使用本地管理方式不会产生递归操作。
             无碎片。
             更易于DBA维护。

2、设置脱机状态,可以使用下面4个参数来控制脱机方式

      NORMAL 该参数表示将表空间以正常方式切换到脱机状态,在进入脱机状态过程中,ORACLE会执行一次检查点, 将SGA区中与该表空间相关的脏缓存块写入数据文件中,然后再关闭表空间的所有数据文件。如果在这过程中没有发生任何错误,则可以使用NORMAL参数,这也是默认的方式。

      TEMPORARY 该参数将表空间以临时方式切换到脱机状态。这时ORACLE在执行检查点时并不会检查各个数据文件的状态,即使某些数据文件处于不可用状态,ORACLE也会忽略这些错误。这样将表空间设置为联机状态时,可能需要进行数据恢复。

       IMMEDIATE 该参数将表空间以立即方式切换到脱机状态,这时ORACLE不会执行检查点,也不会检查数据文件是否可用。而是直接将属于表空间的数据文件设置为脱机状态。下一次将表空间恢复为联机状态时必须进行数据库恢复。

       FOR RECOVER 该参数将表空间以用于恢复方式切换到脱机状态,如果要对表空间进行基于时间的恢复,可以使用这个参数将表空间切换到脱机状态。

 

 

分享到:
评论

相关推荐

    oracle-database-preinstall-19c-1.0-1.el9.x86-64.rpm

    oracle-database-preinstall-19c-1.0-1.el9.x86_64.rpm 预安装RPM: 访问Oracle Linux 9的软件源,如x86对应的是: ... 为了节省Linux的磁盘空间,直接在Linux中访问Windows下载的rpm

    oracle-database-server-12cR2-preinstall

    2. **系统调整**:预安装过程会检查并调整操作系统的参数,如内核参数、内存分配、磁盘空间和文件系统类型,以优化Oracle数据库的运行环境。 3. **用户和组设置**:创建并配置Oracle相关的用户和组,例如`oracle`...

    geoserver-2.13.2-oracle-plugin.zip

    GeoServer支持多种数据库系统,而Oracle是其中一种重要的关系型数据库,特别是在处理大量地理空间数据时,Oracle的高性能和稳定性使其成为首选。此插件允许GeoServer直接连接到Oracle数据库,读取和存储地理空间信息...

    Oracle--创建表空间+用户+授权

    根据提供的文件信息,本文将详细解释如何在Oracle数据库中创建表空间、用户及进行权限授权的相关知识点。 ### 创建表空间 #### 1. 创建临时表空间 临时表空间主要用于存储临时对象,例如排序操作时产生的临时数据...

    关于oracle-01033误删表空间文件解决方法

    关于oracle-01033误删表空间文件解决方法关于oracle-01033误删表空间文件解决方法

    学习oracle创建一个表空间创建临时表空间创建用户表空间资源的权限

    在Oracle数据库系统中,表空间(Tablespace)是存储数据对象(如表、索引、视图等)的逻辑单位,而临时表空间(Temporary Tablespace)则用于存储临时数据,比如排序或联接操作产生的中间结果。创建和管理表空间及...

    Oracle本地管理表空间

    ### Oracle本地管理表空间知识点详解 #### 一、概述 **本地管理表空间**是Oracle 8i版本引入的一种新的表空间管理模式。相比于之前的**字典管理表空间**,它采用了更加高效的空间管理机制,主要通过在每个数据文件...

    oracle-support oracleasmlib kmod-oracleasm包

    Oracle Support for Oracle ASM (Automatic Storage Management) 和 Kmod-OracleASM 包是Oracle数据库系统在Linux环境下进行存储管理的关键组件。这些包确保了在Red Hat Enterprise Linux (RHEL)、CentOS以及Oracle ...

    oracle创建表空间用户等

    ### Oracle 创建表空间、用户及分配权限详解 在Oracle数据库管理中,创建表空间和用户是常见的基础操作之一。本文将详细介绍如何在Oracle数据库中创建表空间、创建用户并分配相应的权限,以及如何设置表空间的自...

    Oracle 表空间 收缩

    ### Oracle 表空间收缩详解 #### 一、背景与需求 在Oracle数据库管理过程中,合理地管理和优化存储空间是非常重要的工作之一。有时,我们会遇到这样的情况:某个表空间占用的实际物理空间远大于其实际需要的空间,...

    Oracle临时表空间不足和批处理缓慢问题探讨.pdf

    Oracle 临时表空间不足和批处理缓慢问题探讨 本文探讨了 Oracle 临时表空间不足和批处理缓慢问题的原因和解决方法。通过分析和测试,发现了问题的根源在于应用逻辑方面,具体来说是 SQL 语句的编写问题。通过编写...

    oracle temp表空间不足解决方法

    Oracle数据库系统中,Temp表空间是用于存储临时段的地方,主要在执行排序、连接和创建索引等操作时使用。当遇到"Oracle temp表空间不足"的问题时,这通常意味着数据库运行过程中产生的临时数据超过了现有Temp表空间...

    Oracle-建表空间-用户-导入DMP-设置密码不过期等工具

    在"Oracle-建表空间-用户-导入DMP-设置密码不过期等工具"这个主题中,我们将详细探讨这些关键知识点。 首先,**创建表空间**是Oracle数据库中存储数据的基本单位。每个数据库对象如表、索引、视图等都会被分配到一...

    oracle数据库-改变表空间数据文件的位置

    "Oracle数据库-改变表空间数据文件的位置" 本文将详细介绍如何在Oracle数据库中改变表空间数据文件的位置。 在开始之前,我们需要了解Oracle数据库中的表空间和数据文件的概念。表空间是Oracle数据库中用于存储...

    获取oracle表空间脚本

    ### 获取Oracle表空间脚本 #### 背景与需求 在进行数据库备份与恢复的过程中,经常需要获取当前Oracle数据库中的表空间信息及其创建脚本。这样做的目的是为了确保在恢复过程中能够快速重建原有的数据库环境,包括...

    ORACLE SYSTEM表空间已满解决方案.docx

    ### ORACLE SYSTEM表空间已满解决方案 #### 一、SYSTEM表空间的作用 SYSTEM表空间是Oracle数据库中的一个关键组成部分,在数据库创建时会自动创建。它包含了许多重要的数据库元数据和控制信息,对于数据库的正常...

    Oracle-RAC增加ASM盘-创建表空间.pdf

    Oracle-RAC增加ASM盘-创建表空间.pdf

    oracle增加表空间

    ### Oracle在Linux环境下增加表空间及用户操作指南 #### 一、概述 Oracle数据库是业界广泛使用的数据库管理系统之一,为了确保数据库性能与可用性,合理地管理表空间是非常重要的一个环节。本文将详细介绍如何在...

    linux下创建oracle用户表空间

    "Linux 下创建 Oracle 用户表空间" Linux 下创建 Oracle 用户表空间是指在已有的数据库实例上创建一个新的帐号,访问一些新的表操作。以下是创建用户表空间的步骤: 第一个步骤是登录 Linux,以 oracle 用户登录...

    oracle定时删除表空间的数据并释放表空间

    在Oracle数据库管理中,定期清理和优化表空间是至关重要的任务,这有助于保持数据库的高效运行和合理利用存储资源。本文将深入探讨如何在Oracle环境中实现定时删除表空间的数据并释放空间,主要涵盖以下几个关键知识...

Global site tag (gtag.js) - Google Analytics