分享

Oracle学习笔记(6)表空间和数据文件

 忧郁_小刚 2011-05-20

表空间和数据文件

 

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;
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多