ITPub博客

首页 > 数据库 > Oracle > oracle表空间详解

oracle表空间详解

原创 Oracle 作者:lllllcheng 时间:2015-12-14 23:01:47 0 删除 编辑
一
1.系统表空间
system表空间是oracle数据库最重要的 一个表空间,存放了一些DDL语言产生的信息以及PL/SQL包,视图,函数,过程等,称之为数据字典,因此该表空间也具有其特殊性。
system表空间特性
!不能脱机offline
!不能置为只读read  only
!不能重命名
!不能删除


2.辅助表空间
sysaux表空间是作为system表空间的辅助表空间。使用独立表空间或系统表空间的数据库组件在sysaux表空间中创建,通过分离这些组件和功能,system表空间的负荷得以减轻,反复创建一些相关对象及组件引起system表空间的碎片问题得以避免。sysaux表空间不可用,数据库核心功能将保持有效;使用sysaux表空间的特点将会失败或功能受限。
!不能删除
!不能重命名
!不能置为read only


3临时表空间
temp临时表空间主要用来做查询和存放一些缓冲区数据,临时表空间消耗的主要原因是需要对查询的中间结果进行排序。重启数据库可以释放临时表空间,如果不能重启实例,而一直保持sql语句的执行,temp表空间会一直增长。直到耗尽磁盘空间。
临时表空间的主要作用
:索引create或rebuild
:Order by或group  by
:Distinct操作
:Union或intersect或minus
:Sort-merge joins
:analyze
使用原理 :在oracle数据库中进行排序,分组汇总,索引等时,会产生很多的临时数据,通常情况下,oracle数据库会将这些临时数据存放到内存的PGA内。在这个程序全局区中有一个叫做排序区的地方,专门用来存放这些因为排序操作而产生的临时数据。但这个分区的容量是有限的。当这个分区的大小不足以容纳排序后所产生的记录时,数据库系统就会将临时数据存放到临时表空间中。这就是临时表空间的来历。


4.撤销表空间
用于保存oracle数据库撤销信息,即保存用户回滚段的表空间称之为回滚表空间(或简称为撤销表空间(undo tablespace))。



二:表空间管理方式

本地管理表空间和字典管理表空间数据字典管理和本地管理方式

在表空间中区是最小的空间分配单位,对表空间的管理是以区为单位进行的。根据管理方式的不同,表空间分为本地管理表空间和字典管理表空间;

本地管理方式的表空间:在表空间内通过位图管理区。在本地管理的表空间中,每个数据文件内都维护一个位图,以了解该数据文件内块的空闲或使用状态。位图中的每个位对应于一个快或一组快。其特点是分配了的某个区或释放的某个区可被重新使用时,oracle服务器更改位图值以显示快的新状态。因为表空间的存储管理信息保存在表空间的数据文件的头部,而不是保存在表空间外部的数据字典中,所以被称为本地管理方式。从orale9i开始,在本地管理已成为默认设置。

字典管理的表空间:由数据字典管理区。数据字典的信息存储在system表空间中,oracle服务器将在分配或回收区时更新数据字典中对应的表。字典管理的表空间内的段可具有自定义的存储设置,因此每个段都可以有不同的存储字句,但是需要手动合并空闲区。这比本地管理的表空间更灵活,但效率要低得多。

由于本地管理表空间是采用位图对区进行管理的,相对于字典管理有如下优点:
:本地管理可以避免循环空间管理操作。在字典管理表空间上分配和释放区会导致访问回滚段和数据字典基表,而在 本地管理表空间上的分配和释放区只需要修改其数据文件对应的位图值。
:由于本地管理的表空间在数据字典中不记录空闲空间,从而减少了对数据字典的争用。
:区的本地管理可自动跟踪并合并邻近的空闲空间,因而无须合并空闲区,而字典管理表空间则可能需要手工合并空间碎片。
:本地管理的区大小可由系统自动确定。
:对区的位图更改不会生成undo信息,因为它们不更新数据字典中的表(表空间限额信息等特殊情况除外)。



三.创建表空间
1.
参数说明如下:
datafile:用于指定表空间所对应的数据文件。
size:用于指定数据文件的尺寸
extent  management  dictionary:表空间中区的管理方式为字典管理方式。
default  storage:用于指定默认存储参数设置。当设置默认存储参数时,系统会自动使用system表空间的存储参数设置。
initial:用于指定为数据对象所分配的第一个区的大小。
next:用于指定为数据库对象所分配的第二个区的大小。
minextents:用于指定为数据库对象所分配的最少区个数。
maxextents:用于指定为数据库对象所分配的最多区个数。
pctincrease:用于指定从第三个区开始,每个区比前一个区所增长的百分比,区尺寸的计算公式如下:Size=NEXT *(1+PCIINCREASE/100)(n-2)
其中,n表示第n个区,除了第一个区和第二个区以为,其他尺寸会自动转变为DB_BLOCK_SIZE是整数倍。

2.本地管理表空间中的段空间管理

用户使用create  tablespace语句创建一个本地管理的表空间(locally  managed  tablespace)时,可以使用segment  space  management子句来设定段(segment)内的可用/已用空间如何管理,可选的方式有:
auto
在这种设置下,oracle使用位图(bitmap)管理段内的可用空间。[注意,此处的位图与本地管理的表空间使用的位图不一样]此处的位图用于描述段内每个数据块(data  block)是否有足够的可用空间来插入(insert)新数据。随着一个数据块中可用空间的变化,她的状态也被及时地反映到位图中,oracle使用位图可以更自动化地管理段内的可用空间。这种空间管理形式被称为自动段空间管理(automatic  segment-space  management)。
一个本地管理的(locally  managed),且使用自动段空间管理的表空间,既可以被创建为小文件表空间(传统的)(smallfile  tablespace),也可以被创建为大文件表空间(bigfile  tablespace)。在创建本地管理的表空间时,自动段空间管理是默认值。
manual
在这种设置下,oracle使用可用块列表(free  list)来管理段内的可用空间。可用快列表记录了所有可以被用于插于新数据的数据快。



四.表空间操作

重置数据文件的大小
alter database  datafile  ‘...'    resize  xx

使用alter  tablespace命令给表空间添加新的数据文件

使用下列sql名令启用数据文件的自动扩展调整大小:
.create  tablespace
.alter tablespace

创建表空间cheng并设置为自动扩展
[oracle@PROD1 ~]$ sqlplus / as sysdba
SQL> create tablespace cheng datafile '/u01/app/oracle/oradata/PROD1/cheng.dbf' size 5m autoextend on next 1m maxsize 10m;


Tablespace created.
查询dba_data_files视图是否启用autoextend;
SQL> select tablespace_name,autoextensible from dba_data_files where tablespace_name='CHENG';


TABLESPACE_NAME                AUT
------------------------------ ---
CHENG                          YES

说明可以在创建数据库时指定数据文件的自动扩展属性,参数说明如下;
autoextend  off:禁用数据文件的自动扩展
autoextend  on:启用数据文件的自动扩展
next:自动扩展时每次分配给数据文件的磁盘空间
maxsize:指定允许分配给该数据文件的最大磁盘空间
unlimited:将分配给数据文件的磁盘空间设为不受限

修改表空间cheng1的数据文件为自动扩展。
SQL> select tablespace_name,autoextensible from dba_data_files where tablespace_name='CHENG1';


TABLESPACE_NAME                AUT
------------------------------ ---
CHENG1                         NO


SQL> alter database datafile '/u01/app/oracle/oradata/PROD1/cheng01.dbf' autoextend on;


Database altered.


SQL> select tablespace_name,autoextensible from dba_data_files where tablespace_name='CHENG1';


TABLESPACE_NAME                AUT
------------------------------ ---
CHENG1                         YES
如果想禁用文件的自动扩展属性,只要将on改为off就可以了。默认情况下,表空间不允许自动扩展的。


为表空间增加数据文件
可以通过alter tablespace  add  datafile命令,向表空间添加数据文件以增加分配给表空间的磁盘空间容量,命令格式如下
alter  tablespace  tablespace_name add  datafile  filespec [autoextend_clause]
为表空间cheng1添加一个数据文件,大小为5MB.
SQL> alter tablespace cheng1 add datafile '/u01/app/oracle/oradata/PROD1/cheng02.dbf' size 5m;


Tablespace altered.


SQL> select file_name from dba_data_files where tablespace_name ='CHENG1';


FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/PROD1/cheng01.dbf
/u01/app/oracle/oradata/PROD1/cheng02.dbf


手工修改数据文件的大小
alter database[database] datafile ‘filename’[,‘filename']... resize  integer[K|M]
将cheng1表空间中数据文件的大小改为10m;
SQL> alter database datafile '/u01/app/oracle/oradata/PROD1/cheng01.dbf' resize 10m;
SQL> select bytes from dba_data_files where tablespace_name='CHENG1';


     BYTES
----------
  10485760
   5242880


2.修改表空间读写属性

当表空间用于存放静态数据时,因为不会对这些数据进行修改操作,所以可以将这些数据存放到只读设备上,列存放光盘上,为了将表空间放到只读设备上,必须将其转变为只读状态。下面的命令将表空间改为只读模式
alter  tablespace  [tablespce]  read  only;
执行这条命令时,与该表空间相关的所有事物会自动回滚,过渡状态期间不允许再对该表空间进行任何写入操作。当所有事物处理提交或者回退后,只读命令完成,该表空间置于只读模式。

将表空间cheng1改为只读状态,验证是否能插入数据,能否删除表。
SQL>  create table chen (name varchar(5)) tablespace cheng1;


Table created.


SQL> alter tablespace cheng1 read only;


Tablespace altered.

SQL> insert into chen values ('chen');
insert into chen values ('chen')
            *
ERROR at line 1:
ORA-00372: file 7 cannot be modified at this time
ORA-01110: data file 7: '/u01/app/oracle/oradata/PROD1/cheng01.dbf'

删除表chen;
SQL> drop table chen;


Table dropped.
将表空间cheng1改为只读状态。此时用户将只能在该表空间的对象上执行查询操作(select),而不能执行DML或DDL操作。但要注意,有一中DDL操作列外,可以执行DROP TABLE或DROP  INDEX删除该表空间上的索引,因为这些命令只影响数据字典(数据字典位于system表空间)。是因为drop命令只跟新数据字典。而不更新只读表空间上的物理文件。对于本地管理的表空间,删除的段将改为临时段以避免跟新位图。将表空间设为只读状态之前,将会引发对表空间的数据文件执行检查点操作。

将cheng1表空间更改为读写状态,验证是否能够创建表。
SQL> alter tablespace cheng1 read write;


Tablespace altered.


SQL> create table chen (name varchar(5));


Table created.


SQL> insert into chen values ('cheng');


1 row created.
在这里建表操作成功,也说明上一实例在只读状态下对表的删除是成功的


3.修改表空间的online/offline属性
当表空间处于联机状态时,用户可以访问其中的数据。当某一表空间处于脱机状态时,用户无法访问它的数据,但是允许正常访问数据库的其余处于联机的表空间。以下几种情况下数据库管理员可以让表空间脱机:
.执行脱机表空间备份(尽管表空间可以在联机时备份)
.在数据库打开时恢复表空间或数据文件
.在数据库打开时移动数据文件
可以使用以下命令对表空间进行脱机和联机操作。
alter  tablespace  tablespace  [online|offline|normal|temporary|immediate|for  recovery]
其中
normal;将该表空间中所有数据文件内的所有快从SGA中写入数据文件并将数据文件关闭。这是缺省设置。在世使该表空间重新联机之前,无须对其执行介质恢复。尽可能使用normal字句
for recover:使表空间脱机以进行时间点恢复。

将数据文件/u01/app/oracle/oradata/PROD1/cheng01.dbf改为脱机状态,然后再改为联机状态。
SQL> alter database datafile '/u01/app/oracle/oradata/PROD1/cheng01.dbf' offline;


Database altered.


SQL> recover datafile 7;
Media recovery complete.
SQL> alter database datafile '/u01/app/oracle/oradata/PROD1/cheng01.dbf' online;


Database altered.


五.数据文件的移动
为了防止数据丢失和减少I/冲突,提高I/O性能,应该将数据文件尽可能分布到不同的磁盘上,并且尽可能均衡不同磁盘之间的I/O操作。移动数据文件有2种方法,一种方法是使用alter  tablespace命令,另一种方法
是使用alter  database命令,具体采用哪种方法取决于表空间类型。
1.使用alter tablespace命令
使用alter  tablespce命令格式如下:
alter tablespace  tablespacce  rename  datafile  ‘filename’[,‘filename’]... to  ‘filename’[,'filename']..
它仅适用于不含活动还原段或临时段的非system表空间中的数据文件的移动。源文件名必须与存储在控制文件内的名称匹配,表空间必须脱机,并且
to字句后的目标数据文件必须存在。
alter tablespace命令重命名数据文件的步骤:
.使表空间脱机。
.使用操作系统命令移动或复制文件。
.执行alter tablespace rename datafile命令。
.使表空间联机。
.必要时使用操作系统命令删除原来的数据文件。
将表空间cheng1的第一个数据文件移动到/u01/app/目录下
SQL> alter tablespace cheng1 offline;


Tablespace altered.


[oracle@PROD1 ~]$ cd /u01/app/oracle/oradata/PROD1/
[oracle@PROD1 PROD1]$ ls
cheng01.dbf  control01.ctl  example01.dbf  redo03.log    temp01.dbf
cheng02.dbf  control02.ctl  redo01.log     sysaux01.dbf  undotbs01.dbf
cheng.dbf    control03.ctl  redo02.log     system01.dbf  users01.dbf
[oracle@PROD1 PROD1]$ mv cheng01.dbf   /u01/app/cheng01.dbf
[oracle@PROD1 PROD1]$ ls
cheng02.dbf    control02.ctl  redo01.log  sysaux01.dbf  undotbs01.dbf
cheng.dbf      control03.ctl  redo02.log  system01.dbf  users01.dbf
control01.ctl  example01.dbf  redo03.log  temp01.dbf
[oracle@PROD1 PROD1]$ cd /u01/app/
[oracle@PROD1 app]$ ls
cheng01.dbf  oracle
[oracle@PROD1 app]$ sqlplus / as sysdba


SQL*Plus: Release 11.2.0.4.0 Production on Mon Dec 14 21:30:51 2015


Copyright (c) 1982, 2013, Oracle.  All rights reserved.




Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


SQL> alter tablespace cheng1 rename datafile '/u01/app/oracle/oradata/PROD1/cheng01.dbf' to '/u01/app/cheng01.dbf';


Tablespace altered.


SQL> alter tablespace cheng1 online;


Tablespace altered.


SQL> select file_name from dba_data_files where tablespace_name='CHENG1';


FILE_NAME
--------------------------------------------------------------------------------
/u01/app/cheng01.dbf
/u01/app/oracle/oradata/PROD1/cheng02.dbf

说明:必要时使用操作系统命令删除原来的数据文件。

2.使用alter database命令
alter database 命令可以用来移动任意类型的数据文件,但是数据库必须处于mount状态,且目标数据文件必须存在。步骤如下:
.关闭数据库
.使用操作系统命令移动数据文件。
.startup mount状态
.执行alter database  rename file命令
.打开数据库。

将表空间cheng1的cheng02.dbf移动到/u01/app/oracle目录下。

[oracle@PROD1 ~]$ sqlplus / as sysdba

SQL> shutdown normal;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@PROD1 ~]$ cd /u01/app/oracle/oradata/PROD1/
[oracle@PROD1 PROD1]$ ls
cheng02.dbf    control02.ctl  redo01.log  sysaux01.dbf  undotbs01.dbf
cheng.dbf      control03.ctl  redo02.log  system01.dbf  users01.dbf
control01.ctl  example01.dbf  redo03.log  temp01.dbf
[oracle@PROD1 PROD1]$ mv cheng02.dbf  /u01/app/
[oracle@PROD1 PROD1]$ cd /u01/app
[oracle@PROD1 app]$ ls
cheng01.dbf  cheng02.dbf  oracle
[oracle@PROD1 app]$ sqlplus  / as sysdba

Connected to an idle instance.

SQL> startup mount;
ORACLE instance started.


Total System Global Area  714014720 bytes
Fixed Size                  2256672 bytes
Variable Size             251658464 bytes
Database Buffers          457179136 bytes
Redo Buffers                2920448 bytes
Database mounted.

SQL> alter database rename file '/u01/app/oracle/oradata/PROD1/cheng02.dbf' to '/u01/app/cheng02.dbf';


Database altered.


SQL> alter database open;


Database altered.


SQL>  select file_name from dba_data_files where tablespace_name='CHENG1';


FILE_NAME
--------------------------------------------------------------------------------
/u01/app/cheng01.dbf
/u01/app/cheng02.dbf

六.删除表空间
格式如下;
drop tablespace tablespace
[including contents[and datafiles][cascade constraints]]
including contents:删除表空间内的所有段
and datafiles:删除关联的操作系统文件
cascade constraints:如果要删除的表空间之外的表引用了该表空间内表的主键和唯一键,则删除这种引用完整性约束。


删除表空间cheng1,查看出现什么现象。


[oracle@PROD1 app]$ sqlplus / as sysdba

SQL> create tablespace cheng1 datafile '/u01/app/cheng01.dbf' size 28m;


Tablespace created.


SQL> create table chengzhuo tablespace cheng1 as select * from dba_data_files;


Table created.


SQL> drop tablespace cheng1;
drop tablespace cheng1
*
ERROR at line 1:
ORA-01549: tablespace not empty, use INCLUDING CONTENTS option


SQL> drop tablespace cheng1 including contents;


Tablespace dropped.


SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@PROD1 app]$ ls
cheng01.dbf  oracle
[oracle@PROD1 app]$ rm -f cheng01.dbf 
[oracle@PROD1 app]$ ls
oracle


[oracle@PROD1 app]$ sqlplus / as sysdba

SQL> create tablespace cheng1 datafile '/u01/app/cheng01.dbf' size 5m;


Tablespace created.

SQL> drop tablespace cheng1 including contents and datafiles;


Tablespace dropped.


SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@PROD1 app]$ ls
oracle


表空间cheng1中包含一个段,因此必须带including contents字句,即删除表空间的同时删除表空格中的对象,加上and datafiles字句可以删除表空间
的数据文件。

使用drop tablespace命令须遵守如下规则

.如果表空间中包含数据段,必须使用including contents选项。当表空间包含许多对象时,该选项可可能会产生许多undo字句。
.删除表空间后,其数据不再包含在数据库内。
.在删除表空间时,只删除关联控制文件内的文件指针。操作系统文件任然存在,如果未使用and  datafiles字句或数据文件是OMF,则必须使用适当的操作系统命令明确删除这些文件。
.即使表空间切换到只读状态,仍可以删除该表空间以及其中的段。







来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30606744/viewspace-1872302/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 11g手工建库
下一篇: linux下配置IP地址
请登录后发表评论 登录
全部评论

注册时间:2015-12-02

  • 博文量
    41
  • 访问量
    133252