定义表空间和数据文件的用途
创建表空间
管理表空间
使用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管理表空间获取表空间信息