文档定位
该文档总结了表空间涉及到的大部分操作,包括表空间的创建、扩展、数据文件的删除、数据文件大小修改、表空间脱机/联机、表空间彻底删除等操作。
表空间(tablespace)是oracle数据库最大的逻辑单位,对应一个或多个数据文件,表空间的大小是它所对应的数据文件大小的总和。
数据库搭建了RAC时,存储采用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子句才可以删除物理文件;
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才会删除物理文件;
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;
同永久表空间的操作;
================================ over ========================================