![Oracle表空间和数据文件的管理_第1页](http://file4.renrendoc.com/view/1675fe1c23661fbb1fcc14d79a48c232/1675fe1c23661fbb1fcc14d79a48c2321.gif)
![Oracle表空间和数据文件的管理_第2页](http://file4.renrendoc.com/view/1675fe1c23661fbb1fcc14d79a48c232/1675fe1c23661fbb1fcc14d79a48c2322.gif)
![Oracle表空间和数据文件的管理_第3页](http://file4.renrendoc.com/view/1675fe1c23661fbb1fcc14d79a48c232/1675fe1c23661fbb1fcc14d79a48c2323.gif)
![Oracle表空间和数据文件的管理_第4页](http://file4.renrendoc.com/view/1675fe1c23661fbb1fcc14d79a48c232/1675fe1c23661fbb1fcc14d79a48c2324.gif)
![Oracle表空间和数据文件的管理_第5页](http://file4.renrendoc.com/view/1675fe1c23661fbb1fcc14d79a48c232/1675fe1c23661fbb1fcc14d79a48c2325.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章表空间和数据文件的管理6.1 Oracle引入逻辑结构的目的Oracle数据库管理系统并没有像不少其它数据库管理系统那样直接地操作数据文件,而是引入一组逻辑结构。如图6-1所示。图6-1图6-1的虚线左边为逻辑结构,右边为物理结构。与计算机原理或计算机操作系统中所讲的有些不同,在Oracle数据库中,逻辑结构为Oracle引入的结构,而物理结构为操作系统所拥有的结构。曾有不少学生问过我同样的一个问题,那就是Oracle为什么要引入逻辑结构呢?首先可能是为了增加Oracle的可移植性。Oracle公司声称它的Oracle数据库是与IT平台无关的,即在某一厂家的某个操作系统上开发的Oracl
2、e数据库(包括应用程序等)可以几乎不加修改地移植到另一厂家的另外的操作系统上。要做到这一点就不能直接操作数据文件,因为数据文件是跟操作系统相关的。其次可能是为了减少Oracle从业人员学习的难度。因为有了逻辑结构Oracle的从业人员就可以只对逻辑结构进行操作,而在所有的IT平台上逻辑结构的操作都几乎完全相同,至于从逻辑结构到物理结构的映射(转换)是由Oracle数据库管理系统来完成的。6.2 Oracle数据库中存储结构之间的关系其实图6-1类似于一个Oracle数据库的存储结构之间关系的实体关系图。如果读者学过实体关系模型(E-R模型)的话,从图6-1中可以很容易地得到Oracle数据库中
3、存储结构之间的关系。为了帮助那些没有学过E-R模型的读者理解图6-1,也是为了帮助那些学过但已经忘的差不多了的读者恢复一下记忆,在下面对E-R模型和图6-1给出一些简单的解释。在图6-1中,园角型方框为实体,实线表示关系,单线表示一的关系,三条线(鹰爪)表示多的关系。于是可以得到:每个数据库是由一个或多个表空间所组成(至少一个)。每个表空间基于一个或多个操作系统的数据文件(至少一个)。每个表空间中可以存放有零个或多个段(Segment)。每个段是由一个或多个区段(Extent)所组成。每个区段是由一个或多个连续的Oracle数据块所组成。每个Oracle数据块是由一个或多个连续的操作系统数据块
4、所组成。每个操作系统数据文件是由一个或多个区段(Extent)所组成。每个操作系统数据文件是由一个或多个操作系统数据块所组成。有关段,区段,和Oracle数据块等我们在接下来的章节中要详细地介绍。6.3 表空间和数据文件之间的关系及表空间的分类通过前面的讨论可知:Oracle将数据逻辑地存放在表空间里,而物理地存放在数据文件里。表空间(Tablespaces)在任何一个时刻只能属于一个数据库,但是反过来并不成立,因为一个数据库一般都有多个表空间。每个表空间都是由一个或多个操作系统的数据文件所组成,但是一个操作系统的数据文件只能属于一个表空间。表空间可以被进一步划分成一些更小的逻辑存储单位。在一
5、个Oracle数据库中,每个数据文件(Data files)可以而且只能属于一个表空间和一个数据库。数据文件实际上是存储模式对象数据的一个容器/仓库。在一个Oracle数据库中一般有两类表空间,他们是系统(SYSTEM)表空间和非系统(Non-SYSTEM)表空间。系统(SYSTEM)表空间是与数据库一起建立的,在系统表空间中存有数据字典,在系统表空间中还包含了系统还原(回滚)段。虽然在系统表空间中可以存放用户数据,但考虑到Oracle系统的效率和管理上的方便,在系统表空间上不应该存放任何用户数据。非系统(Non-SYSTEM)表空间可以由数据库管理员创建,在非系统表空间中存储一些单独的段,这
6、些段可以是用户的数据段,索引段,还原段,和临时段等。引入非系统表空间可以方便磁盘空间的管理,也可以更好地控制分配给用户磁盘空间的数量。引入非系统表空间还可以将静态数据和动态数据有效地分开,也可以按照备份的要求将数据分开存放。使用如下的命令创建一个非系统表空间:CREATE TABLESPACE表空间名DATAFILE子句MINIMUM EXTENT 正整数K|MBLOCKSIZE正整数KLOGGING|NOLOGGINGDEFAULT 存储子句ONLINE|OFFLINEPERMANENT|TEMPORARY区段管理子句段管理子句在这里对以上命令中的一些子句和选项给出进一步的解释:表空间名:所
7、要创建的表空间名。DATAFILE子句:组成所要创建的表空间的文件说明。MINIMUM EXTENT:表空间中所使用的每个EXTENT都必须是该参数所指定数的整数倍。BLOCKSIZE:为该表空间说明非标准块的大小。在使用这一子句之前,您必须先设置DB_CACHE_SIZE参数和DB_nK_CACHE_SIZE参数,而且该子句中所说明的正整数一定与DB_nK_CACHE_SIZE参数的设定相对应。LOGGING: 说明在该表空间中所有数据的变化都将写入重做日志文件中,这也是默认方式。NOLOGGING: 说明在该表空间中所有数据的变化不都写入重做日志文件中,NOLOGGING只影响一些DML和
8、DDL命令。DEFAULT存储子句:说明所有在该表空间中所创建的对象的默认存储参数。OFFLINE:说明该表空间在创建后立即被置为脱机,即不能使用。还有一些其它的子句和选项我们将在后续的章节中陆续地介绍。6.4 表空间中的磁盘空间管理在Oracle8.0和更早的版本中所有表空间中的磁盘空间管理都是由数据字典来管理的。在这种表空间的管理方法中所有的空闲区由数据字典来统一管理。每当区段被分配或收回时,Oracle服务器将修改数据字典中相应的(系统)表。在数据字典(系统)管理的表空间中所有的EXTENTS的管理都是在数据字典中进行的,而且每一个存储在同一个表空间中的段可以具有不同的存储子句。在这种表
9、空间的管理方法中您可以按您的需要修改存储参数,所以存储管理比较灵活但系统的效率较低。还有如果使用这种表空间的管理方法,有时需要合并碎片。由于Oracle8.0对互联网的成功支持和它在其它方面的卓越表现使得Oracle的市场占有率急速地增加,同时Oracle数据库的规模也开始变的越来越大。这样在一个大型和超大型数据库中就可能有成百乃至上千个表空间。由于每个表空间的管理信息都存在数据字典中,也就是存在系统表空间中。这样系统表空间就有可能成为一个瓶颈从而使数据库系统的效率大大地下降。正是为了克服以上弊端,Oracle公司从它的Oracle8i开始引入了另一种表空间的管理方法,叫做本地管理的表空间。本
10、地管理的表空间其空闲EXTENTS是在表空间中管理的,它是使用位图(Bitmap)来记录空闲EXTENTS,位图中的每一位对应于一块或一组块,而每位的值指示空闲或分配。当一个EXTENT被分配或释放时,Oracle服务器就会修改位图中相应位的值以反映该EXTENT的新的状态。位图存放在表空间所对应的数据文件的文件头中。使用本地管理的表空间减少了数据字典表的竞争,而且当磁盘空间分配或收回时也不会产生回滚(还原),它也不需要合并碎片。在本地管理的表空间中您无法按您的需要来随意地修改存储参数,所以存储管理不像数据字典(系统)管理的表空间那样灵活但系统的效率较高。因为在本地管理的表空间中,表空间的管理
11、,如磁盘空间的分配与释放等已经不在需要操作数据字典了,所以系统表空间的瓶颈问题得到了很好的解决。因此Oracle公司建议用户创建的表空间应该尽可能地使用本地管理的表空间。在Oracle9i中本地管理的表空间为默认方式,但是在Oracle8i中数据字典(系统)管理的表空间为默认方式。6.5 创建数据字典管理的表空间曾有位著名的学者在一份非常出名的报纸上发表了一篇震撼了整个神州大地的文章,文章的题目是:“中国妇女解放运动的先驱潘金莲”。这篇文章一发表就在社会上引发了激烈的争论,真是“一石击起千层浪”。一位考古学的博士想利用统计学的方法科学地证明潘金莲到底是不是中国妇女解放的先驱。首先他必须将大量的
12、数据分门别类地存入数据库中。他找到了您让您在Oracle数据库方面帮他的忙。您决定首先要为这个项目创建一个名为jinlian(金莲)的表空间。为了平衡I/O,您决定该表空间将基于两个数据文件,它们分别是J:DISK2MOONJINLIAN01.DBF和J:DISK4MOONJINLIAN02.DBF,其大小都为50M(在实际中可能几百)。为了更有效地控制磁盘的存储分配,您决定使用数据字典管理的表空间。为了防止用户在创建对象时使用的EXTENT过小而产生过多的碎片,您决定最小的EXTENT为50K(MINIMUM EXTENT 50K)。当需要磁盘空间的自动分配时第一次分配为50K(INITIA
13、L 50K),第二次也为50K(NEXT 50K),所分配的最大磁盘空间为100个EXTENTS(MAXEXTENTS 100)。从第三次分配开始按如下的公式进行分配:NEXT * (1+PCTINCREASE/100)(n-2)。其中n为分配的次数。于是你发出了如例6-1的SQL语句来创建名为jinlian(金莲)的表空间。例6-1SQL CREATE TABLESPACE jinlian 2 DATAFILE J:DISK2MOONJINLIAN01.DBF SIZE 50 M, 3 J:DISK4MOONJINLIAN02.DBF SIZE 50 M 4 MINIMUM EXTENT 5
14、0K EXTENT MANAGEMENT DICTIONARY 5 DEFAULT STORAGE (INITIAL 50K NEXT 50K MAXEXTENTS 100 PCTINCREASE 0);表空间已创建。紧接着为了验证所创建的表空间是不是数据字典管理的,您使用了如例6-4的SQL查询语句。但为了使该语句的显示结果更清晰,您又使用了例6-2和例6-3的SQL*Plus命令对输出进行了格式化。例6-2SQLSET LINE 120例6-3SQL COL TABLESPACE_NAME FOR A15例6-4SQL SELECT tablespace_name, block_size,
15、 extent_management, segment_space_management 2 FROM dba_tablespaces;TABLESPACE_NAME BLOCK_SIZE EXTENT_MAN SEGMEN- - - -SYSTEM 4096 DICTIONARY MANUALUNDOTBS 4096 LOCAL MANUALCWMLITE 4096 LOCAL MANUALDRSYS 4096 LOCAL MANUALEXAMPLE 4096 LOCAL MANUALINDX 4096 LOCAL MANUALTEMP 4096 LOCAL MANUALTOOLS 4096
16、 LOCAL MANUALUSERS 4096 LOCAL MANUALJINLIAN 4096 DICTIONARY MANUAL 已选择10行。 例6-4查询语句的结果表明表空间jinlian(金莲)确实是一个数据字典管理的表空间,因为extent_management列的显示结果为DICTIONARY。现在您可以使用如例6-5的SQL查询语句来验证其它的磁盘存储参数。例6-5SQL select tablespace_name, initial_extent, next_extent, 2 max_extents, pct_increase, min_extlen 3 from dba_
17、tablespaces;TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT MAX_EXTENTS PCT_INCREASE MIN_EXTLEN- - - - - -SYSTEM 12288 12288 249 50 0UNDOTBS 65536 2147483645 65536CWMLITE 65536 2147483645 65536DRSYS 65536 2147483645 65536EXAMPLE 65536 2147483645 65536INDX 65536 2147483645 65536TEMP 1048576 1048576 0 1048
18、576TOOLS 65536 2147483645 65536USERS 65536 2147483645 65536JINLIAN 53248 53248 100 0 53248 已选择10行。 从例6-5查询语句的结果显示可以清楚地看出:所有的存储参数都是按您的要求设置的,因为INITIAL_EXTENT为50K(53248字节),NEXT_EXTENT也为50K(53248字节),MIN_EXTENT(MINIMUM EXTENT)也同样为50K(53248字节),最后MAX_EXTENTS(MAXEXTENTS)为100。此时您还应使用如例6-6的SQL查询语句来验证一下与文件有关的信
19、息。例6-6SQL select file_id, file_name, tablespace_name 2 from dba_data_files 3 order by file_id; FILE_ID FILE_NAME TABLESPACE_NAME- - - 1 D:ORACLEORADATAORACLE9ISYSTEM01.DBF SYSTEM 2 D:ORACLEORADATAORACLE9IUNDOTBS01.DBF UNDOTBS 3 D:ORACLEORADATAORACLE9ICWMLITE01.DBF CWMLITE 4 D:ORACLEORADATAORACLE9IDR
20、SYS01.DBF DRSYS 5 D:ORACLEORADATAORACLE9IEXAMPLE01.DBF EXAMPLE 6 D:ORACLEORADATAORACLE9IINDX01.DBF INDX 7 D:ORACLEORADATAORACLE9ITOOLS01.DBF TOOLS 8 D:ORACLEORADATAORACLE9IUSERS01.DBF USERS 9 J:DISK2MOONJINLIAN01.DBF JINLIAN 10 J:DISK4MOONJINLIAN02.DBF JINLIAN 已选择10行。 从例6-6查询语句的结果显示可以清楚地看出:表空间JINLIA
21、N共有两个操作系统文件它们分别是J:DISK2MOONJINLIAN01.DBF和J:DISK4MOONJINLIAN02.DBF。最后您还应该利用操作系统工具,如NT资源管理器来验证一下真正的物理文件是否真的生成了。如例6-7所示。例6-7从例6-7的结果显示可以清楚地看出物理文件J:DISK2MOONJINLIAN.DBF确实已经生成,其大小也为50M。您还应该使用相同的方法验证表空间JINLIAN的另一个操作系统文件。6.6 创建本地管理的表空间接下来您决定还要为这个项目创建一个名为jinlian_index的索引表空间。该表空间只基于一个数据文件,其文件名是J:DISK6MOONJIN
22、LIAN_INDEX.DBF,其大小为50M(在实际中可能为几百)。为了方便磁盘存储的管理,您决定使用本地管理的表空间(EXTENT MANAGEMENT LOCAL)。根据您的调查,您决定每个EXTENT的大小为1M(UNIFORM SIZE 1M)。于是您发出了如例6-8的DDL语句来创建名为jinlian_index的索引表空间。例6-8SQL CREATE TABLESPACE jinlian_index2 DATAFILE J:DISK6MOONjinlian_index.dbf 3 SIZE 50 M 4 EXTENT MANAGEMENT LOCAL 5 UNIFORM SIZE
23、 1M;表空间已创建。紧接着为了验证所创建的表空间是不是本地管理的,您使用了如例6-9的查询语句。但为了使该语句的显示结果更清晰,您可能需要使用SQL*Plus命令对输出进行格式化。例6-9SQL SELECT tablespace_name, block_size, extent_management, segment_space_management 2 FROM dba_tablespaces 3 WHERE tablespace_name LIKE JIN%;TABLESPACE_NAME BLOCK_SIZE EXTENT_MAN SEGMEN- - - -JINLIAN 4096
24、DICTIONARY MANUALJINLIAN_INDEX 4096 LOCAL MANUAL例6-9查询语句的结果表明表空间JINLIAN_INDEX确实是一个本地管理的表空间,因为extent_management列的显示结果为LOCAL。现在您可以使用如例6-10查询语句来验证其它的磁盘存储参数。例6-10SQL select tablespace_name, initial_extent, next_extent, 2 max_extents, pct_increase, min_extlen 3 from dba_tablespaces 4 WHERE tablespace_nam
25、e LIKE JIN%;TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT MAX_EXTENTS PCT_INCREASE MIN_EXTLEN- - - - - -JINLIAN 53248 53248 100 0 53248JINLIAN_INDEX 1048576 1048576 2147483645 0 1048576从例6-10查询语句的结果显示可以清楚地看出:所有的存储参数都是按您的要求设置的,因为INITIAL_EXTENT为1M(1048576字节),NEXT_EXTENT也为1M(1048576字节),MIN_EXTENT也同样为1M(10
26、48576字节)。此时您还应使用如例6-11的查询语句来验证一下与文件有关的信息。例6-11SQL SELECT file_id, file_name, tablespace_name, autoextensible 2 FROM dba_data_files 3 WHERE file_id 5 4 order by file_id; FILE_ID FILE_NAME TABLESPACE_NAME AUT- - - - 6 D:ORACLEORADATAORACLE9IINDX01.DBF INDX YES 7 D:ORACLEORADATAORACLE9ITOOLS01.DBF TOOL
27、S YES 8 D:ORACLEORADATAORACLE9IUSERS01.DBF USERS YES 9 J:DISK2MOONJINLIAN01.DBF JINLIAN NO 10 J:DISK4MOONJINLIAN02.DBF JINLIAN NO 11 J:DISK6MOONJINLIAN_INDEX.DBF JINLIAN_INDEX NO 从例6-11查询语句的结果显示可以清楚地看出:表空间JINLIAN_INDEX只有一个操作系统文件,它是J:DISK6MOONJINLIAN_INDEX.DBF。最后您还应该利用操作系统工具,如NT资源管理器来验证一下真正的物理文件是否真的生
28、成了。如例6-12所示。例6-12从例6-12的结果显示可以清楚地看出:物理文件J:DISK6MOONJINLIAN_INDEX.DBF确实已经生成,其大小也为50 M。还原表空间还原表空间是Oracle9i刚刚引入的,它是用来自动地管理还原(回滚)数据的。在这一节只对还原表空间给一个简单的介绍,后面有专门的一章来详细地介绍这方面的内容。还原表空间是用来存储还原段的,在还原表空间中不能包含任何其它的对象。还原表空间中的区段(Extents)是由本地管理的,而且在创建还原表空间的SQL语句中只能使用DATAFILE和EXTENT MANAGEMENT子句。接下来您想为潘金莲项目的数据单独创建一个
29、还原表空间,它的名为jinlian_undo,它所基于的操作系统文件名为J:DISK7MOONjinlian_undo.DBF,其大小为20M。于是就可以使用如例6-13的SQL语句来创建所需的还原表空间了。例6-13SQL CREATE UNDO TABLESPACE jinlian_undo 2 DATAFILE J:DISK7MOONjinlian_undo.DBF 3 SIZE 20 M;表空间已创建。现在您可能想查看一下您所创建的还原表空间jinlian_undo到底是数据字典管理还是本地管理的。可以使用如例6-14的SQL查询语句来获取相关的信息。例6-14SQL SELECT t
30、ablespace_name, block_size, extent_management, segment_space_management 2 FROM dba_tablespaces 3 WHERE tablespace_name LIKE JIN%;TABLESPACE_NAME BLOCK_SIZE EXTENT_MAN SEGMEN- - - -JINLIAN 4096 DICTIONARY MANUALJINLIAN_INDEX 4096 LOCAL MANUALJINLIAN_UNDO 4096 LOCAL MANUAL例6-14的查询结果表明:还原表空间jinlian_und
31、o是本地管理的,因为extent_management列的显示结果为LOCAL。之后您当然也想确认一下表空间jinlian_undo到底是不是还原表空间。因此您可以使用如例6-15的SQL查询语句。例6-15SQL SELECT tablespace_name, status, contents 2 FROM dba_tablespaces 3 WHERE tablespace_name LIKE JIN%;TABLESPACE_NAME STATUS CONTENTS - - -JINLIAN ONLINE PERMANENTJINLIAN_INDEX ONLINE PERMANENTJIN
32、LIAN_UNDO ONLINE UNDO 例6-15的查询结果表明:表空间jinlian_undo确实为还原表空间,因为contents列的显示结果为UNDO。临时表空间临时表空间是作为排序操作使用的。当在用户的SQL语句中使用了诸如ORDER BY,GROUP BY子句时Oracle服务器就需要对所选取的数据进行排序,这时如果排序的数据量很大内存的排序区(在PGA中)就可能装不下,因此Oracle服务器就要把一些中间的排序结果写到磁盘上,即临时表空间中。当用户的SQL语句中经常有大规模的多重排序而内存的排序区不够时,使用临时表空间就可以改进数据库的效率。临时表空间可以由多个用户共享,在其中
33、不能包含任何永久对象。临时表空间中的排序段是在实例启动后当有第一个排序操作时创建的,排序段在需要时可以通过分配EXTENTS来扩展并一直可以扩展到大于或等于在该实例上所运行的所有排序活动的总和。当创建临时表空间时,必须使用标准数据块。另外Oracle还推荐使用本地管理的表空间。接下来您想为潘金莲项目的数据单独创建一个临时表空间,它的名为jinlian_temp,它所基于的操作系统文件名为J:DISK8MOONjinlian_temp.DBF,其大小为10M。您在创建该临时表空间之前,想看一看在数据库中究竟有多少个表空间以及它们的状态,于是您首先使用如例6-16的SQL*Plus格式化命令,之后
34、发出了如例6-17的SQL查询语句。例6-16SQL col tablespace_name for a15例6-17SQL select tablespace_name, status, contents 2 from dba_tablespaces;TABLESPACE_NAME STATUS CONTENTS - - -SYSTEM ONLINE PERMANENTUNDOTBS ONLINE UNDO CWMLITE ONLINE PERMANENTDRSYS ONLINE PERMANENTEXAMPLE ONLINE PERMANENTINDX ONLINE PERMANENTTE
35、MP ONLINE TEMPORARYTOOLS ONLINE PERMANENTUSERS ONLINE PERMANENTJINLIAN ONLINE PERMANENTJINLIAN_INDEX ONLINE PERMANENTJINLIAN_UNDO ONLINE UNDO 已选择12行。 例6-17查询语句的显示结果表明:在该数据库中只有一个临时表空间,该表空间的名为TEMP,因为只有该表空间的CONTENTS列的值为TEMPORARY。为了得到临时表空间和对应的数据文件,您可以使用数据字典v$tablespace和 v$tempfile。于是您使用了如例6-19带有两个表连接的SQ
36、L查询语句,但为了使显示的结果更加清晰您首先使用了如例6-18的SQL*Plus格式化命令例6-18SQL col file for a50例6-19SQL SELECT f.file#, t.ts#, File, Tablespace 2 FROM v$tempfile f, v$tablespace t 3 WHERE f.ts# = t.ts#; FILE# TS# File Tablespace - - - - 1 6 D:ORACLEORADATAORACLE9ITEMP01.DBF TEMP 例6-19查询语句的显示结果表明:6号(TS#为6)表空间TEMP所对应的数据文件为D:O
37、RACLEORADATAORACLE9ITEMP01.DBF,文件号为1(FILE#为1)。现在您就可以使用如例6-20的SQL语句来创建所需的临时表空间了。例6-20SQL CREATE TEMPORARY TABLESPACE jinlian_temp 2 TEMPFILE J:DISK8MOONjinlian_temp.dbf 3 SIZE 10 M 4 EXTENT MANAGEMENT LOCAL 5 UNIFORM SIZE 2 M;表空间已创建。接下来您应该使用如例6-21,例6-22,和例6-23的SQL查询语句来验证一下该表空间是否已经建立,它是否为临时表空间,以及它所对应的
38、数据文件是否也被创建等。例6-21SQL select tablespace_name, status, contents 2 from dba_tablespaces 3 where tablespace_name LIKE JIN%;TABLESPACE_NAME STATUS CONTENTS - - -JINLIAN ONLINE PERMANENTJINLIAN_INDEX ONLINE PERMANENTJINLIAN_TEMP ONLINE TEMPORARYJINLIAN_UNDO ONLINE UNDO 例6-22SQL SELECT f.file#, t.ts#, File
39、, Tablespace 2 FROM v$tempfile f, v$tablespace t 3 WHERE f.ts# = t.ts#; FILE# TS# File Tablespace - - - - 1 6 D:ORACLEORADATAORACLE9ITEMP01.DBF TEMP 2 12 J:DISK8MOONJINLIAN_TEMP.DBF JINLIAN_TEMP例6-23SQL SELECT tablespace_name, block_size, extent_management, 2 segment_space_management, min_extlen 3 F
40、ROM dba_tablespaces 4 WHERE tablespace_name LIKE JIN%;TABLESPACE_NAME BLOCK_SIZE EXTENT_MAN SEGMEN MIN_EXTLEN- - - - -JINLIAN 4096 DICTIONARY MANUAL 53248JINLIAN_INDEX 4096 LOCAL MANUAL 1048576JINLIAN_TEMP 4096 LOCAL MANUAL 2097152JINLIAN_UNDO 4096 LOCAL MANUAL 65536例6-21,例6-22,和例6-23的查询语句显示结果表明:您已经
41、成功地创建了临时表空间jinlian_temp。最后您还应该利用操作系统工具,如NT资源管理器来验证一下临时表空间所对应的物理文件是否真的生成了。本地管理的临时表空间是基于临时数据文件(temp files),这些文件与普通的数据文件非常相似,但它们还具有如下的特性:临时数据文件的状态不能置为只读。不能将临时数据文件重新命名。临时数据文件总是置为NOLOGGING状态。不能使用ALTER DATABASE命令创建临时数据文件。以只读方式运行的数据库需要临时数据文件。介质恢复是不能恢复临时数据文件的。另外,为了优化某一临时表空间中排序的效率,应该将UNIFORM SIZE设为SORT_AREA_
42、SIZE(PGA中排序区的大小)参数的整数倍。默认临时表空间默认临时表空间是在Oracle9i开始引入的。如果在创建一个数据库时没有设定默认临时表空间,那么任何一个用户如果在创建他时没有使用TEMPORARY TABLESPACE子句,他就将使用SYSTEM表空间作为排序区。这将使SYSTEM表空间碎片化,从而使数据库系统的效率下降。如果在创建一个数据库时没有设定默认临时表空间,Oracle服务器将把SYSTEM表空间是默认临时表空间的报警信息写入报警文件。因此说明一个数据库范围的默认临时表空间可以消除使用系统(SYSTEM)表空间对临时数据进行排序的现象,从而提高数据库系统的效率。默认临时表
43、空间即可以在创建数据库时一起创建,也可以在数据库创建之后建立。在创建数据库的同时创建默认临时表空间要使用CREATE DATABASE命令,在数据库创建之后改变默认临时表空间要使用ALTER DATABASE命令。在数据库创建期间建立默认临时表空间的方法在以后的章节中介绍。首先可以利用数据字典DATABASE_PROPERTIES使用如例6-27的查询语句来得到当前的默认临时表空间。为了使显示清晰,您应该首先使用如例6-24,例6-25,和例6-26的SQL*Plus格式化命令。例6-24SQL COL PROPERTY_NAME FOR A25例6-25SQL COL PROPERTY_VA
44、LUE FOR A16例6-26SQL COL DESCRIPTION FOR A38例6-27SQL SELECT * 2 FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME LIKE DEFAULT%;PROPERTY_NAME PROPERTY_VALUE DESCRIPTION- - -DEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace 例6-27的查询语句显示结果表明:表空间TEMP为当前的默认临时表空间。随着潘金莲项目的不断进展,有关该项目的数据处理也变得越来越频繁
45、,为了提高该项目的数据处理的速度,您决定将jinlian_temp临时表空间设为默认临时表空间。于是您发出了如例6-28命令。例6-28SQL ALTER DATABASE 2 DEFAULT TEMPORARY TABLESPACE jinlian_temp;数据库已更改。接下来您可以使用如例6-29的SQL查询语句来验证现在的默认临时表空间是否为jinlian_temp。例6-29SQL SELECT * 2 FROM DATABASE_PROPERTIES 3 WHERE PROPERTY_NAME LIKE DEFAULT%;PROPERTY_NAME PROPERTY_VALUE D
46、ESCRIPTION- - -DEFAULT_TEMP_TABLESPACE JINLIAN_TEMP Name of default temporary tablespace 当不再处理金莲项目数据时,请别忘了将默认临时表空间再改回为TEMP表空间。此时您应该使用如例6-30的命令。例6-30SQL ALTER DATABASE 2 DEFAULT TEMPORARY TABLESPACE temp;数据库已更改。最后您还是应该使用如例6-31的SQL查询语句来验证一下现在的默认临时表空间是否为temp。例6-31SQL SELECT * 2 FROM DATABASE_PROPERTIES
47、 3 WHERE PROPERTY_NAME LIKE DEFAULT%;PROPERTY_NAME PROPERTY_VALUE DESCRIPTION- - -DEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace 在结束这一节之前,最后介绍一下在默认临时表空间上的一些限制。首先默认临时表空间不能被删除,除非有一个新的可以使用的默认临时表空间。也就是必须先使用ALTER DATABASE将一新的临时表空间设置为默认临时表空间,之后才能删除旧的(默认)临时表空间。使用旧的(默认)临时表空间的用户被自动地赋予新的默认临
48、时表空间。因为默认临时表空间必须是临时(TEMPORARY)表空间或者是系统(SYSTEM)表空间,所以不能将默认临时表空间改为一个永久表空间。也不能将默认临时表空间设置为脱机。(在接下来的几节中我们将介绍这些操作。)设置表空间为脱机 一个表空间的正常状态是联机(Online)状态,此时数据库用户可以访问该表空间中的数据。然而,有时数据库管理员需要将某一表空间设置为脱机状态,以进行数据库的维护。其维护工作包括:在数据库处在打开状态下移动数据文件在数据库处在打开状态下恢复一个表空间或一个数据文件执行对表空间的脱机备份(虽然对表空间可以进行联机备份)使数据库的一部分不可以被访问,而其它的部分可以被
49、正常地访问当一个表空间被设置为脱机状态时,该表空间上的数据是不可以访问。如果用户试图访问该表空间上的数据就会收到出错信息。当一个表空间被设置为脱机状态时或重新被设置为联机状态时,Oracle会把这一事件记录在数据字典和控制文件中,也会记录在报警文件中。如果当数据库被关闭时,某一表空间为脱机状态,那么当数据库被加载(MOUNT)和重新打开时该表空间仍保持为脱机状态。并不是所有的表空间都可以被设置为脱机状态,以下的表空间不能被设置为脱机状态:系统(SYSTEM)表空间上面有活动的还原/回滚段的表空间默认临时表空间假设JINLIAN数据表空间出了些问题,需要对它进行维护。于是要将它的状态设为脱机。但
50、为了慎重起见您先使用了如例6-32和例6-34的SQL查询语句以获取该表空间和它对应的数据文件现在的状态。例6-32SQL select tablespace_name, status, contents 2 from dba_tablespaces 3 where tablespace_name LIKE JIN%;TABLESPACE_NAME STATUS CONTENTS - - -JINLIAN ONLINE PERMANENTJINLIAN_INDEX ONLINE PERMANENTJINLIAN_TEMP ONLINE TEMPORARYJINLIAN_UNDO ONLINE
51、UNDO 例6-33SQL col name for a55例6-34SQL SELECT file#, name, status 2 FROM v$datafile 3 WHERE file# = 8; FILE# NAME STATUS - - - 8 D:ORACLEORADATAORACLE9IUSERS01.DBF ONLINE 9 J:DISK2MOONJINLIAN01.DBF ONLINE 10 J:DISK4MOONJINLIAN02.DBF ONLINE 11 J:DISK6MOONJINLIAN_INDEX.DBF ONLINE 12 J:DISK7MOONJINLIAN
52、_UNDO.DBF ONLINE 从例6-32和例6-34的查询结果显示可以看出:表空间JINLIAN以及与它相对应的两个数据文件J:DISK2MOONJINLIAN01.DBF和J:DISK4MOONJINLIAN02.DBF都处在联机状态。此时您就可以使用如例6-25的命令将表空间JINLIAN置为脱机状态。例6-25SQL ALTER TABLESPACE jinlian OFFLINE;表空间已更改。接下来您应该验证一下以上命令是否成功。可以使用了如例6-36和例6-37的查询语句以获取该表空间和它对的数据文件现在的状态。例6-36SQL select tablespace_name,
53、 status, contents 2 from dba_tablespaces 3 where tablespace_name LIKE JIN%;TABLESPACE_NAME STATUS CONTENTS - - -JINLIAN OFFLINE PERMANENTJINLIAN_INDEX ONLINE PERMANENTJINLIAN_TEMP ONLINE TEMPORARYJINLIAN_UNDO ONLINE UNDO 例6-37SQL SELECT file#, name, status 2 FROM v$datafile 3 WHERE file# = 8; FILE#
54、NAME STATUS - - - 8 D:ORACLEORADATAORACLE9IUSERS01.DBF ONLINE 9 J:DISK2MOONJINLIAN01.DBF OFFLINE 10 J:DISK4MOONJINLIAN02.DBF OFFLINE 11 J:DISK6MOONJINLIAN_INDEX.DBF ONLINE 12 J:DISK7MOONJINLIAN_UNDO.DBF ONLINE 从例6-36和例6-37的查询结果显示可以看出:表空间JINLIAN以及与它相对应的两个数据文件J:DISK2MOONJINLIAN01.DBF和J:DISK4MOONJINLIA
55、N02.DBF都已经处在脱机状态。这说明例6-25的命令已经成功地执行。当维护工作结束后,您就应该尽快地使用如例6-38的命令将表空间JINLIAN置回为联机状态。例6-38SQL ALTER TABLESPACE jinlian ONLINE;表空间已更改。接下来您应该验证一下以上命令是否成功。您可以使用如例6-39和例6-40的查询语句以获取该表空间和它对的数据文件现在的状态。例6-39SQL select tablespace_name, status, contents 2 from dba_tablespaces 3 where tablespace_name LIKE JIN%;T
56、ABLESPACE_NAME STATUS CONTENTS - - -JINLIAN ONLINE PERMANENTJINLIAN_INDEX ONLINE PERMANENTJINLIAN_TEMP ONLINE TEMPORARYJINLIAN_UNDO ONLINE UNDO 例6-40SQL SELECT file#, name, status 2 FROM v$datafile 3 WHERE file# = 8; FILE# NAME STATUS - - - 8 D:ORACLEORADATAORACLE9IUSERS01.DBF ONLINE 9 J:DISK2MOONJI
57、NLIAN01.DBF ONLINE 10 J:DISK4MOONJINLIAN02.DBF ONLINE 11 J:DISK6MOONJINLIAN_INDEX.DBF ONLINE 12 J:DISK7MOONJINLIAN_UNDO.DBF ONLINE 从例6-39和例6-40的查询结果显示可以看出:表空间JINLIAN以及与它相对应的两个数据文件J:DISK2MOONJINLIAN01.DBF和J:DISK4MOONJINLIAN02.DBF都已经处在联机状态。这说明例6-38的命令已经成功地执行。现在您就可以通知使用JINLIAN表空间上数据的用户可以正常地操作该表空间上的数据了。
58、只读(Read-Only)表空间当一个表空间处在只读状态时,在该表空间中的数据只能进行读操作,也就是说在上面的数据是不会变化的,因此也就不需要重做日志的保护,所以操作只读状态表空间上的数据时不会产生重做操作。这也就提高了系统的效率。由于只读表空间上的数据是不变的,所以对该表空间只要做一次备份就够了。这不但减少了数据库系统的维护工作量还使系统的负荷减轻。因此如果将一个数据库精心设计把许多不变的数据归类放在一个或几个表空间中,然后将它们的状态改为只读,将会使该数据库的维护更加容易而且效率更高。当使用命令将一个表空间的状态改为只读时,一开始该表空间处于一种中间的状态。在这种状态下,除了那些没有完成的
59、事务之外在该表空间中不能进行任何的写操作,一旦那些没有完成的事务结束(即可以是提交也可以是回滚),该表空间就被置为只读状态。将一个表空间的状态改为只读时Oracle会产生检查点。可以删除只读表空间中的对象,如表和索引,这是因为删除对象的命令是DDL语句,它们只修改数据字典而不是数据文件。将一个表空间的状态改为只读时或反过来将一个表空间的状态改为可读可写(正常)时,该表空间必须处在联机状态。随着潘金莲项目不断进展,有关该项目的数据处理也变得越来越频繁,系统的效率已经成为了一个大问题。经过仔细分析,您发现潘金莲项目的数据是以批处理的方式定期输入的,一旦输入后上面的数据是不能修改的。于是为了提高该项
60、目的数据处理的速度,您决定在每次输入数据之后将jinlian表空间的状态改为只读。于是您发出了如例6-41命令。例6-41SQL ALTER TABLESPACE jinlian READ ONLY;表空间已更改。接下来您应该验证一下以上命令是否成功。可以使用如例6-42的查询语句以获取表空间的状态信息。例6-42SQL select tablespace_name, status, contents 2 from dba_tablespaces 3 where tablespace_name LIKE JIN%;TABLESPACE_NAME STATUS CONTENTS - - -JIN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年第12课从明朝建立到清军人关-勤径学升高中历史必修上同步练测(统编版2019)
- 园林养护人员雇佣合同范文2025年
- 2025年伙伴合同终止协议
- 2025年企业办公用品综合供需合同
- 2025年官方物流配送协议书高清
- 2025年企业设备抵押担保贷款合同
- 2025年动物收养协议版式
- 2025年粮食供需双方合同策划大纲
- 2025年智能交通项目提案报告模式
- 2025年企业维修保养年合作协议
- 咖啡店合同咖啡店合作经营协议
- 2025年山东铝业职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 药膳与食疗试题及答案高中
- 北京市西城区2024-2025学年八年级上学期期末考试数学试卷含答案
- 2025年南京信息职业技术学院高职单招数学历年(2016-2024)频考点试题含答案解析
- 二零二五年度海外市场拓展合作协议4篇
- 北京市朝阳区2024-2025学年七年级上学期期末考试数学试卷(含答案)
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
- 公共关系学完整教学课件
- Z3050型 摇臂钻床使用说明书
- 加油站数质量管理考核办法版.doc
评论
0/150
提交评论