Oracle数据库笔记--表空间[Oracle防范]
本文“Oracle数据库笔记--表空间[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在前面学习Oracle数据库底子架构时,已经理解了Oracle的存储构造,逻辑上,Oracle的数据存放在tablespaces中,物理上存放在datafiles中.一个tablespace只能属于一个数据库(一个数据库可包含多个tablespace),包含了1个或多个数据文件.Tablespace可进一步分为segments、extents和blocks.一个datafile只属于一个数据库的一个tablespace.
Tablespace的分类有2种,一种分为SYSTEM tablespace和Non-SYSTEM tablespace.
SYSTEM tablespace是随数据库的成立而成立的,包含了数据字典和SYSTEM undo segment;Non-SYSTEM tablespace包含了分配给用户的空间便于数据库的空间管理.
另一种分为permanent、undo、temporary三种tablespace.普通不加分外阐明时所成立的permanent tablespace,保存永久性对象;undo tablespace用于保存undo segments以便于回滚操作,而不能包含其他对象;temporary tablespace是用于举行排序操作,可以被多个用户同享,不能包含永久性对象.
Temporary tablespace中有一个default temporary tablespace,指定了一个全局的默许暂时表空间,假如没有这个表空间,默许情形下,是利用SYSTEM tablespace来存储暂时数据的,明显,这是不好的,默许暂时表空间只有一个,可以从表database_properties中查看default temp tablespace,在新的default temp tablespace被成立之前,是不能被dropped的.
和tablespace以及datafile相关的数据字典有:dba_tablespaces、v$tablespace、dba_data_files、v$datafile、dba_temp_files、v$tempfile.
1、成立表空间
成立表空间的完好号令:
Create [undo] tablespace
datafile
mininum extent
blocksize
logging clause
force logging
default storage_clause
online | offline
permanent | temporary
extent_manager_clause
segment_manager_clause
1)、undo指定系统将成立一个回滚表空间
2)、tablespace指定表空间名称
3)、datafile指定数据文件的途径、名称、大小及自增长情况:具体形如'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' size 50M autoextend on next 10M maxsize 500M,也可以指定on为off,就没有背面的递增和最大尺寸了,也可以在maxsize背面指定最大尺寸unlimited阐明表空间无限大.
4)、mininum extent
5)、blocksize
6)、logging cluse指导这个表空间上全部用户对象的日记属性,缺省是logging;
7)、force logging指导表空间进入强迫日记情势.此时系统将记录表空间上对象的全部改变,除了暂时段的改变.这个参数高于logging参数中的nologging选项;
8)、default storage_clause声明缺省的存储子句;
9)、online|offline指定表空间状况;
10)、permanent | temporary指出表空间的属性,是永久表空间还是暂时表空间.永久表空间存放的是永久对象,暂时表空间存放的是session生命期中存在的暂时对象.这个参数生成的暂时表空间成立后一向都是字典管理,不能利用extent management local选项.假如要成立本地管理表空间,必须利用create temporary tablespace.声明了这个参数就不能声明block size.
11)、extent_manager_clause阐明表空间若何管理extent.一旦声明了这个子句,就只能通过移植的方法改变这些参数.假如但愿表空间本地管理的话,声明local选项.本地管理表空间是通过位图管理的.Autoallocate阐明表空间自动分配extent,用户不能指定extent的大小.只有9.0以上的版本具有这个功效.Uniform阐明表空间的范围的固定大小,缺省是1M.不能将本地管理的数据库的SYSTEM表空间设置成字典管理.ORACE举荐利用本地管理表空间.假如没有设置这个子句,oracle会举行默许设置.假如初始化参数compatible小于9.0.0,那么系统成立字典管理表空间,假如大于9.0.0,那么按以下设置:
假如没有指定default storage_clause,oracle成立一个自动分配的本地管理表空间;不然假如指定了mininum extent,那么oracle判断mininum extent、initial、next能否相等,以及pctincrease能否为0,假如满意这2个条件,oracle妒忌昂就一个本地管理表空间,extent size是initial,假如不满意,那么oracle将成立一个自动分配的本地管理表空间;假如没有指定mininum extent,那么oracle判断initial和next能否相等,以及pctincrease能否为0,假如满意这2个条件,那么oracle成立一个本地管理表空间并拟定uniform,不然oracle将成立一个自动分配的本地管理表空间.(本地管理表空间只能存储永久对象.假如你声明了local,则不能声明default storage_clause,mininum extent,temporary);
12)、segment_management_clause : segment space management auto.
2、表空间的状况:
Tablespace的状况有3种:ONLINE、OFFLINE、READ ONLY.ONLINE是正常工作的状况,OFFLINE状况下,是不答应拜候数据的,SYSTEM tablespace和DEFAULT temp tablespace是不能被OFFLINE的,且带有active undo segments的tablespace也不能被OFFLINE.切换ONLINE和OFFLINE状况的号令是alter tablespace
3、表空间的存储设置
改正tablespace和datafiles的存储设置.这项工作是指改正tablespace的大小和datafile的存放位置.
在改正tablespace的大小之前,我们需求先知道tablespac的当前存储情形.可以用下面的SQL语句实现:
SELECT a.tablespace_name,
a.bytes bytes_used,
b.largest,
round(((a.bytes - b.bytes) / a.bytes)*100, 2) percent_used
FROM
(SELECT tablespace_name,
SUM(bytes) bytes
FROM Dba_Data_Files
GROUP BY tablespace_name) a,
(SELECT tablespace_name,
SUM(bytes) bytes,
MAX(bytes) largest
FROM dba_free_space
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC;
上面这条SQL语句中,有2条子查询,第一条获得的是表空间的总字节数,第二条获得的是表空间中余下的字节数,终究得到的后果是已经利用的字节数和百分比.
改正tablespace的大小,主如果通过datafile的大小来实现的,改正datafile的大小又有3种办法:1)、使数据文件自增长;2)、改变数据文件大小;3)、增添数据文件.
使数据文件自增长:表DBA_DATA_FILES中有一个字段AUTOEXTENSIBLE与这个办法对应,它指导数据文件能否自增长,也就是数据文件不能满意存储需求时,能否自动增添大小来满意需求.先运行下列号令成立一个datafile大小为5M的表空间—TEST:create tablespace test datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' size 5M;这个时刻,AUTOEXTENSIBLE是NO,也就是数据文件的大小是固定的,不会自增长(当然,我们也可以在成立号令中加入指令设置自增长).下面我们手动来改正数据文件为自增长:alter database datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' autoextend on next 5M maxsize 50M;这条号令将TEST.DBF数据文件设置为按5M大小举行自增长,最大为50M.
改变数据文件大小:从前面的数据文件为例,我想将数据文件设置为100M大小,可以履行号令:alter database datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' resize 100M;
增添数据文件:这应当是最好的一种方法,便于管理.以TEST表空间为例,增添数据文件的号令以下:alter tablespace test add datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST01.DBF' size 5M autoextend on next 5M maxsize 50M;这条号令就直接指定了数据文件自增长.
除了改正表空间的大小,存储设置中还可以举行的一项工作就是移动数据文件.移动数据文件有2种办法,一种是利用alter tablespace号令,一种是利用alter database号令.
利用alter tablespace移动数据文件前,需求先将表空间OFFLINE,然后目标数据文件必须存在(也就是将需求移动的数据文件复制到目的地).以将数据文件TEST01.DBF移动到上一层目录为例.先履行号令:alter tablespace test offline;然后将TEST01.DBF复制到上一级目录,再履行号令:alter tablespace test rename datafile E:\oracle\product\10.2.0\oradata\orcl\TEST01.DBF' to 'E:\oracle\product\10.2.0\oradata\TEST01.DBF';然后再将表空间ONLINE便可以了:alter tablespace test online;.
利用alter database移动数据文件时,一样,目标数据文件必须存在(原文件的副本),且数据库需求处于MOUNTED状况.第一种办法,已经将数据文件移动到了父一级目录,下面再将它移回来.先关闭数据库:shutdown immediate;然后启动数据库,启动选项为mount:startup mount;然后履行移动号令:alter database rename file 'E:\oracle\product\10.2.0\oradata\TEST01.DBF' to 'E:\oracle\product\10.2.0\oradata\orcl\TEST01.DBF';再翻开数据库:alter database open,报错了:
ORA-01113:文件7需求介质恢复
ORA-01110:数据文件7:’E:ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF’,细节还不懂得,只知道数据库认为这个数据文件收到破坏,需求利用备份、日记信息来恢复.这本来是个对比严重的问题,但是在这个实例中,还是很好办理的,履行号令:
recover datafile ’E:ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF’.提醒完成介质恢复,再翻开数据库:alter database open;一切就正常了.
4、删除表空间
删除表空间,利用号令drop tablespace
INCLUDING CONTENTS:指导删除表空间中的segments;
INCLUDING CONTENTS AND DATAFILES:指导删除segments和datafiles;
CASCADE CONSTRAINTS:删除全部与该空间相关的完好性约束条件.
Drop tablespace test INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
需求注意的是SYSTEM表空间以及具有active segments的表空间是无法删除的.
以上是“Oracle数据库笔记--表空间[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |