Oracle学习笔记5_表空间管理和数据文件

表空间和数据文件

Oracle逻辑上将数据存储在表空间中,物理上将数据存储在数据文件中。

表空间:

  • 一次只能属于一个数据库
  • 由一个或多个数据文件组成
  • 是否进一步划分为逻辑存储单元

 数据文件:

能只属于一个表空间和一个数据库

是模式对象数据的存储库

表空间的类型

SYSTEM表空间

用数据库创建

  • 包含数据字典
  • 包含SYSTEM撤消段

非SYSTEM表空间 

  • 单独的部分
  • 简化空间管理
  • 控制分配给用户的空间量

permanent(永久表空间)、undo、temporary(临时表空间)

创建表空间

创建表空间的命令如下:

CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 5M;

表空间中的空间管理

本地管理表空间:

  • 在表空间中管理空闲区。
  • 位图用于记录空闲区。
  • 每个位对应一个或一组块。
  • 位值表示空闲或已使用。

Dictionary-managed表空间:

  • 空闲区由数据字典管理。
  • 当区段被分配或释放时,相应的表被更新。

Dictionary-Managed TS

  • 区段在数据字典中管理。
  • 存储在表空间中的每个段可以有不同的存储子句。
  • 需要进行Coalescing。
CREATE TABLE userdata
DATAFILE '/u01/oradata/userdata01.dbf'
SIZE 500M EXTENT MANAGENT DICTIONARY
DEFAULT STORAGE
(initial 1M NEXT 1M PCTINCREASE);

迁移DM SYSTEM TS

将字典管理的SYSTEM表空间迁移到本地管理:

  1.  对数据库做一个完整的备份。
  2.  确保数据库有一个非SYSTEM的默认临时表空间。使用CREATE TEMPORARY TABLESPACE命令创建临时表空间。
  3. 在字典管理的表空间中消除任何撤消(回滚)段。
  4.  本地管理的表空间中至少应该有一个在线撤销段,或者撤销表空间应该是在线的。
  5.  除了包含undo空间和默认临时表空间的表空间外,所有表空间都应该设置为READ ONLY模式。
  6.  以受限模式启动实例。
  7.  迁移SYSTEM表空间:
DBMS_SPACE_ADMIN.

TABLESPACE_MIGRATE_mig_TO_LOCAL('SYSTEM');

Undo Tablespace

  • 用于存储undo段
  • 不能包含任何其他对象
  • 区段是本地管理的
  • 只能使用DATAFILE和EXTENT MANAGEMENT子句
CREATE UNDO TABLESPACE undo1
DATAFILE '/u01/oradata/undo01.dbf' SIZE 40M;

Temporary Tablespaces(临时表空间)

  • 用于排序操作
  • 能被多个用户共享
  • 不能包含任何永久对象
  • 建议使用本地管理的区段
CREATE TEMPORARY TABLESPACE temp
TEMPFILE 'u01/oradata/temp01.dbf' SIZE 20M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M;

当SYSTEM表空间是本地管理时,在创建数据库时必须至少定义一个默认的临时表空间。本地管理的SYSTEM表空间不能用作默认临时存储。

如果SYSTEM是字典管理的,并且在创建数据库时没有定义默认的临时表空间,那么SYSTEM仍然用于默认的临时存储。然而,你会在ALERT.LOG中收到一个警告,说默认临时表空间是推荐的,并且在未来的版本中是必要的。

Defauit Temporary TS(默认临时表空间)

指定数据库范围的默认临时表空间

避免使用SYSTEM表空间存储临时数据

可以使用以下命令创建:

CREATE DATBASE
ALER DATABASE

创建默认临时表空间

在数据库创建过程中:

CREATE DATABASE DBA01
LOGFILE
GROUP 1 ('/SHOME/ORADATA/u01/redo01.log')SIZE 100M
GROUP 2 ('/SHOME/ORADATA/u02/redo02.log')SIZE 100M
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
MAXINSTANCES 1
DATAFILE,/SHOME/ORADATA/u01/system01.dbf' SIZE 325M
UNDO TABLESPACE undotbs
DATAFILE9/SHOME/ORADATA/u02/undotbs01.dbf' SIZE 200
DEFAULT TEMPORARY TABLESPACE temp
TEMPFILE'/SHOME/ORADATA/u03/temp01.dbf' SIZE 4G
CHARACTER SET US7ASCII

数据库创建后:

ALTER DATAASE
DEFAULT TEMPORARY TABLESPACE default_temp2;

查找数据库查询DATABASE_PROPERTIES的默认临时表空间:

SELECT * from DATABASE_PROPERTIES;

限制

默认临时表空间不能为:

  • 在新的默认表空间可用之前删除
  • 离线
  • 修改为永久表空间

只读表空间

使用以下命令将表空间设置为只读模式:

ALTER TABLESPACE userdata READ ONLY;
  • 引起检查点
  • 只能用于读操作的数据
  • 对象可以从表空间中删除

使表空间离线

  • 不可用于数据访问
  • 不能离线的表空间:SYSTEM tablespace
  • 具有活动undo段的表空间
  • 默认临时表空间

使表空间离线:

ALTER TABLESPACE userdata OFFLINE;

使表空间在线:

ALTER TABLESPACE userdata ONLINE;

更改存储设置

使用修改表空间命令修改存储设置:

ALTER TABLESPACE userdata MINIMUM EXTENT 2M;
ALTER TABLESPACE userdata
DEFAULT STORAGE (INITIAL 2M NEXT 2M MAXEXTENTS 999); 

本地管理的表空间的存储设置不能被修改。

调整表空间大小

表空间可以通过以下方式调整大小:

1.修改数据文件的大小:

  • 自动使用AUTOEXTEND
  • 手动使用ALTER DATABASE

2.使用ALTER TABLESPACE添加数据文件

启用自动扩展

可以使用以下命令自动调整大小:

  • CREATE DATABASE
  • CREATE TABLESPACE
  • ALTER TABLESPACE … ADD DATAFILE

例子:

CREATE TABLESPACE user_data
DATAFILE
'/u01/oradata/userdata01.dbf' SIZE 200M
AUTOEXTEND ON NEXT 10m MAXSIZE 500M;

查询DBA_DATA_FILES视图,确定是否启用了AUTOEXTEND。

手动调整数据文件大小

  • 手动增加或减少数据文件的大小更改数据库。
  • 调整数据文件大小可以在不添加更多数据文件的情况下增加空间。
  • 手动调整数据文件大小会回收数据库中未使用的空间。
  • 例子:
ALTER DATABASE
DATAFILE '/u03/oradata/userdata02.dbf'
RESIZE 200M;

向表空间添加数据文件

  • 通过添加额外的数据文件来增加分配给表空间的空间
  • 添加DATAFILE子句用于添加数据文件
  • 例子:
ALTER TABLESPACE user_data
ADD DATAFILE '/u01/oradata/userdata03.dbf'
SIZE 200M;

移动数据文件的方法

ALTER TABLESPACE

  • 表空间必须离线。
  • 目标数据文件必须存在。
ALTER TABLESPACE userdata RENAME
DATTAFILE '/u01/oradata/userdata01.dbf'
Tо '/u02/oradata/userdata01.dbf';

ALTER DATABASE

  • 必须挂载数据库(MOUNTED)。
  • 目标数据文件必须存在。
ALTER DATABASE RENAME
FILE '/u01/oradata/system01.dbf'
TO '/u03/oradata/system01.dbf';

删除表空间

不能删除表空间,如果它:

  • 是SYSTEM表空间
  • 有活动的段

包括内容删除段。

包括内容和数据文件删除数据文件。

级联约束删除所有引用完整性约束。

DROP TABLESPACE userdata
INCLUDING CONTENTS AND DATAFILES;

获取表空间信息

获取表空间信息和数据文件信息可通过以下查询方式获取:

表空间信息:

DBA_TABLESPACES
V$TABLESPACE

数据文件信息:

DBA_DATA_FILES
V$DATAFILE

临时文件信息:

DBA_TEMP_FILES
V$TEMPFILES

存储层次结构摘要

  1. 数据库由一个或多个表空间组成。
  2. 一个表空间由一个或多个数据文件组成。这些文件可能是文件系统中的cooked file,原始分区(raw partition),ASM 管理的数据库文件,或者是群集文件系统(clustered file system)中的文件。一个表空间包含段(segments)。
  3. 一个段(TABLE, INDEX等)由一个或多个区段组成。一个段存在于一个表空间中,但可能在该表空间内的许多数据文件中有数据。
  4. 区段是磁盘上逻辑上连续的一组块。区段位于单个表空间中,而且始终位于该表空间中的单个文件中。
  5. 块是数据库中最小的分配单位。块是数据库使用的最小I/O单位。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值