首页 Oracle表空间和数据文件的管理

Oracle表空间和数据文件的管理

举报
开通vip

Oracle表空间和数据文件的管理第六章 表空间和数据文件的管理6.1Oracle引入逻辑结构的目的Oracle数据库管理系统并没有像不少其它数据库管理系统那样直接地操作数据文件,而是引入一组逻辑结构。如图6-1所示。图6-1图6-1的虚线左边为逻辑结构,右边为物理结构。与计算机原理或计算机操作系统中所讲的有些不同,在Oracle数据库中,逻辑结构为Oracle引入的结构,而物理结构为操作系统所拥有的结构。曾有不少学生问过我同样的一个问题,那就是Oracle为什么要引入逻辑结构呢?首先可能是为了增加Oracle的可移植性。Oracle公司声称它的O...

Oracle表空间和数据文件的管理
第六章 表空间和数据文件的管理6.1Oracle引入逻辑结构的目的Oracle数据库管理系统并没有像不少其它数据库管理系统那样直接地操作数据文件,而是引入一组逻辑结构。如图6-1所示。图6-1图6-1的虚线左边为逻辑结构,右边为物理结构。与计算机原理或计算机操作系统中所讲的有些不同,在Oracle数据库中,逻辑结构为Oracle引入的结构,而物理结构为操作系统所拥有的结构。曾有不少学生问过我同样的一个问题,那就是Oracle为什么要引入逻辑结构呢?首先可能是为了增加Oracle的可移植性。Oracle公司声称它的Oracle数据库是与IT平台无关的,即在某一厂家的某个操作系统上开发的Oracle数据库(包括应用程序等)可以几乎不加修改地移植到另一厂家的另外的操作系统上。要做到这一点就不能直接操作数据文件,因为数据文件是跟操作系统相关的。其次可能是为了减少Oracle从业人员学习的难度。因为有了逻辑结构Oracle的从业人员就可以只对逻辑结构进行操作,而在所有的IT平台上逻辑结构的操作都几乎完全相同,至于从逻辑结构到物理结构的映射(转换)是由Oracle数据库管理系统来完成的。6.2Oracle数据库中存储结构之间的关系其实图6-1类似于一个Oracle数据库的存储结构之间关系的实体-关系图。如果读者学过实体-关系模型(E-R模型)的话,从图6-1中可以很容易地得到Oracle数据库中存储结构之间的关系。为了帮助那些没有学过E-R模型的读者理解图6-1,也是为了帮助那些学过但已经忘的差不多了的读者恢复一下记忆,在下面对E-R模型和图6-1给出一些简单的解释。在图6-1中,园角型方框为实体,实线表示关系,单线表示一的关系,三条线(鹰爪)表示多的关系。于是可以得到:每个数据库是由一个或多个表空间所组成(至少一个)。每个表空间基于一个或多个操作系统的数据文件(至少一个)。每个表空间中可以存放有零个或多个段(Segment)。每个段是由一个或多个区段(Extent)所组成。每个区段是由一个或多个连续的Oracle数据块所组成。每个Oracle数据块是由一个或多个连续的操作系统数据块所组成。每个操作系统数据文件是由一个或多个区段(Extent)所组成。每个操作系统数据文件是由一个或多个操作系统数据块所组成。有关段,区段,和Oracle数据块等我们在接下来的章节中要详细地介绍。6.3表空间和数据文件之间的关系及表空间的分类通过前面的讨论可知:Oracle将数据逻辑地存放在表空间里,而物理地存放在数据文件里。表空间(Tablespaces)在任何一个时刻只能属于一个数据库,但是反过来并不成立,因为一个数据库一般都有多个表空间。每个表空间都是由一个或多个操作系统的数据文件所组成,但是一个操作系统的数据文件只能属于一个表空间。表空间可以被进一步划分成一些更小的逻辑存储单位。在一个Oracle数据库中,每个数据文件(Datafiles)可以而且只能属于一个表空间和一个数据库。数据文件实际上是存储模式对象数据的一个容器/仓库。在一个Oracle数据库中一般有两类表空间,他们是系统(SYSTEM)表空间和非系统(Non-SYSTEM)表空间。系统(SYSTEM)表空间是与数据库一起建立的,在系统表空间中存有数据字典,在系统表空间中还包含了系统还原(回滚)段。虽然在系统表空间中可以存放用户数据,但考虑到Oracle系统的效率和管理上的方便,在系统表空间上不应该存放任何用户数据。非系统(Non-SYSTEM)表空间可以由数据库管理员创建,在非系统表空间中存储一些单独的段,这些段可以是用户的数据段,索引段,还原段,和临时段等。引入非系统表空间可以方便磁盘空间的管理,也可以更好地控制分配给用户磁盘空间的数量。引入非系统表空间还可以将静态数据和动态数据有效地分开,也可以按照备份的 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 将数据分开存放。使用如下的命令创建一个非系统表空间:CREATETABLESPACE表空间名[DATAFILE子句][MINIMUMEXTENT正整数[K|M]][BLOCKSIZE正整数[K]][LOGGING|NOLOGGING][DEFAULT存储子句][ONLINE|OFFLINE][PERMANENT|TEMPORARY][区段管理子句][段管理子句]在这里对以上命令中的一些子句和选项给出进一步的解释:表空间名:所要创建的表空间名。DATAFILE子句:组成所要创建的表空间的文件说明。MINIMUMEXTENT:表空间中所使用的每个EXTENT都必须是该参数所指定数的整数倍。BLOCKSIZE:为该表空间说明非 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 块的大小。在使用这一子句之前,您必须先设置DB_CACHE_SIZE参数和DB_nK_CACHE_SIZE参数,而且该子句中所说明的正整数一定与DB_nK_CACHE_SIZE参数的设定相对应。LOGGING:说明在该表空间中所有数据的变化都将写入重做日志文件中,这也是默认方式。NOLOGGING:说明在该表空间中所有数据的变化不都写入重做日志文件中,NOLOGGING只影响一些DML和DDL命令。DEFAULT存储子句:说明所有在该表空间中所创建的对象的默认存储参数。OFFLINE:说明该表空间在创建后立即被置为脱机,即不能使用。还有一些其它的子句和选项我们将在后续的章节中陆续地介绍。6.4表空间中的磁盘空间管理在Oracle8.0和更早的版本中所有表空间中的磁盘空间管理都是由数据字典来管理的。在这种表空间的管理方法中所有的空闲区由数据字典来统一管理。每当区段被分配或收回时,Oracle服务器将修改数据字典中相应的(系统)表。在数据字典(系统)管理的表空间中所有的EXTENTS的管理都是在数据字典中进行的,而且每一个存储在同一个表空间中的段可以具有不同的存储子句。在这种表空间的管理方法中您可以按您的需要修改存储参数,所以存储管理比较灵活但系统的效率较低。还有如果使用这种表空间的管理方法,有时需要合并碎片。由于Oracle8.0对互联网的成功支持和它在其它方面的卓越表现使得Oracle的市场占有率急速地增加,同时Oracle数据库的规模也开始变的越来越大。这样在一个大型和超大型数据库中就可能有成百乃至上千个表空间。由于每个表空间的管理信息都存在数据字典中,也就是存在系统表空间中。这样系统表空间就有可能成为一个瓶颈从而使数据库系统的效率大大地下降。正是为了克服以上弊端,Oracle公司从它的Oracle8i开始引入了另一种表空间的管理方法,叫做本地管理的表空间。本地管理的表空间其空闲EXTENTS是在表空间中管理的,它是使用位图(Bitmap)来 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 空闲EXTENTS,位图中的每一位对应于一块或一组块,而每位的值指示空闲或分配。当一个EXTENT被分配或释放时,Oracle服务器就会修改位图中相应位的值以反映该EXTENT的新的状态。位图存放在表空间所对应的数据文件的文件头中。使用本地管理的表空间减少了数据字典表的竞争,而且当磁盘空间分配或收回时也不会产生回滚(还原),它也不需要合并碎片。在本地管理的表空间中您无法按您的需要来随意地修改存储参数,所以存储管理不像数据字典(系统)管理的表空间那样灵活但系统的效率较高。因为在本地管理的表空间中,表空间的管理,如磁盘空间的分配与释放等已经不在需要操作数据字典了,所以系统表空间的瓶颈问题得到了很好的解决。因此Oracle公司建议用户创建的表空间应该尽可能地使用本地管理的表空间。在Oracle9i中本地管理的表空间为默认方式,但是在Oracle8i中数据字典(系统)管理的表空间为默认方式。6.5创建数据字典管理的表空间曾有位著名的学者在一份非常出名的报纸上发表了一篇震撼了整个神州大地的文章,文章的题目是:“中国妇女解放运动的先驱-潘金莲”。这篇文章一发表就在社会上引发了激烈的争论,真是“一石击起千层浪”。一位考古学的博士想利用统计学的方法科学地证明潘金莲到底是不是中国妇女解放的先驱。首先他必须将大量的数据分门别类地存入数据库中。他找到了您让您在Oracle数据库方面帮他的忙。您决定首先要为这个项目创建一个名为jinlian(金莲)的表空间。为了平衡I/O,您决定该表空间将基于两个数据文件,它们分别是J:\DISK2\MOON\JINLIAN01.DBF和J:\DISK4\MOON\JINLIAN02.DBF,其大小都为50M(在实际中可能几百M)。为了更有效地控制磁盘的存储分配,您决定使用数据字典管理的表空间。为了防止用户在创建对象时使用的EXTENT过小而产生过多的碎片,您决定最小的EXTENT为50K(MINIMUMEXTENT50K)。当需要磁盘空间的自动分配时第一次分配为50K(INITIAL50K),第二次也为50K(NEXT50K),所分配的最大磁盘空间为100个EXTENTS(MAXEXTENTS100)。从第三次分配开始按如下的公式进行分配:NEXT*(1+PCTINCREASE/100)(n-2)。其中n为分配的次数。于是你发出了如例6-1的SQL语句来创建名为jinlian(金莲)的表空间。例6-1SQL>CREATETABLESPACEjinlian2DATAFILE'J:\DISK2\MOON\JINLIAN01.DBF'SIZE50M,3'J:\DISK4\MOON\JINLIAN02.DBF'SIZE50M4MINIMUMEXTENT50KEXTENTMANAGEMENTDICTIONARY5DEFAULTSTORAGE(INITIAL50KNEXT50KMAXEXTENTS100PCTINCREASE0);表空间已创建。紧接着为了验证所创建的表空间是不是数据字典管理的,您使用了如例6-4的SQL查询语句。但为了使该语句的显示结果更清晰,您又使用了例6-2和例6-3的SQL*Plus命令对输出进行了格式化。例6-2SQL>SETLINE120例6-3SQL>COLTABLESPACE_NAMEFORA15例6-4SQL>SELECTtablespace_name,block_size,extent_management,segment_space_management2FROMdba_tablespaces;TABLESPACE_NAMEBLOCK_SIZEEXTENT_MANSEGMEN-----------------------------------------SYSTEM4096DICTIONARYMANUALUNDOTBS4096LOCALMANUALCWMLITE4096LOCALMANUALDRSYS4096LOCALMANUALEXAMPLE4096LOCALMANUALINDX4096LOCALMANUALTEMP4096LOCALMANUALTOOLS4096LOCALMANUALUSERS4096LOCALMANUALJINLIAN4096DICTIONARYMANUAL已选择10行。例6-4查询语句的结果表明表空间jinlian(金莲)确实是一个数据字典管理的表空间,因为extent_management列的显示结果为DICTIONARY。现在您可以使用如例6-5的SQL查询语句来验证其它的磁盘存储参数。例6-5SQL>selecttablespace_name,initial_extent,next_extent,2max_extents,pct_increase,min_extlen3fromdba_tablespaces;TABLESPACE_NAMEINITIAL_EXTENTNEXT_EXTENTMAX_EXTENTSPCT_INCREASEMIN_EXTLEN-------------------------------------------------------------------------SYSTEM1228812288249500UNDOTBS65536214748364565536CWMLITE65536214748364565536DRSYS65536214748364565536EXAMPLE65536214748364565536INDX65536214748364565536TEMP1048576104857601048576TOOLS65536214748364565536USERS65536214748364565536JINLIAN5324853248100053248已选择10行。从例6-5查询语句的结果显示可以清楚地看出:所有的存储参数都是按您的要求设置的,因为INITIAL_EXTENT为50K(53248字节),NEXT_EXTENT也为50K(53248字节),MIN__EXTENT(MINIMUMEXTENT)也同样为50K(53248字节),最后MAX__EXTENTS(MAXEXTENTS)为100。此时您还应使用如例6-6的SQL查询语句来验证一下与文件有关的信息。例6-6SQL>selectfile_id,file_name,tablespace_name2fromdba_data_files3orderbyfile_id;FILE_IDFILE_NAMETABLESPACE_NAME----------------------------------------------------------------------1D:\ORACLE\ORADATA\ORACLE9I\SYSTEM01.DBFSYSTEM2D:\ORACLE\ORADATA\ORACLE9I\UNDOTBS01.DBFUNDOTBS3D:\ORACLE\ORADATA\ORACLE9I\CWMLITE01.DBFCWMLITE4D:\ORACLE\ORADATA\ORACLE9I\DRSYS01.DBFDRSYS5D:\ORACLE\ORADATA\ORACLE9I\EXAMPLE01.DBFEXAMPLE6D:\ORACLE\ORADATA\ORACLE9I\INDX01.DBFINDX7D:\ORACLE\ORADATA\ORACLE9I\TOOLS01.DBFTOOLS8D:\ORACLE\ORADATA\ORACLE9I\USERS01.DBFUSERS9J:\DISK2\MOON\JINLIAN01.DBFJINLIAN10J:\DISK4\MOON\JINLIAN02.DBFJINLIAN已选择10行。从例6-6查询语句的结果显示可以清楚地看出:表空间JINLIAN共有两个操作系统文件它们分别是J:\DISK2\MOON\JINLIAN01.DBF和J:\DISK4\MOON\JINLIAN02.DBF。最后您还应该利用操作系统工具,如NT资源管理器来验证一下真正的物理文件是否真的生成了。如例6-7所示。例6-7从例6-7的结果显示可以清楚地看出物理文件J:\DISK2\MOON\JINLIAN.DBF确实已经生成,其大小也为50M。您还应该使用相同的方法验证表空间JINLIAN的另一个操作系统文件。6.6创建本地管理的表空间接下来您决定还要为这个项目创建一个名为jinlian_index的索引表空间。该表空间只基于一个数据文件,其文件名是J:\DISK6\MOON\JINLIAN_INDEX.DBF,其大小为50M(在实际中可能为几百M)。为了方便磁盘存储的管理,您决定使用本地管理的表空间(EXTENTMANAGEMENTLOCAL)。根据您的调查,您决定每个EXTENT的大小为1M(UNIFORMSIZE1M)。于是您发出了如例6-8的DDL语句来创建名为jinlian_index的索引表空间。例6-8SQL>CREATETABLESPACEjinlian_index2DATAFILE'J:\DISK6\MOON\jinlian_index.dbf'3SIZE50M4EXTENTMANAGEMENTLOCAL5UNIFORMSIZE1M;表空间已创建。紧接着为了验证所创建的表空间是不是本地管理的,您使用了如例6-9的查询语句。但为了使该语句的显示结果更清晰,您可能需要使用SQL*Plus命令对输出进行格式化。例6-9SQL>SELECTtablespace_name,block_size,extent_management,segment_space_management2FROMdba_tablespaces3WHEREtablespace_nameLIKE'JIN%';TABLESPACE_NAMEBLOCK_SIZEEXTENT_MANSEGMEN-----------------------------------------JINLIAN4096DICTIONARYMANUALJINLIAN_INDEX4096LOCALMANUAL例6-9查询语句的结果表明表空间JINLIAN_INDEX确实是一个本地管理的表空间,因为extent_management列的显示结果为LOCAL。现在您可以使用如例6-10查询语句来验证其它的磁盘存储参数。例6-10SQL>selecttablespace_name,initial_extent,next_extent,2max_extents,pct_increase,min_extlen3fromdba_tablespaces4WHEREtablespace_nameLIKE'JIN%';TABLESPACE_NAMEINITIAL_EXTENTNEXT_EXTENTMAX_EXTENTSPCT_INCREASEMIN_EXTLEN-------------------------------------------------------------------------JINLIAN5324853248100053248JINLIAN_INDEX10485761048576214748364501048576从例6-10查询语句的结果显示可以清楚地看出:所有的存储参数都是按您的要求设置的,因为INITIAL_EXTENT为1M(1048576字节),NEXT_EXTENT也为1M(1048576字节),MIN__EXTENT也同样为1M(1048576字节)。此时您还应使用如例6-11的查询语句来验证一下与文件有关的信息。例6-11SQL>SELECTfile_id,file_name,tablespace_name,autoextensible2FROMdba_data_files3WHEREfile_id>54orderbyfile_id;FILE_IDFILE_NAMETABLESPACE_NAMEAUT-------------------------------------------------------------------------6D:\ORACLE\ORADATA\ORACLE9I\INDX01.DBFINDXYES7D:\ORACLE\ORADATA\ORACLE9I\TOOLS01.DBFTOOLSYES8D:\ORACLE\ORADATA\ORACLE9I\USERS01.DBFUSERSYES9J:\DISK2\MOON\JINLIAN01.DBFJINLIANNO10J:\DISK4\MOON\JINLIAN02.DBFJINLIANNO11J:\DISK6\MOON\JINLIAN_INDEX.DBFJINLIAN_INDEXNO从例6-11查询语句的结果显示可以清楚地看出:表空间JINLIAN_INDEX只有一个操作系统文件,它是J:\DISK6\MOON\JINLIAN_INDEX.DBF。最后您还应该利用操作系统工具,如NT资源管理器来验证一下真正的物理文件是否真的生成了。如例6-12所示。例6-12从例6-12的结果显示可以清楚地看出:物理文件J:\DISK6\MOON\JINLIAN_INDEX.DBF确实已经生成,其大小也为50M。6.7还原表空间还原表空间是Oracle9i刚刚引入的,它是用来自动地管理还原(回滚)数据的。在这一节只对还原表空间给一个简单的介绍,后面有专门的一章来详细地介绍这方面的内容。还原表空间是用来存储还原段的,在还原表空间中不能包含任何其它的对象。还原表空间中的区段(Extents)是由本地管理的,而且在创建还原表空间的SQL语句中只能使用DATAFILE和EXTENTMANAGEMENT子句。接下来您想为潘金莲项目的数据单独创建一个还原表空间,它的名为jinlian_undo,它所基于的操作系统文件名为J:\DISK7\MOON\jinlian_undo.DBF,其大小为20M。于是就可以使用如例6-13的SQL语句来创建所需的还原表空间了。例6-13SQL>CREATEUNDOTABLESPACEjinlian_undo2DATAFILE'J:\DISK7\MOON\jinlian_undo.DBF'3SIZE20M;表空间已创建。现在您可能想查看一下您所创建的还原表空间jinlian_undo到底是数据字典管理还是本地管理的。可以使用如例6-14的SQL查询语句来获取相关的信息。例6-14SQL>SELECTtablespace_name,block_size,extent_management,segment_space_management2FROMdba_tablespaces3WHEREtablespace_nameLIKE'JIN%';TABLESPACE_NAMEBLOCK_SIZEEXTENT_MANSEGMEN-----------------------------------------JINLIAN4096DICTIONARYMANUALJINLIAN_INDEX4096LOCALMANUALJINLIAN_UNDO4096LOCALMANUAL例6-14的查询结果表明:还原表空间jinlian_undo是本地管理的,因为extent_management列的显示结果为LOCAL。之后您当然也想确认一下表空间jinlian_undo到底是不是还原表空间。因此您可以使用如例6-15的SQL查询语句。例6-15SQL>SELECTtablespace_name,status,contents2FROMdba_tablespaces3WHEREtablespace_nameLIKE'JIN%';TABLESPACE_NAMESTATUSCONTENTS---------------------------------JINLIANONLINEPERMANENTJINLIAN_INDEXONLINEPERMANENTJINLIAN_UNDOONLINEUNDO例6-15的查询结果表明:表空间jinlian_undo确实为还原表空间,因为contents列的显示结果为UNDO。6.8临时表空间临时表空间是作为排序操作使用的。当在用户的SQL语句中使用了诸如ORDERBY,GROUPBY子句时Oracle服务器就需要对所选取的数据进行排序,这时如果排序的数据量很大内存的排序区(在PGA中)就可能装不下,因此Oracle服务器就要把一些中间的排序结果写到磁盘上,即临时表空间中。当用户的SQL语句中经常有大规模的多重排序而内存的排序区不够时,使用临时表空间就可以改进数据库的效率。临时表空间可以由多个用户共享,在其中不能包含任何永久对象。临时表空间中的排序段是在实例启动后当有第一个排序操作时创建的,排序段在需要时可以通过分配EXTENTS来扩展并一直可以扩展到大于或等于在该实例上所运行的所有排序活动的总和。当创建临时表空间时,必须使用标准数据块。另外Oracle还推荐使用本地管理的表空间。接下来您想为潘金莲项目的数据单独创建一个临时表空间,它的名为jinlian_temp,它所基于的操作系统文件名为J:\DISK8\MOON\jinlian_temp.DBF,其大小为10M。您在创建该临时表空间之前,想看一看在数据库中究竟有多少个表空间以及它们的状态,于是您首先使用如例6-16的SQL*Plus格式化命令,之后发出了如例6-17的SQL查询语句。例6-16SQL>coltablespace_namefora15例6-17SQL>selecttablespace_name,status,contents2fromdba_tablespaces;TABLESPACE_NAMESTATUSCONTENTS---------------------------------SYSTEMONLINEPERMANENTUNDOTBSONLINEUNDOCWMLITEONLINEPERMANENTDRSYSONLINEPERMANENTEXAMPLEONLINEPERMANENTINDXONLINEPERMANENTTEMPONLINETEMPORARYTOOLSONLINEPERMANENTUSERSONLINEPERMANENTJINLIANONLINEPERMANENTJINLIAN_INDEXONLINEPERMANENTJINLIAN_UNDOONLINEUNDO已选择12行。例6-17查询语句的显示结果表明:在该数据库中只有一个临时表空间,该表空间的名为TEMP,因为只有该表空间的CONTENTS列的值为TEMPORARY。为了得到临时表空间和对应的数据文件,您可以使用数据字典v$tablespace和v$tempfile。于是您使用了如例6-19带有两个表连接的SQL查询语句,但为了使显示的结果更加清晰您首先使用了如例6-18的SQL*Plus格式化命令例6-18SQL>colfilefora50例6-19SQL>SELECTf.file#,t.ts#,f.name"File",t.name"Tablespace"2FROMv$tempfilef,v$tablespacet3WHEREf.ts#=t.ts#;FILE#TS#FileTablespace---------------------------------------------------------------------------------16D:\ORACLE\ORADATA\ORACLE9I\TEMP01.DBFTEMP例6-19查询语句的显示结果表明:6号(TS#为6)表空间TEMP所对应的数据文件为D:\ORACLE\ORADATA\ORACLE9I\TEMP01.DBF,文件号为1(FILE#为1)。现在您就可以使用如例6-20的SQL语句来创建所需的临时表空间了。例6-20SQL>CREATETEMPORARYTABLESPACEjinlian_temp2TEMPFILE'J:\DISK8\MOON\jinlian_temp.dbf'3SIZE10M4EXTENTMANAGEMENTLOCAL5UNIFORMSIZE2M;表空间已创建。接下来您应该使用如例6-21,例6-22,和例6-23的SQL查询语句来验证一下该表空间是否已经建立,它是否为临时表空间,以及它所对应的数据文件是否也被创建等。例6-21SQL>selecttablespace_name,status,contents2fromdba_tablespaces3wheretablespace_nameLIKE'JIN%';TABLESPACE_NAMESTATUSCONTENTS---------------------------------JINLIANONLINEPERMANENTJINLIAN_INDEXONLINEPERMANENTJINLIAN_TEMPONLINETEMPORARYJINLIAN_UNDOONLINEUNDO例6-22SQL>SELECTf.file#,t.ts#,f.name"File",t.name"Tablespace"2FROMv$tempfilef,v$tablespacet3WHEREf.ts#=t.ts#;FILE#TS#FileTablespace----------------------------------------------------------------------------------16D:\ORACLE\ORADATA\ORACLE9I\TEMP01.DBFTEMP212J:\DISK8\MOON\JINLIAN_TEMP.DBFJINLIAN_TEMP例6-23SQL>SELECTtablespace_name,block_size,extent_management,2segment_space_management,min_extlen3FROMdba_tablespaces4WHEREtablespace_nameLIKE'JIN%';TABLESPACE_NAMEBLOCK_SIZEEXTENT_MANSEGMENMIN_EXTLEN---------------------------------------------------JINLIAN4096DICTIONARYMANUAL53248JINLIAN_INDEX4096LOCALMANUAL1048576JINLIAN_TEMP4096LOCALMANUAL2097152JINLIAN_UNDO4096LOCALMANUAL65536例6-21,例6-22,和例6-23的查询语句显示结果表明:您已经成功地创建了临时表空间jinlian_temp。最后您还应该利用操作系统工具,如NT资源管理器来验证一下临时表空间所对应的物理文件是否真的生成了。本地管理的临时表空间是基于临时数据文件(tempfiles),这些文件与普通的数据文件非常相似,但它们还具有如下的特性:临时数据文件的状态不能置为只读。不能将临时数据文件重新命名。临时数据文件总是置为NOLOGGING状态。不能使用ALTERDATABASE命令创建临时数据文件。以只读方式运行的数据库需要临时数据文件。介质恢复是不能恢复临时数据文件的。另外,为了优化某一临时表空间中排序的效率,应该将UNIFORMSIZE设为SORT_AREA_SIZE(PGA中排序区的大小)参数的整数倍。6.9默认临时表空间默认临时表空间是在Oracle9i开始引入的。如果在创建一个数据库时没有设定默认临时表空间,那么任何一个用户如果在创建他时没有使用TEMPORARYTABLESPACE子句,他就将使用SYSTEM表空间作为排序区。这将使SYSTEM表空间碎片化,从而使数据库系统的效率下降。如果在创建一个数据库时没有设定默认临时表空间,Oracle服务器将把SYSTEM表空间是默认临时表空间的报警信息写入报警文件。因此说明一个数据库范围的默认临时表空间可以消除使用系统(SYSTEM)表空间对临时数据进行排序的现象,从而提高数据库系统的效率。默认临时表空间即可以在创建数据库时一起创建,也可以在数据库创建之后建立。在创建数据库的同时创建默认临时表空间要使用CREATEDATABASE命令,在数据库创建之后改变默认临时表空间要使用ALTERDATABASE命令。在数据库创建期间建立默认临时表空间的方法在以后的章节中介绍。首先可以利用数据字典DATABASE_PROPERTIES使用如例6-27的查询语句来得到当前的默认临时表空间。为了使显示清晰,您应该首先使用如例6-24,例6-25,和例6-26的SQL*Plus格式化命令。例6-24SQL>COLPROPERTY_NAMEFORA25例6-25SQL>COLPROPERTY_VALUEFORA16例6-26SQL>COLDESCRIPTIONFORA38例6-27SQL>SELECT*2FROMDATABASE_PROPERTIES3WHEREPROPERTY_NAMELIKE'DEFAULT%';PROPERTY_NAMEPROPERTY_VALUEDESCRIPTION             ------------------------------------------------------------------------------DEFAULT_TEMP_TABLESPACETEMPNameofdefaulttemporarytablespace例6-27的查询语句显示结果表明:表空间TEMP为当前的默认临时表空间。随着潘金莲项目的不断进展,有关该项目的数据处理也变得越来越频繁,为了提高该项目的数据处理的速度,您决定将jinlian_temp临时表空间设为默认临时表空间。于是您发出了如例6-28命令。例6-28SQL>ALTERDATABASE2DEFAULTTEMPORARYTABLESPACEjinlian_temp;数据库已更改。接下来您可以使用如例6-29的SQL查询语句来验证现在的默认临时表空间是否为jinlian_temp。例6-29SQL>SELECT*2FROMDATABASE_PROPERTIES3WHEREPROPERTY_NAMELIKE'DEFAULT%';PROPERTY_NAMEPROPERTY_VALUEDESCRIPTION             ------------------------------------------------------------------------------DEFAULT_TEMP_TABLESPACEJINLIAN_TEMPNameofdefaulttemporarytablespace当不再处理金莲项目数据时,请别忘了将默认临时表空间再改回为TEMP表空间。此时您应该使用如例6-30的命令。例6-30SQL>ALTERDATABASE2DEFAULTTEMPORARYTABLESPACEtemp;数据库已更改。最后您还是应该使用如例6-31的SQL查询语句来验证一下现在的默认临时表空间是否为temp。例6-31SQL>SELECT*2FROMDATABASE_PROPERTIES3WHEREPROPERTY_NAMELIKE'DEFAULT%';PROPERTY_NAMEPROPERTY_VALUEDESCRIPTION             ------------------------------------------------------------------------------DEFAULT_TEMP_TABLESPACETEMPNameofdefaulttemporarytablespace在结束这一节之前,最后介绍一下在默认临时表空间上的一些限制。首先默认临时表空间不能被删除,除非有一个新的可以使用的默认临时表空间。也就是必须先使用ALTERDATABASE将一新的临时表空间设置为默认临时表空间,之后才能删除旧的(默认)临时表空间。使用旧的(默认)临时表空间的用户被自动地赋予新的默认临时表空间。因为默认临时表空间必须是临时(TEMPORARY)表空间或者是系统(SYSTEM)表空间,所以不能将默认临时表空间改为一个永久表空间。也不能将默认临时表空间设置为脱机。(在接下来的几节中我们将介绍这些操作。)6.10设置表空间为脱机一个表空间的正常状态是联机(Online)状态,此时数据库用户可以访问该表空间中的数据。然而,有时数据库管理员需要将某一表空间设置为脱机状态,以进行数据库的维护。其维护工作包括:在数据库处在打开状态下移动数据文件在数据库处在打开状态下恢复一个表空间或一个数据文件执行对表空间的脱机备份(虽然对表空间可以进行联机备份)使数据库的一部分不可以被访问,而其它的部分可以被正常地访问当一个表空间被设置为脱机状态时,该表空间上的数据是不可以访问。如果用户试图访问该表空间上的数据就会收到出错信息。当一个表空间被设置为脱机状态时或重新被设置为联机状态时,Oracle会把这一事件记录在数据字典和控制文件中,也会记录在报警文件中。如果当数据库被关闭时,某一表空间为脱机状态,那么当数据库被加载(MOUNT)和重新打开时该表空间仍保持为脱机状态。并不是所有的表空间都可以被设置为脱机状态,以下的表空间不能被设置为脱机状态:系统(SYSTEM)表空间上面有活动的还原/回滚段的表空间默认临时表空间假设JINLIAN数据表空间出了些问题,需要对它进行维护。于是要将它的状态设为脱机。但为了慎重起见您先使用了如例6-32和例6-34的SQL查询语句以获取该表空间和它对应的数据文件现在的状态。例6-32SQL>selecttablespace_name,status,contents2fromdba_tablespaces3wheretablespace_nameLIKE'JIN%';TABLESPACE_NAMESTATUSCONTENTS---------------------------------JINLIANONLINEPERMANENTJINLIAN_INDEXONLINEPERMANENTJINLIAN_TEMPONLINETEMPORARYJINLIAN_UNDOONLINEUNDO例6-33SQL>colnamefora55例6-34SQL>SELECTfile#,name,status2FROMv$datafile3WHEREfile#>=8;FILE#NAMESTATUS------------------------------------------------------------------------8D:\ORACLE\ORADATA\ORACLE9I\USERS01.DBFONLINE9J:\DISK2\MOON\JINLIAN01.DBFONLINE10J:\DISK4\MOON\JINLIAN02.DBFONLINE11J:\DISK6\MOON\JINLIAN_INDEX.DBFONLINE12J:\DISK7\MOON\JINLIAN_UNDO.DBFONLINE从例6-32和例6-34的查询结果显示可以看出:表空间JINLIAN以及与它相对应的两个数据文件J:\DISK2\MOON\JINLIAN01.DBF和J:\DISK4\MOON\JINLIAN02.DBF都处在联机状态。此时您就可以使用如例6-25的命令将表空间JINLIAN置为脱机状态。例6-25SQL>ALTERTABLESPACEjinlianOFFLINE;表空间已更改。接下来您应该验证一下以上命令是否成功。可以使用了如例6-36和例6-37的查询语句以获取该表空间和它对的数据文件现在的状态。例6-36SQL>selecttablespace_name,status,contents2fromdba_tablespaces3wheretablespace_nameLIKE'JIN%';TABLESPACE_NAMESTATUSCONTENTS---------------------------------JINLIANOFFLINEPERMANENTJINLIAN_INDEXONLINEPERMANENTJINLIAN_TEMPONLINETEMPORARYJINLIAN_UNDOONLINEUNDO例6-37SQL>SELECTfile#,name,status2FROMv$datafile3WHEREfile#>=8;FILE#NAMESTATUS------------------------------------------------------------------------8D:\ORACLE\ORADATA\ORACLE9I\USERS01.DBFONLINE9J:\DISK2\MOON\JINLIAN01.DBFOFFLINE10J:\DISK4\MOON\JINLIAN02.DBFOFFLINE11J:\DISK6\MOON\JINLIAN_INDEX.DBFONLINE12J:\DISK7\MOON\JINLIAN_UNDO.DBFONLINE从例6-36和例6-37的查询结果显示可以看出:表空间JINLIAN以及与它相对应的两个数据文件J:\DISK2\MOON\JINLIAN01.DBF和J:\DISK4\MOON\JINLIAN02.DBF都已经处在脱机状态。这说明例6-25的命令已经成功地执行。当维护工作结束后,您就应该尽快地使用如例6-38的命令将表空间JINLIAN置回为联机状态。例6-38SQL>ALTERTABLESPACEjinlianONLINE;表空间已更改。接下来您应该验证一下以上命令是否成功。您可以使用如例6-39和例6-40的查询语句以获取该表空间和它对的数据文件现在的状态。例6-39SQL>selecttablespace_name,status,contents2fromdba_tablespaces3wheretablespace_nameLIKE'JIN%';TABLESPACE_NAMESTATUSCONTENTS---------------------------------JINLIANONLINEPERMANENTJINLIAN_INDEXONLINEPERMANENTJINLIAN_TEMPONLINETEMPORARYJINLIAN_UNDOONLINEUNDO例6-40SQL>SELECTfile#,name,status2FROMv$datafile3WHEREfile#>=8;FILE#NAMESTATUS------------------------------------------------------------------------8D:\ORACLE\ORADATA\ORACLE9I\USERS01.DBFONLINE9J:\DISK2\MOON\JINLIAN01.DBFONLINE10J:\DISK4\MOON\JINLIAN02.DBFONLINE11J:\DISK6\MOON\JINLIAN_INDEX.DBFONLINE12J:\DISK7\MOON\JINLIAN_UNDO.DBFONLINE从例6-39和例6-40的查询结果显示可以看出:表空间JINLIAN以及与它相对应的两个数据文件J:\DISK2\MOON\JINLIAN01.DBF和J:\DISK4\MOON\JINLIAN02.DBF都已经处在联机状态。这说明例6-38的命令已经成功地执行。现在您就可以通知使用JINLIAN表空间上数据的用户可以正常地操作该表空间上的数据了。6.11只读(Read-Only)表空间当一个表空间处在只读状态时,在该表空间中的数据只能进行读操作,也就是说在上面的数据是不会变化的,因此也就不需要重做日志的保护,所以操作只读状态表空间上的数据时不会产生重做操作。这也就提高了系统的效率。由于只读表空间上的数据是不变的,所以对该表空间只要做一次备份就够了。这不但减少了数据库系统的维护工作量还使系统的负荷减轻。因此如果将一个数据库精心设计把许多不变的数据归类放在一个或几个表空间中,然后将它们的状态改为只读,将会使该数据库的维护更加容易而且效率更高。当使用命令将一个表空间的状态改为只读时,一开始该表空间处于一种中间的状态。在这种状态下,除了那些没有完成的事务之外在该表空间中不能进行任何的写操作,一旦那些没有完成的事务结束(即可以是提交也可以是回滚),该表空间就被置为只读状态。将一个表空间的状态改为只读时Oracle会产生检查点。可以删除只读表空间中的对象,如表和索引,这是因为删除对象的命令是DDL语句,它们只修改数据字典而不是数据文件。将一个表空间的状态改为只读时或反过来将一个表空间的状态改为可读可写(正常)时,该表空间必须处在联机状态。随着潘金莲项目不断进展,有关该项目的数据处理也变得越来越频繁,系统的效率已经成为了一个大问题。经过仔细分析,您发现潘金莲项目的数据是以批处理的方式定期输入的,一旦输入后上面的数据是不能修改的。于是为了提高该项目的数据处理的速度,您决定在每次输入数据之后将jinlian表空间的状态改为只读。于是您发出了如例6-41命令。例6-41SQL>ALTERTABLESPACEjinlianREADONLY;表空间已更改。接下来您应该验证一下以上命令是否成功。可以使用如例6-42的查询语句以获取表空间的状态信息。例6-42SQL>selecttablespace_name,status,contents2fromdba_tablespaces3wheretablespace_nameLIKE'JIN%';TABLESPACE_NAMESTATUSCONTENTS------------------------------------------------JINLIANREADONLYPERMANENTJINLIAN_INDEXONLINEPERMANENTJINLIAN_TEMPONLINETEMPORARYJINLIAN_UNDOONLINEUNDO从例6-42的查询结果显示可以看出表空间JINLIAN已经处在只读状态(READONLY)。这说明例6-41的命令已经成功地执行。当需要重新向JINLIAN表空间中输入数据时,您就可以使用如例6-43的命令将表空间的状态又改回为可读可写(正常)。例6-43SQL>ALTERTABLESPACEjinlianREADWRITE;表空间已更改。接下来您也应该验证一下以上命令是否成功地将表空间JINLIAN改回为可读可写(正常)状态。您可以使用如例6-44的查询语句以获取表空间的状态信息。例6-44SQL>selecttablespace_name,status,contents2fromdba_tablespaces3wheretablespace_nameLIKE'JIN%';TABLESPACE_NAMESTATUSCONTENTS------------------------------------------------JINLIANONLINEPERMANENTJINLIAN_INDEXONLINEPERMANENTJINLIAN_TEMPONLINETEMPORARYJINLIAN_UNDOONLINEUNDO从例6-44的查询结果显示可以看出:表空间JINLIAN已经处在正常状态(ONLINE)。这说明例6-43的命令已经成功地执行。最后您还可以利用操作系统工具,如NT的记事本来查看一下报警文件中的内容。如例6-45。例6-45从例6-45报警文件的显示可以看出:表空间JINLIAN所有状态的变化以及相应的时间都已经被详细地记录在报警文件中。Oracle够聪明的吧?6.12改变表空间的存储设置如果在创建表空间时所设置的存储参数不合适,可以使用如下的命令进行修改;ALTERTABLESPACE表空间名[MINIMUMEXTENT正整数[K|M]|DEFAULT存储子句]随着潘金莲项目的不断进展,有关该项目的数据量变得越来越大,以前为jinlian表空间所设置的存储参数不合适了,为了提高该项目的数据处理的速度,您决定将jinlian表空间的存储参数做如下的修改:MINIMUMEXTENT为100K;INITIAL和NEXT也都为100K,而MAXEXTENTS为200。于是您发出了如例6-46和例6-47的命令。例6-46SQL>ALTERTABLESPACEjinlianMINIMUMEXTENT100K;表空间已更改。例6-47SQL>ALTERTABLESPACEjinlian2DEFAULTSTORAGE(INITIAL100KNEXT100KMAXEXTENTS200);表空间已更改。现在您可以使用如例6-50的SQL查询语句来验证您所修改的表空间JINLIAN的磁盘存储参数是否成
本文档为【Oracle表空间和数据文件的管理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
xiaowu0912
多年轨道交通运输经验
格式:doc
大小:735KB
软件:Word
页数:0
分类:教育学
上传时间:2021-02-19
浏览量:0