表空间和数据文件
1、Database 按逻辑划分(一对多): Tablespace(逻辑区域:表空间) > Segment(某一个特定逻辑结构所占用空间的集合:段【table/index/temp/rollback】) > Extent(空间分配单位:分区)> Oracle Block(Oracle使用和存储单位:块) > OS Block
Tablespace 按物理结构划分(一对多):Datafile > OS Block
(注意:分区单位=块的整数倍。)
sql>select * from v$datafile
sql>select t1.name,t2.name from v$tablespace t1,v$datafile t2 where t1.ts#=t2.ts#
sql>alter tablespace users add datafile 'd:\oracle\oradata\fox\users02.dbf' size 10m
2、系统表空间和非系统表空间
(SYSTEM TABLESPACE /NON-SYSTEM TABLESPACE)
system tablespace 系统表空间:数据库信息、数据字典、系统回滚段(dba_rollback_seqs)
non-system tablespace 非系统表空间:分离段(只读和读写数据分开)、方便管理每个表空间、控制用户的空间限额
sql>alter user kong quota 10m on users;
3、创建表空间:
语法:
CREATE Tablespace XXX
[datafile 'xxx']--OMF
SIZE xxx--kb,mb
EXTENT MANAGEMENT local/dictionary --分区管理(local 本地管理/dictionary 字典管理)
DEFAULT STORAGE (XXX) ---默认管理方式(只用于字典管理分区):initial/next/pctincrease/min extents/max extents...
==================================
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 5M MAXSIZE 200M;
==================================
sql> create tablespace kong
datafile 'd:\oracle\oradata\fox\kong.dbf' size 5m
extent management dictionary
default storage (initial 100k next 100k
pctincrease 10)
offline
本地管理:自由空间记录在bitmap位图中(0/1)。每一个bit响应一个块或块的集合。bit值指示它是否
free 或 used。空间分配时或回收时并不需要和数据字典表打交道,不跟系统表产生资源征用,不会产生回滚数据(不需要修改数据表),不会产生递归资源的征用。
两种分配方式:UNIFORM <统一分配>/ autoallocate <自动分配>
sql>create tablespace kong1
datafile 'd:\oracle\oradata\fox\kong1.dbf' size 5m
extent management local
uniform size 1m
sql> create tablespace kong2
datafile 'd:\oracle\oradata\fox\kong2.dbf' size 5m
extent management local autoallocate;
字典管理:默认管理方式。自由空间记录在数据字典表中。产生回滚数据。也会产生不必要的递归空间所带来的负担。优点:可以控制表空间分配和使用情况。每个段存储在同一个表空间中可以有不同的存储参数。缺点:产生碎片,存在碎片压缩的问题。
=======================
CREATE TABLE userdata DATAFILE '/u01/oradata/userdata01.dbf' SIZE 500M
EXTENT MANAGEMENT DICTIONARY
DEFAULT STORAGE(initial 1M NEXT 1M )
=======================
字典管理方式更改存储参数设定:
ALTER TABLESPACE userdata MINIMUM EXTENT 2M
ALTER TABLESPACE userdata DEFAULT STORAGE(INITIAL 2M NEXT 2M MAXEXTENTS 999);
sql>alter tablespace kong
minimum extent 10m;
sql>alter tablespace kong
default storage(initial 1m
next 1m
pctincrease 20);
4、Undo(回滚) 表空间:
用来储存Undo段(回滚段),不可以保存其他任何对象,分区使用本地管理,只能使用DATAFILE、EXTENT
MANAGEMENT 来创建回滚Undo表空间。
===================================
CREATE UNDO TABLESPACE undo1 DATAFILE '/u01/oradata/undo01.dbf' SIZE 40m
================================
回滚Undo段:环路顺序循环使用,处理旧值。提供读一致性,允许回滚section
sql>delete kong.sales; //删除数据操作
sql>select * from kong.sales; //只要没有commit,就将旧数据保存在回滚段中。
sql>rollback; //旧数据从回滚段中恢复
sql>select * from kong.sales; //旧数据重现
sql>show parameter undo
sql>create undo tablespace kong3
datafile 'd:\oracle\oradata\fox\kong3.ora' size 5m
extent management local
sql>create table tt1(id int) tablespace kong3; //此时不能在撤销表空间中创建段。
5、Temporary Tablespace 临时表空间
用于排序,不可以存储任何其他永久对象。建议使用本地管理分区extends。
sql> select * from kong.sales order by qty desc; //逻辑上的排序(数量上的代谢哦啊),Oracle尝试储存在内存区域中进行,如果内存区域不够,就使用临时段(temp segment)来支持排序.
sql>create temporary tablespace kong4
tempfile 'd:\oracle\oradata\fox\kong4.ora' size 5m
extent management local;
sql>create table tt1 (id int) tablespace kong4; //不允许将永久对象存放在Temporarytablespace中。
默认(Default)临时表空间:创建用户时,允许你指定一个datase范围的一个默认的临时表空间,避免了使用一个系统的表空间存储临时数据。可以使用Create database 和Alter database 命令来创建和修改临时表空间。默认的临时表空间是本地管理的。
sql>alter databse default temporary tablespace kong4; //指定表空间为临时表空间。
默认临时表空间的约束限制条件:不考虑备份,不能drop删除,不能只读,不能离线,不能修改默认表空间为永久表空间。
sql>alter tablespace kong4 offline; //不允许离线
sql>alter tablespace kong4 read only; //不允许只读
sql>drop tablespace kong4;// 不允许删除
6、OFFLINE STATUS 离线状态(可以部分的关闭数据库):
不是所有表空间都可以是离线状态。系统表空间、活动的Undo回滚段、默认临时表空间就无法处于离线状态。
sql> select * from kong.sales;
sql> alter tablespace users offline; //设置表空间离线
sql> select * from kong.sales //无法读取表数据
sql> alter tablespace users online; //关闭离线状态打开在线状态。
7、READ ONLY Tablespace只读状态的表空间:表空间仅仅用于读操作。数据对象能从只读表空间中删除。
建立一个只读表空间放到可移动只读媒介上(如光盘)方式:
ALTER TABLESPACE ...READ ONLY
MOVE the data file to the WORM drive
ALTER TABLESPACE..RENAME DATAFILE..;
sql>alter tablespace users read only;
sql>drop table employees;
sql>run
8、删除表空间:
从数据字典中删除表空间,表空间内容从数据字典中删除,也可以将物理数据文件一起删除。
================================
DROP TABLESPACE userdata
INCLUDING CONTENTS AND DATAFILES;
================================
sql>conn sys/admin1@fox as sysdba
sql>grant dba to kong;
sql>create table tt1 (id int) tablespace kong1; //在表空间kong1上创建表tt1
sql>drop tablespace kong1; //删除表空间kong1
sql>input INCLUDING contents
sql>run //只删除内容
sql>drop tablespace kong2 including contents and datafiles; //删除了表空间kong2的内容和物理数据文件。
9、扩展表空间:自动/手工(resize 改变大小 或 添加新的数据文件)
(1)自动扩展 AUTOEXTEND
===================
ALTER DATABASE DATAFILE
' /u01/oradata/userdata02.dbf' SIZE 200M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
========================
sql>alter database datafile 'd:\oracle\oradata\fox\kong.dbf'
2 autoextend on;
sql>del 2
sql>input resize 50m
sql>l
sql>run //DML/query访问的文件11处于脱机状态
sql>alter tablespace kong online; //将表空间设置为在线状态。
sql>alter database datafile 'd:\oracle\oradata\fox\kong.dbf' resize 50m;
sql>alter tablespace kong
add datafile 'd:\oracle\oradata\fox\konga.dbf' size 10m; //添加新的文件
10、移动数据文件:
ALTER TABLESPACE 表空间必须是离线的。目标物理数据文件必须存在。
sql> alter tablespace kong offline;
手动修改konga.dbf 改为 kong01.dbf
sql> alter tablespace kong rename datafile 'd:\oracle\oradata\fox\konga.dbf' to 'd:\oracle\oradata\fox\kong01.dbf'
【注意】sql> alter tablespace system offline; //数据字典内容是必须的,不能离线。
比较:ALTER DATABASE 数据库必须shutdown并且启动到mounted状态 ,目标数据文件必须存在。
ALTER DATABASE RENAME FILE '/u01/oradata/system01.dbf' TO '/u03/oradata/system01.dbf';
11、OMF(Oralce Managed Files): Oracle管理文件机制
sql>alter system set db_create_file_dest='d:\oracle\oralog';
sql>create tablespace omftb; //默认配置文件100MB
sql>drop tablespace omftb; //删除表空间,相应的配置文件也一起删除。
12、获得表空间信息:
表空间信息:DBA_TABLESPACES \V$TABLESPACE
数据文件信息:DBA_DATA_FILES\V$DATAFILE
临时文件信息:DBA_TEMP_FILES\V$TEMPFILE
sql>select * from dba_tablespaces;
sql>select * from v$tablespace;
sql>select * from v$datafile;
sql>select * from dba_data_files;