您的位置:首页 > 数据库 > Oracle

Oracle 11g R2 DBA 操作指南(13) 表空间与数据文件管理

2016-08-11 21:37 731 查看
1.Oracle 数据库的逻辑结构

(逻辑结构)一个数据库有一个或多个表空间,一个表空间有一个或多个段,而一个段由一个或多个区段组成,一个区段由多个数据库块组成,一个数据库块由多个操作系统数据库块组成。

(物理结构)一个表空间有一个或多个数据文件,一个数据文件物理上由操作系统块组成。

数据库块在创建数据库时由初始化参数DB_BLOCK_SIZE设置,一般大小为4KB或8KB。

SELECT TABLESPACE_NAME, BLOCK_SIZE, CONTENTS FROM DBA_TABLESPACES;


2.表空间的分类以及创建表空间

Oracle数据库把表空间分为两类:系统表空间和非系统表空间。

创建表空间的语法为:

CREATE TABLESPACE tablespace_name

[DATAFILE clause ]

[MINIMUM EXTENT integer[k|m] ]

[BLOCKSIZE integer[k] ]

[LOGGING | NOLOGGING]

[DEFAULT storage_clause]

[ONLINE | OFFLINE]

[PERMANENT | TEMPORARY]

创建表空间
create tablespace user_data
datafile 'd:\userdata\userdata1.dbf' size 100M;


3.表空间磁盘管理的两种方案

①数据字典管理

②本地管理

不使用数据字典管理的表空间提高了系统效率,解决了数据字典的瓶颈问题,但是本地管理的表空间不能随意更改默认的存储参数,如初始区段的大小,最大区段数等。(Oracle极力推荐本地管理的表空间)


4.创建表空间

①创建数据字典管理的表空间

create tablespace tianjin_data
datafile 'd:\userdata\tianjin01.dbf' size 100M,
'e:\userdata\tianjin02.dbf' size 100M,
'f:\userdata\tianjin03.dbf' size 100M
mininum extent 20k
extent management dictionary
default storage(initial 20k next 20k maxextents 500 pctincrease 0);


②创建本地管理的表空间

create tablespace beijing_data
datafile 'd:\userdata\beijingdata01.dbf' size 100M
extent management local
uniform size 1M;


③创建还原表空间

还原表空间只能存放还原段,不能存放其他任何堆芯。在创建还原表空间时,只能使用DATAFILE子句和EXTENT MANAGEMENT子句。

create undo tablespace user_undo
datafile 'd:\userdata\user_undo.dbf' size 30M;


④创建临时表空间

在Oracle数据库中临时表空间用于用户的特定会话活动,如用户会话中的排序操作,排序的中间结果需要存储在某个区域,这个区域就是临时表空间。

临时表空间是使用当前数据库的多个用户共享使用的。

create temporary tablespace user_temp
tempfile 'd:\userdata\user_temp.dbf' size 20M
extent management local
uniform size 1M;

通过数据字典视图v$tempfile来查看数据文件信息
SELECT FILE#, STATUS, ENABLED, BYTES, BLOCK_SIZE, NAME FROM V$TEMPFILE;


在初始化参数文件中,有一个参数为SORT_AREA_SIZE,这是排序区尺寸大小,为了优化临时表空间中排序操作的性能,最后将UNIFORM SIZE设置为SORT_AREA_SIZE的整数倍。

查看当前数据库的默认临时表空间
SELECT * FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME LIKE 'DEFAULT%';

切换临时表空间
alter database default temporary tablespace user_temp;
不能将默认临时表空间脱机。


2016/08/11 21:36:00

创建大文件表空间

①使用大文件表空间的一些限制

在Oracle11g中只有本地管理的且段空间自动管理的表空间才能使用大文件表空间(Big File Tablespace),我们简称大文件表空间为BFT。但是对于本地管理的回滚表空间和临时表空间,不要求段空间管理的类型,可以使用BFT。

使用大文件表空间在数据库开启时对于DBWR进程的性能会有显著提高,但是该表空间的大文件会增加表空间或整个数据库的备份和恢复时间。

②使用大文件表空间的优势

.只需要创建一个数据文件,大大减少了数据文件的数量,简化了数据文件的管理,显然数据文件的减少使得控制文件的容量也减少,因为控制文件不需要记录大量的数据文件的存储位置信息。
.大文件表空间的容量比普通表空间要大的多,所以其存储能力显著提高。一个普通的表空间最多可以用1024个数据文件,而一个大文件表空间只包含一个文件,但是此文件的容量上限是普通数据文件的1024倍。


③创建大文件表空间

创建大文件表空间有3种方法,下面我们依次介绍这三种方法。

.在创建数据库时,定义大文件表空间并把它作为默认表空间。
创建数据库时设置大文件表空间的语句
create database
set default bigfile tablespace tbs_name
datafile 'd:\bigfile_tbs\bfile_tbs01.dbf' size 2G

一旦创建了默认表空间为大文件表空间类型,则以后创建的表空间都为大文件表空间,否则需要手工修改这个默认设置。
.在数据库成功创建后,使用CREATE TABLESPACE BIGFILE创建大文件表空间
创建大文件表空间BIGFILETBS
create bigfile tablespace bigfiletbs
datafile 'd:\bigfile_tbs\bfile_tbs01.dbf' size 2G;

查询表空间的数据文件属性信息
select tablespace_name,file_name,bytes/(1024*1024*1024) G
from dba_data_files;

查询表空间BIGFILETBS的区段管理方式和段空间管理方式
select tablespace_name,initial_extent,contents,extent_management,segment_space_management
from dba_tablespaces
where tablespace_name like 'BIG%';

.通过改变默认表空间为大文件表空间使得后来创建的表空间都为大文件表空间。
alter tablespace set default bigfile tablespace;


④更改大文件表空间的大小。

有两种方式实现大文件表空间容量的修改。

.alter tablespace bigfiletbs resize 4G;
.修改大文件表空间大小为自动扩展
alter tablespace bigfiletbs autoextend on next 1G;


查询当前数据库的默认表空间的类型

select *

from database_properties

where property_name = ‘DEFAULT_TBS_TYPE’;

SMALLFILE(即小文件表空间)

5.表空间管理

①脱机管理

.查看表空间lin的状态
select status,contents,logging
from dba_tablespaces
where tablespace_name = 'LIN';

.查看表空间LIN是否存在
select table_name,owner
from dba_tables
where tablespace_name = 'LIN';

.将表空间LIN设置为脱机状态
alter tablespace lin offline;

.查询表空间LIN中的数据文件的状态
select file#,name,status
from v$datafile
where file#>10;

.查询表空间LIN中的表EMPLOYEES
select *
from scott.employees;


②只读管理

只读管理就是把表空间设置为只读状态,这样表空间中的数据只能被用户读取,而不能做任何修改或插入操作。

.将USERS表空间设置为只读状态
alter tablespace users read only;
.将只读状态的表空间users设置为正常状态
alter tablespace users read write;


6.表空间和数据文件管理

①修改表空间大小

修改表空间的大小有4种方法:

.在创建表空间时,使用AUTOEXTEND ON 子句使得表空间在需要时可以自动扩展;
create tablespace manager_tbs1
datafile 'd:\tbs_manager1\tbs1.dbf'
size 100M
autoextend on;

查看表空间MANAGER_TBS1的数据文件的扩展方式
select file_name,tablespace_name,blocks,status,autoextensible
from dba_data_files
where tablespace_name like 'MAN%';

.在创建表空间后,使用alter databse命令修改表空间中的数据文件为自动扩展。
create tablespace manage_tbs
datafile 'd:\tbs_manager\tbs01.dbf'
size 50M
uniform size 1M;

查看表空间是否可自动扩展
select tablespace_name,file_name,autoextensible from dba_data_files;

使用alter database命令修改表空间中的数据文件为自动扩展
alter database datafile 'd:\tbs_manager\tbs01.dbf' autoextend on next 1MB;

.在②中使用alter database命令修改了表空间中的数据文件可以自动扩展,现在我们用另一种方法即在表空间中增加一个数据文件的方式增加表空间容量。

假设表空间MANAGE_TBS中的数据文件没有设置为自动扩展。
向表空间MANAGE_TBS中增加了一个数据文件
alter tablespace manager_tbs
add datafile 'd:\tbs_manager\tbs02.dbf'
size 50MB;

.我们将表空间MANAGE_TBS中的数据文件d:\tbs_manager\tbs01.dbf修改为100MB(修改前50M)

alter database
datafile 'd:\tbs_manager\tbs01.dbf' resize 100MB;


2016/08/15 22:28:00

②修改表空间的存储参数

修改表空间的存储参数只对数据字典管理的表空间有效。

.修改该表空间分配的最小EXTENT尺寸
alter tablespace tianjin_data
minimum extent 2M;

.修改表空间tianjin_data的默认存储子句
alter tablespace tianjin_data
default storage(initial 2M next 2M maxextents 50);

*在Oracle11g中已经不允许创建数据字典管理的表空间。只有在Oracle 9i以及之前的版本可以创建数据字典管理的表空间。


③删除表空间

DROP TABLESPACE tablespace_name

[INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS] ]

.删除表空间并且删除该表空间中的数据文件
drop tablespace manage_tbs including contents and datafiles;

*如果使用drop tablespace manage_tbs指令删除该表空间则只是删除了控制文件中指向该数据文件的文件指针,而实际的数据文件不会被删除。
*在删除表空间时,Oracle推荐将表空间置于脱机状态,以避免仍然有事务在操作表空间中的区段。


④迁移数据文件

迁移数据文件主要分两种,即迁移系统表空间中的文件和迁移非系统表空间中的文件。

.迁移系统表空间中的数据文件。
A.我们先查看当前系统表空间中的数据文件信息。
select tablespace_name,file_name,bytes,status
from dba_data_files
where tablespace_name = 'SYSTEM';
B.使用具有DBA权限的用户登录数据库服务器,然后关闭数据库。
shutdown immediate;
C.复制SYSTEM表空间的数据文件到新的目录下,将该目录为D:\SYSTEM.
host copy 旧路径 新路径;
*因为系统表空间SYSTEM中的数据文件大小不同,所有需要等待的时间也有差异,如提示【已复制 1个文件】,说明成功复制了SYSTEM表空间中的文件。
D。打开数据库到MOUNT状态,然后使用ALTER DATABASE RENAME FILE指令迁移数据文件。
startup mount;
数据库装载完毕
alter database rename file '旧路径' to '新路径';
*当打开数据库到MOUNT状态时,启动实例但是Oracle不会打开数据文件,所以迁移数据文件的指令可以成功执行。
E.打开数据库,使用指令ALTER DATABASE OPEN。
alter database open;

.迁移非系统表空间
在Oracle中,要求这种非系统表空间没有活跃的还原段、临时段、排序段等,这种非系统表空间才可以迁移。
A.把表空间MANAGE_TBS设置为脱机。
alter tablespace manage_tbs offline;
B.复制数据文件到新的磁盘目录下,文件名不变。
host copy 旧路径 新路径;
C.使用指令ALTER DATABASE RENAME DATAFILE迁移数据文件。
alter tablespace manage_tbs
rename datafile '旧路径' to '新路径';
D.把表空间联机
alter tablespace manage_tbs online;


2016/08/16 21:29:00
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 oracle 11g