八、管理表空间和数据文件(Managing Tablespaces and Data Files)

本文详细介绍了Oracle数据库中表空间和数据文件的基础概念,包括表空间的构成、不同类型(系统和非系统)、创建方法、空间管理策略以及动态调整数据文件的技巧。涵盖了从基本操作到高级管理的全面内容。
摘要由CSDN通过智能技术生成

定义表空间和数据文件的用途

创建表空间

管理表空间

使用Oracle管理文件(OMF)创建和管理表空间获取表空间信息

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

一、表空间

1.1表空间和数据文件

1.1.1Tablespaces:

-一次只能属于一个数据库包含一个或多个

-数据文件

-是否讲—步划分为锣辑存储单元

1.1.2数据文件:

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

-是模式对象数据的存储库

1.2存储层次结构摘要

(1). 数据库由一个或多个表空间组成。

(2). 表空间由一个或多个数据文件组成。这些文件可能是文件系统中的熟文件、原始分区、ASM管理的数据库文件或集群文件系统中的文件。表空间包含段。

(3).一个段(TABLE、INDEX等)由一个或多个区段组成。一个段存在于一个表空间中,但可能在该表空间内的许多数据文件中有数据。

(4). 区段是磁盘上一组逻辑上连续的块。区段位于单个表空间中,而且始终位于该表空间中的单个文件中。

(5). 块是数据库中最小的分配单位。块是数据库使用的最小I/O单位。

1.3表和数据文件

1.4表空间类型

系统表空间

-使用数据库创建

-包含数据字典

-包含SYSTEM撤消段

非系统表空间

-单独的部分

-简化空间管理

-控制分配给用户的空间大小

1.4.1创建表空间
(1)先查询一下其他表空间的位置
select file_name,tablespace_name from dba_data_files;

(2)开始创建
create tablespace name datafile '大部分表空间的位置' size 5m;
name - 表空间的名称
size - 表空间大小

1.5表空间中的空间管理

1.5.1本地管理表空间:

-空闲区段在表空间中管理。

-位图用于记录空闲区段。每个位对应一个或一组块。

-位值表示空闲或已使用。

1.5.2字典管理表空间:

-空闲区由数据字典管理。

-在分配或释放区段时更新相应的表。

bit and byte 

1byte = 8bit

0xE8A2 = 1110.1000.1010.0010

1.6Dictionary-Managed TS(数据字典管理表空间)

-区段在数据字典中进行管理。

-存储在表空间中的每个段可以有不同的存储子句。

-需要合并。

CREATE TABLESPACE userdata 
datafile '/u01/oradata/userdata01 .dbf' 
size 500M EXTENT MANAGEMENT DICTIONARY DEFAULT STORAGE 
(initial 1M NEXT1M PCTINCREASE 0);

1.7本地管理表空间(Locally Managed Tablespacs)

-减少了数据字典表上的争用

-在空间分配或重新分配时不会产生撤销

-不需要合并

CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

1.8迁移DM SYSTEM TS(Migrating a DM SYSTEM TS)

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

DBMS SPACE ADMIN.
TABLESPACE_MIGRATE_TO_LOCAL ('SYSTEM');

1. 对数据库进行完整备份。

2. 确保数据库有一个默认的临时表空间,而不是SYsTEM。临时表空间通过CREATE temporary tablespace命令创建。

3.在字典管理的表空间中消除任何撤消(回滚)段。

4. 在本地管理的表空间中至少应该有一个在线撤消段,或者undo表空间应该是在线的。

5. 除了包含undo空间和默认临时表空间的表空间外,所有表空间都应该设置为READ ONLY模式。6. 以受限模式启动实例。

7. 迁移SYSTEM表空间:DBMS_SPACE_ADMIN。Tablespace_migrate_to_local (' system ');
撤消表空间

1.9Undo 表空间(Undo Tablespace) 

-不能包含任何其他对象

-区段是本地管理的

-只能使用DATAFILE和EXTENT管理子句

CREATE UNDO TABLESPACE undo1 
DATAFILE'/u01/oradata/undo01.dbf' SIZE 40M;

1.10临时表空间(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中收到一条警告,指出建议使用默认的临时表空间,并且在将来的版本中是必需的。

1.10.1默认临时表空间

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

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

-可以使用以下命令创建:

        -CREATE DATABASE

        -ALTER DATABASE

1.10.2创建默认temp

数据库创建后:(说白了是修改)

ALTER DATABASE
DEFAULT TEMPORARY TABLESPACE default_temp2;

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

SELECT * FROM DATABASE_PROPERTIES;

默认临时表空间不能为:

删除直到新的默认值可用

不能离线

不能修改为永久表空间

1.11只读表空间(Read-Only Tablespaces)

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

ALTER TABLESPACE userdata READ ONLY;

-导致检查点

-只能用于读操作的数据对象

-可以从表空间中删除

例:

先创建一个表空间

create tablespace qwe
datafile '/u01/app/oracle/oradata/orcl/qwe.dbf' size 10m
extent management local uniform size 128k;

创建abc用户

create user abc identified by abc default tablespace qwe;  //创建abc用户
grant connect,resource to abc; //赋予abc用户权限

再打开一个窗口,使用abc用户,并创建表

sqlplus abc/abc
create table a (id integer,name char(10)); // 创建a表

向a表中插入数据

insert into a values(0,'orcale');
insert into a values(1,'java');  //插入两条数据
select * from a;//查看表格数据
commit;

 回到sys用户窗口

alter tablespace qwe read only;

验证

//插入一条数据进行验证
insert into a values(2,'python');
结果会报错,也是预期当中,因为你的目的就是让他只能读
select * from a;
结果不会报错
alter tablespace qwe read wite; //改回表可读可写

1.12表空间在线离线 (Taking a Tablespace Offline)

不能用于数据访问

不能脱机的表空间

-系统表空间

-具有活动撤销段的表空间

-默认的临时表空间

使表空间离线

alter tablespace userdata offline;
 

 使表空间在线

alter tablespace userdata online;

 在sys用户下对qwe表空间进行离线处理

alter tablespace qwe offline; //对qwe表进行离线处理

 

再次查询

select * from a;
会报错,原因是你前面把表空间进行了关闭

离线处理成功

 在sys用户下对qwe表空间进行在线处理

alter tablespace qwe online;

进行查询

select * from a;

在线处理成功

1.13调整表空间大小

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

更改数据文件的大小:

        - 自动使用AUTOEXTEND

        -手动使用ALTER DATABASE

使用ALTER TABLESPACE添加数据文件

对表空间进行查询

在linux系统上新建文件

vim sql //创建sql文件

 在文件中增加以下内容

SELECT
    a.tablespace_name,
    ROUND(((a.bytes / 1024 / 1024)), 2) AS total_space_mb,
    ROUND(((b.bytes / 1024 / 1024)), 2) AS used_space_mb,
    ROUND((((a.bytes - b.bytes) / a.bytes) * 100), 2) AS used_percent
FROM
    dba_data_files a
    LEFT JOIN (SELECT
                   file_id,
                   SUM(bytes) bytes
               FROM
                   dba_extents
               GROUP BY
                   file_id) b ON a.file_id = b.file_id
ORDER BY
    1;

退出后更改文件

mv sql s.sql

查看一下当前的目录

pwd

进入sqlplus 使用sys用户登录

@/home/oracle/s.sql   //@后面是文件目录

二、数据文件

2.1动态调整数据文件大小

2.2添加数据文件

2.3添加表空间 

2.4启用自动扩展(Enable Automatic Extension)

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

-创建数据库(create database)

-创建表空间(create tablespace)

-修改表空间…添加数据文件(alter tablespace ...add datafile)

alter tablespace qwe add datafile
'/u01/app/oracle/oradata/orcl/qwe2.dbf' size 5m
autoextend on next 1m maxsize 10m;

查看

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

select tablespace_name,autoextensible from dba_data_files;

修改关闭的AUT

ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/qwe.dbf'
AUTOEXTEND ON NEXT 10M MAXSIZE 20M;

查看是否开启成功

select tablespace_name,autoextensible from dba_data_files;

2.5手动调整日期文件大小

手动增加或减少数据文件大小更改数据库。

调整数据文件大小可以在不添加更多数据文件的情况下增加空间。

手动调整数据文件大小会回收数据库中未使用的空间。

alter database datafile 
'/u01/app/oracle/oradata/orcl/qwe2.dbf' resize 10m;

先查询一下原数据文件大小

select file_name,tablespace_name,bytes from dba_data_files;

 2542880≈5mb

直接执行命令 

alter database datafile 
'/u01/app/oracle/oradata/orcl/qwe2.dbf' resize 10m;

再次查看数据文件大小

select file_name,tablespace_name,bytes from dba_data_files;

okokokokokokok完成了

注意:如果数据文件占用了20,但是你要给他修改到10,不可以的哦,不能小于存储大小

2.6添加数据文件

-通过添加额外的数据文件来增加分配给表空间的空间

-ADD DATAFILE子句用于添加数据文件

                                                 2.4有,这里不写了

2.7移动数据文件

2.7.1移动数据文件-修改表空间

-表空间必须离线。

-目标数据文件必须存在。

先查看一下数据文件

select file_name,tablespace_name,bytes from dba_data_files;

关闭表空间

alter tablespace qwe offline;

再次查看数据文件

select * file_name,tablespace_name,bytes from dba_data_files;

没有bytes,关闭成功

找到数据文件的位置

进入到目录中

进行移动(也可以拷贝cp)

mv 文件名称 目标路径
mv qwe.dbf /u01/app/oracle/oradata/test

进行表空间位置修改

alter tablespace qwe rename datafile
'/u01/app/oracle/oradata/orcl/qwe.dbf'
to '/u01/app/oracle/oradata/test/qwe.dbf';

让数据文件在线

alter tablespace qwe online;

查看文件

select file_name,tablespace_name,bytes from dba_data_files;

位置更改成功a.a

2.7.2移动数据文件-修改数据库

-必须挂载数据库

-目标数据文件必须存在。

挂载数据库

shutdown immeidate;

修改数据库位置

alter database rename file '/u01/app/oracle/oradata/test/qwe.dbf'
to '/u01/app/oracle/oradata/orcl/qwe.dbf';

打开数据库

alter database open;

查看数据文件

select file_name,tablespace_name,bytes from dba_data_files;

更改成功

2.8删除表空间

在以下情况下不能删除表空间

-是SYSTEM表空间

-动态的部分

暴力删除-表空间下面的数据文件也给干掉

drop tablespace userdata including comtemts and datafiles;

三、获取表空间信息

表空间和数据文件信息的获取方式如下:

3.1表空间信息:

-DBA_TABLESPACES

-V$TABLESPACE

空间数据文件信息:

-DBA_DATA_FILES

-V$DATAFILE

临时文件信息:

-DBA_TEMP_FILES

-V$TEMPFILE

四、总结

这节课中,你应该学会如何:使用表空间分隔数据创建各种类型的表空间管理表空间使用OMF管理表空间获取表空间信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值