Oracle—tablespace使用

文档目录

    • 相关解释
      • 表空间分类
    • 相关操作
      • 永久表空间
      • 临时表空间
      • 撤销表空间

文档定位
该文档总结了表空间涉及到的大部分操作,包括表空间的创建、扩展、数据文件的删除、数据文件大小修改、表空间脱机/联机、表空间彻底删除等操作。

相关解释

  • 表空间

表空间(tablespace)是oracle数据库最大的逻辑单位,对应一个或多个数据文件,表空间的大小是它所对应的数据文件大小的总和。

数据库搭建了RAC时,存储采用ASM自动管理方式,表空间的数据文件路径和文件名可以自动创建和命名,也可以由管理员自己命名。

  • ASM

Automatic Storage Management(ASM)是Oracle数据库10g中一个非常出色的新特性,它以平台无关的方式提供了文件系统、逻辑卷管理器以及软件RAID等服务。

ASM中的文件既可以由数据库自动创建和命名(通过使用 Oracle 管理文件特性),也可以由 DBA 手动创建和命名。由于操作系统无法访问 ASM 中存储的文件,因此对使用ASM文件的数据库执行备份和恢复操作的唯一途径就是通过RMAN。

表空间分类

Oracle数据库按照文件类型、空间属性将表空间分为永久表空间、临时表空间、撤销表空间3类;

相关操作

  • 磁盘组查询
---磁盘组查询
select group_number,
       name,
       state,
       round(sum(total_mb) / 1024 / 1024, 3) as "TOTAL_CAP(/T)",
       round(sum(free_mb) / 1024 / 1024, 3) as "FREE_CAP(/T)"
  from v$asm_diskgroup
 group by group_number, name, state
 order by group_number;

永久表空间

  • 总表空间
---query_total_space
select tablespace_name,
       status,
       sum(bytes) / 1024 / 1024 / 1024 as "TOTAL_CAP(/G)"
  from dba_data_files
 where tablespace_name ='${tablespace_name}'
 group by tablespace_name, status;
  • 空闲空间
select tablespace_name, sum(bytes) / 1024 / 1024 / 1024 as "FREE_CAP(/G)"
  from dba_free_space
 where tablespace_name = '${tablespace_name}'
 group by tablespace_name;
  • 文件查询
---路径查询
select t.*
  from dba_data_files t
 where tablespace_name = '${tablespace_name}'
 order by t.TABLESPACE_NAME, file_id;
  • 新建表空间
-----sql_1
create tablespace TABLESPACE_NAME datafile '+DATA' size 8G;

create tablespace TABLESPACE_NAME 
  datafile '/oradata/instance/ts_dat_sjck_01.dbf' size 8192m;

create tablespace tablespace_name datafile '+DATA' size 8G
autoextend on next 64m maxsize unlimited;    

说明:数据文件大小单位可以是 k/m/g,同时数据文件可以开启自动扩展;单个数据文件上线容量为32G;

  • 删除表空间
drop tablespace ${tablespace_name}  including  contents and datafiles;

说明:此处会将服务器物理文件同步删除;

  • 空间扩展
alter tablespace tablespace_name add datafile '+DATA' size 8192m;

alter tablespace tablespace_name add 
  datafile '/oradata/instance/ts_dat_sjck_02.dbf' size 8G;

说明:Oracle Rac集群,使用ASM管理磁盘组时,数据文件添加无需指定路径,直接使用盘符标识即可;

  • 文件删除
---sql_1
alter tablespace tablespace_name 
  drop datafile '/oradata/instance/ts_dat_sjck_03.dbf'---sql_2  
alter tablespace tablespace_name drop datafile ${dbfile_num};  

---sql_3
alter database datafile '/oradata/instance/ts_dat_sjzbq_03.dbf'   
  drop including datafiles;

说明:sql_1、sql_2可以直接删除服务器物理文件,sql_3需要加 Including子句才可以删除物理文件;

  • 文件RESIZE
alter database datafile '/oradata/instance/ts_dat_sjzbq_04.dbf'  resize 8G; 

alter database datafile ${dbfile_num}  resize 8G; 

说明:此处数据文件可以扩大和缩小,缩小的值不能小于被占用的空间大小;

临时表空间

  • 总表空间
---query_total_space
select tablespace_name,
       status,
       sum(bytes) / 1024 / 1024 / 1024 as "TOTAL_CAP(/G)"
  from dba_temp_files t
 where tablespace_name = '${tablespace_name}'
 group by tablespace_name, status;
  • 空闲空间
---query_free_space
select tablespace_name,
       sum(tablespace_size) / 1024 / 1024 / 1024 as "TOTAL_CAP(/G)",
       sum(free_space) / 1024 / 1024 / 1024 as "FREE_CAP(/G)"
  from dba_temp_free_space t
 where tablespace_name = '${tablespace_name}'
 group by tablespace_name;
  • 文件查询
---路径查询
select t.*
  from dba_temp_files t
 where tablespace_name = '${tablespace_name}'
 order by t.TABLESPACE_NAME, file_id;
  • 建立表空间
create temporary tablespace ${tablespace_name} tempfile '+DATA' size 8192m;

create temporary tablespace ${tablespace_name} 
  tempfile '/oradata/instance/temp_sjck_01.dbf' size 8G;

说明:临时表空间的文件为稀疏文件,在数据文件创建后不会立刻分配空间,在sql查询过程中动态的分配占用空间;

  • 删除表空间
drop tablespace ${tablespace_name}  including  contents and datafiles;
  • 空间扩展
alter tablespace ${tablespace_name} add tempfile '+DATA' size 8192m;

alter tablespace ${tablespace_name} add 
  tempfile '/oradata/instance/temp_sjck_02.dbf' size 8G;
  • 文件删除
---sql_1
alter tablespace ${tablespace_name} 
drop  tempfile '/oradata/instance/temp_sjck_03.dbf';
---sql_2
alter database tempfile '/oradata/instance/temp_sjzbq_03.dbf'  drop including datafiles;

说明:sql_1 中不加INCLUDING DATAFILES 也会删除物理文件;sql_2 中必须加INCLUDING DATAFILES才会删除物理文件;

  • 文件RESIZE
alter database tempfile '/oradata/instance/temp_sjzbq_04.dbf'  resize 8G;

撤销表空间

  • 总表空间
---query_total_space
select tablespace_name,
       status,
       sum(bytes) / 1024 / 1024 / 1024 as "TOTAL_CAP(/G)"
  from dba_data_files
 where tablespace_name = '${tablespace_name}'
 group by tablespace_name, status;
  • 可用空间
---query_free_space
select tablespace_name,
       status,
       round(sum(bytes) / 1024 / 1024 / 1024, 5) as "FREE_CAP/(G)"
  from dba_undo_extents
 where tablespace_name = '${tablespace_name}'
 group by tablespace_name, status
 order by tablespace_name, status;

说明:status共三种状态 active、expored、unexpired;

  • 文件查询
select t.*
  from dba_data_files t
 where tablespace_name = '${tablespace_name}'
 order by t.tablespace_name, file_id;
  • 新建表空间
create undo tablespace ${tablespace_name}  datafile  '+DATA' size 8192m;

create undo tablespace ${tablespace_name}   
  datafile  '/oradata/instance/undotbs1_01.dbf' size 8G;

说明:对于Oracle Rac集群,一般有2个撤销表空间,在建库时就需要创建和分配空间;

  • 删除表空间

Oracle数据库必须存在撤销表空间;在删除前需要新建别的撤销表空间切换到新的表空间后再进行删除操作,而且比较麻烦;

  • 空间扩展
alter tablespace ${tablespace_name} add datafile '+DATA' size 8192m;
alter tablespace ${tablespace_name} add 
  datafile '/oradata/instance/undotbs1_02.dbf' size 8G;
  • 文件删除

同永久表空间的操作;

  • 文件RESIZE
    操作同永久表空间

================================ over ========================================

你可能感兴趣的:(数据库,oracle)