Oracle表空间管理

创建和管理表空间

--查询任何一个表空间的状态信息;

selectt.tablespace_name name, d.allocated, u.used, f.free,t.status,d.cnt,contents,

t.extent_managementextman, t.segment_space_management segman

from dba_tablespacest,

(select sum(bytes)allocated,count(file_id) cnt from dba_data_files 

 where tablespace_name = '&tablespace') d,

(select sum(bytes)free from dba_free_space where tablespace_name='&tablespace') f,

(select sum(bytes)used from dba_segments where tablespace_name='&tablespace') u

wheret.tablespace_name='&tablespace';

 

--创建一个表空间

create smallfiletablespace cedar

datafile'D:\app\fanminggy\oradata\orafan11\CEDAR01.DBF'

size 100M autoextendon next 10M naxsize 200M

logging --all operations on segments in the tablespacewill generate redo

extent managementlocal

segment spacemanagement auto

default nocompress;

 

更改表空间的操作包括:

1、重命名

alter tablespace tablespaceoldname rename to tablespacename;

2、上线和离线

3、读写和只读

4、重新规定大小

5、命名警告门槛

 

Oracle表空间重命名的步骤:

1、alter tablespace SJ rename to CEDAR;

此时可以查看一下数据文件的状态仍然为online

select name datafile,status from v$datafile where name like '%SJ%';

2、将表空间离线:alter tablespace CEDAR offline;

此时查看数据文件状态为offline

select namedatafile, status from v$datafile wherename like '%SJ%';

3、在操作系统上重命名数据文件

SQL>HOST RENAME D:\app\fanminggy\oradata\orafan11\SJ01.DBF D:\app\fanminggy\oradata\orafan11\CEDAR01.DBF

此时可以在查询一下表空间和数据文件的对应关系

select t.name tablespace_name, d.name datafile_name

from v$tablespace t join v$datafile d using( TS#)

where t.name='CEDAR';

4、更改数据字典中的对应关系:alter database rename file 'D:\app\fanminggy\oradata\orafan11\SJ01.DBF' to 'D:\app\fanminggy\oradata\orafan11\CEDAR01.DBF';

5、将重命名后的表空间上线:alter tablespace CEDAR online;

此时可以在查询一下表空间数据文件的信息

select t.name tablespace_name, d.name datafile_name, d.status

from v$tablespace t join v$datafile d using( TS#)

where t.name='CEDAR';

 

数据库上线和离线操作:

ALTERTABLESPACE tablespacename OFFLINE [ NORMAL | IMMEDIATE | TEMPORARY ]

NORMAL--默认值,表空间在offline时会触发检查点,将所有所有缓存中的数据写回数据文件,如果任何一个数据文件中有错,命令将不能执行成功;

IMMEDIATE--使用此选项不会触发检查点,当表空间重新online的时候会执行恢复过程,当数据库处于noarchive模式的时候,不能使用immediate选项;

TEMPORARY--对于正常的数据文件,会触发检查点,进行正常的offline,online的时候不需要恢复,对于错误的数据会执行immediate选项,不会触发检查点,online的时候需要进行恢复

 

将数据库的表空间改变只读状态:

ALTER TABLESPACE tablespacename[READ ONLY | READ WRITE]

如果表空间变成只读状态,它的segment中的内容是不能更改的,也不能新建segment,但是可以删除segment。当数据库需要备份和恢复的时候,可以将表空间置为只读状态;

 

改变表空间的容量:

有两种方式:增加一个新的数据文件,或变更现有数据文件的大小;

ALTERDATABASE DATAFILE filename RESIZE n[M | G | T]

ALTER TABLESPAACE tablespace name ADD DATAFILE filename SIZE nM;

ALTERDATABASE DATAFILE filename AUTOEXTEND ON NEXT nM MAXSIZE nG;

 

更改表空间的警告门槛:

使用实例中的MMON进程来监控表空间的使用情况;默认85%警告,97%严重警告

 

删除表空间:

DROPTABLESPACE tablespacename [INCLUDING CONTENTS [AND DATAFILES ] ];

如果不加后面的子句,如果表空间中有任何内容,都不能执行成功;即使加上子句,如果该表空间和其他表空间有引用的父子关系,也不能执行成功;

如果不加后面的AND DATAFILES子句,则不能删除服务器上的物理数据文件;注意,这种情况在windows环境下会有例外,因为windows环境有保护机制,必须先停掉oracle服务,才能在操作系统层面删除数据文件;

 

表空间中的块管理(Extent Management):

段管理有两种方式:dictionary management and localmanagement


字典管理的方式会使用数据库数据字典中的两张表:

SYS.UET$:行数据记录已经使用的extents

SYS.FET$:行数据记录还空闲的extents

由于每次空间分配都要操作这两张表,所以字典管理的方式效率会很低;

 

本地管理的方式使用bitmaps来存储每个数据文件,用每个bit来表明数据文件中的blocks

 

--查询表空间extent的管理方式

selecttablespace_name,extent_management from dba_tablespaces

--将字典管理的表空间转换为本地管理的表空间

executedbms_space_admin.tablespace_migrate_from_local('tablespacename');

转换的过程会很快,但是SYSTEM表空间除外

 

表空间中的段管理(Segment Space Management)

有两种segments的管理方式:manual or automatic

--查询表空间中的segment的管理方式

selecttablespace_name,segment_space_management from dba_tablespaces;

 

there arefive bitmaps for each segment, and each block will appear on exactly onebitmap;

 

the oldmanual space management method used a simple list, known as the free list;

 

目前还没有将manual方式转换为automatic方式的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值