码迷,mamicode.com
首页 > 数据库 > 详细

5. Oracle 表空间与数据文件

时间:2018-03-21 16:29:20      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:oracle   ini   body   name   blocks   举例   日志   条件   mat   

转载自:http://blog.csdn.net/leshami/article/details/5611738

 

一、概念

表空间:是一个或多个数据文件的逻辑集合
表空间逻辑存储对象:永久段-->如表与索引
                    临时段-->如临时表数据与排序段
                    回滚段-->用于事物回滚或闪回内存的撤销数据
表空间分类:系统表空间(system、sysaux),非系统表空间

一个表空间至少包含一个数据文件,一个数据文件只能属于一个表空间。

不可或缺的几个表空间:
SYSTEM --->字典表空间,不能被损坏
UNDO    --->dml,dql把数据快照到此,数据提交即消失(用于恢复)
SYSAUX  --->10g 高并发系统繁忙时,会造成system争用,将工具放到SYSAUX,减轻system的压力,SYSAUX不影响系统(影响性能)
TEMP    --->临时数据相关的内容
USERS   --->10g  用户数据从system拨离出来

二、Oracle的存储结构

1.Schema: 用户--->创建相关对象、表、视图、序列、函数、存储过程、包等
2.逻辑结构:database数据库--->tablespace表空间---> segment段--->extent区间----> block块
            逻辑结构是Oracle内部管理数据库中对象的方式
3.物理结构:OS  block --->datafile 物理结构通常是一系列数据文件

4.举例描述scott用户创建对象的组织方式 
    
--查看scott用户的默认表空间及数据文件
SQL> select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where username = ‘SCOTT‘;

USERNAME                       DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
SCOTT                          USERS                          TEMP

SQL> col name format a50
SQL> select t1.name,t2.name   --查看表空间及数据文件
  2  from v$tablespace t1,v$datafile t2
  3  where t1.ts# = t2.ts#;

NAME                                               NAME
-------------------------------------------------- --------------------------------------------------
SYSTEM                                             /u01/app/oracle/oradata/orcl/system01.dbf
UNDOTBS1                                           /u01/app/oracle/oradata/orcl/undotbs01.dbf
SYSAUX                                             /u01/app/oracle/oradata/orcl/sysaux01.dbf
USERS                                              /u01/app/oracle/oradata/orcl/users01.dbf
EXAMPLE                                            /u01/app/oracle/oradata/orcl/example01.dbf


scott-->emp(table)-->数据定义(位于)-->system表空间
                  数据(位于)  -->user表空间(逻辑存储)-->表段-->区间-->内存块
                                                -->索引段等-->区间-->内存块
                            user表空间(物理存储)-->user01.dbf
                               -->采用本地管理,包含头部信息,可用、已用等位图信息
                               
当databuffer缓冲区满则调用dbwr进程将数据写入到物理文件当中

 三、创建表空间

--简要语法:
CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name
DATAFILE datafile spec | TEMPFILE tempfile spec
[MINIMUM EXTENT minimum extent size]
[BLOCKSIZE blocksize]
[[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]
[LOGGING|NOLOGGING]
[FORCE LOGGING]
[ONLINE|OFFLINE]
[EXTENT MANAGEMENT DICTIONARY |
LOCAL [AUTOALLOCATE|UNIFORM SIZE size]]
[SEGMENT SPACE MANAGEMENT MANUAL|AUTO]
[FLASHBACK ON|OFF]

--创建表空间的条件
1.具有create tablespace的权限,DBA角色具有该权限,sysdba,sysoper
2.创建的是bigfiel ,还是smallifle  超过T 级别应考虑bigfile
3.新建的表空间的I/O,是否会导致磁盘I/O不够用
4.datafile后跟的路径应该具备写的权限  */

--查看缺省是BIGFILE 还是SMALLFILE,当缺省为SMALLFILE,创建表空间不指定表空间类型则为SMALLFILE
SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAME like ‘%TBS%‘;

PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ --------------------------------------------------
DEFAULT_TBS_TYPE               SMALLFILE

--修改创建表空间为大或小表空间的默认值
SQL> alter database set default bigfile tablespace;
Database altered.

SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAME like ‘%TBS%‘;
PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ --------------------------------------------------
DEFAULT_TBS_TYPE               BIGFILE

--改回为缺省值
SQL> alter database set default smallfile tablespace;
Database altered.

--建议创建表空间时最好带上[BIGFILE | SMALLFILE]参数,以免参数设置导致创建了不合理的表空间

注意:
大表文件(bigfile)最大可以存放个T的容量。头文件的大小达到了G-->block,普通的头文件大小为M---->block。
	create bigfile tablespace <> datafile <>........;
好处:减少了数据文件的个数,管理方便,大的对象的存放得到了优化。减少了control文件的信息,控制文件定义了datafile的个数。
	bigfile只能存在一个数据文件,所以要保证分配的的磁盘具有足够的空间。
   
--演示创建表空间
SQL> create tablespace TBS1 datafile ‘/u01/app/oracle/oradata/orcl/tbs1.dbf‘ size 100m;

Tablespace created.

SQL> col name format a50       
SQL> select t1.name,t2.name from v$tablespace t1,v$datafile t2 where t1.ts# = t2.ts#;
NAME                                               NAME
-------------------------------------------------- --------------------------------------------------
SYSTEM                                             /u01/app/oracle/oradata/orcl/system01.dbf
UNDOTBS1                                           /u01/app/oracle/oradata/orcl/undotbs01.dbf
SYSAUX                                             /u01/app/oracle/oradata/orcl/sysaux01.dbf
USERS                                              /u01/app/oracle/oradata/orcl/users01.dbf
EXAMPLE                                            /u01/app/oracle/oradata/orcl/example01.dbf
TBS1                                               /u01/app/oracle/oradata/orcl/tbs1.dbf


创建临时表空间:
创建临时表空间,不能使用非标准数据块,另临时表空间不能存放永久对象。
CREATE TMEPORARY TABLESPACE tablespace_name TEMPFILE ‘...‘ SIZE n 

CREATE TEMPORARY TABLESPACE T2 TEMPFILE ‘/opt/oracle/oradata/orcl/t2.dbf‘  size 100m;

临时表空间具有以下特征:
   临时数据文件不能置为只读
   临时数据文件不能重命名
   监时数据文件的日志方式总是NOLOGGING
   
临时表空间扩容:*/
--(1)重置临时文件大小 
    alter database tempfile ‘/opt/oracle/oradata/orcl/t2.dbf‘ resize 150m;

--(2)让临时文件能自动扩展
   alter database  tempfile ‘/opt/oracle/oradata/orcl/t2.dbf‘ autoextend on next 10m maxsize 50m;

--(3)增加临时文件
   alter tablespace t2 add tempfile ‘/disk8/oracle/t2b.dbf‘ size 50m;

--查看临时文件
   select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)" from dba_temp_files;

--默认临时表空间:
    select * from database_properties;

--修改默认临时表空间:
   ALTER DATABASE DEFAULT TEMPORARY TABLESPACE T2;
   /*
    默认临时表空间最好要指定一下,如果没有指定默认的临时表空间,那么将使用system表空间作为排序区

   默认临时表空间有一定的限制:
       默认临时表空间不能删除
       默认临时表空间不能脱机
       

获得创建表空间的语句:*/
   SELECT dbms_metadata.get_ddl(‘TABLESPACE‘,‘SYSTEM‘) FROM dual;

/*
临时表空间组:
   10G引入的,是一组临时表空间,只能由临时表空间组成。组名不能与临时表空间同名
   临时表空间不能显示的创建和删除,当把第一个临时表空间分配给某个临时表空间组的时候,自动创建
   临时表空间组,将最后一个临时表空间,删除时,组也将自动删除。


创建临时表空间组:
   1、创建临时表空间的时候 */
    CREATE TEMPORARY TABLESPACE tablespace_name TEMPFILE ‘...‘ SIZE n TABLESPACE GROUP group_name;

    ALTER TABLESPACE tablespace_name TABLESPACE GROUP group_name;
    ALTER TABLESPACE T3 TABLESPACE GROUP TEMP_GRP;

--查看临时表空间组的信息:
   dba_tablespace_groups

   SELECT * FROM DBA_TABLESPACE_GROUPS;

--将临时表空间组成员移除:
   ALTER TABLESPACE tablespace_name TABLESPACE GROUP ‘‘;

--可将系统默认的临时表空间设为临时表空间组:
   ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name;

--删除临时表空间:
   --将所有成员全移出去,便自动删除

--创建UNDO表空间(还原表空间):
/*
创建语法:*/
CREATE UNDO TABLESPACE tablespace_name DATAFILE ‘...‘ SIZE n

SQL> CREATE UNDO TABLESPACE undo2 DATAFILE ‘/opt/oracle/oradata/orcl/undo2_01.dbf‘ SIZE 200M, ‘/opt/oracle/oradata/orcl/undo2_02.dbf‘ size 100m;

--修改当前系统的UNDO表空间: ALTER SYSTEM SET UNDO_TABLESPACE=tablespace_name


UNDO表空间扩容:
()重置DATAFILE大小
()让DATAFILE能AUTOEXTEND
()添加数据文件

删除UNDO表空间: DROP TABLESPACE tablespace_name
注:当前的UNDO表空间不能删除 ,系统只能使用一个UNDO表空间

--创建表空间的详细语法:http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_7003.htm#SQLRF01403

 

5. Oracle 表空间与数据文件

标签:oracle   ini   body   name   blocks   举例   日志   条件   mat   

原文地址:https://www.cnblogs.com/llill/p/8086538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!