les08表空间与数据文件补充.docx

上传人:b****8 文档编号:23556327 上传时间:2023-05-18 格式:DOCX 页数:35 大小:70.43KB
下载 相关 举报
les08表空间与数据文件补充.docx_第1页
第1页 / 共35页
les08表空间与数据文件补充.docx_第2页
第2页 / 共35页
les08表空间与数据文件补充.docx_第3页
第3页 / 共35页
les08表空间与数据文件补充.docx_第4页
第4页 / 共35页
les08表空间与数据文件补充.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

les08表空间与数据文件补充.docx

《les08表空间与数据文件补充.docx》由会员分享,可在线阅读,更多相关《les08表空间与数据文件补充.docx(35页珍藏版)》请在冰豆网上搜索。

les08表空间与数据文件补充.docx

les08表空间与数据文件补充

第13章表空间与数据文件管理

在许多地方都提到表空间的管理,但是从完整的角度来阐述表空间与数据文件的管理还没有给出,所以这里给出表空间和数据文件管理的简要描述:

§13.1表空间与数据文件

Tablespace1Tablespace2

数据库=system表空间+users表空间+tools表空间+rbs表空间+temp表空间+...+xx表空间

system表空间=SYSTEM01.DBF数据文件1+SYSTEM02.DBF数据文件2

......

如:

SQL>selecttablespace_name,file_name,bytesfromdba_data_files;

TABLESPACE_NFILE_NAMEBYTES

---------------------------------------------------------------------

USERSD:

\ORACLE\ORADATA\ORA816\USERS01.DBF20971520

DRSYSD:

\ORACLE\ORADATA\ORA816\DR01.DBF20971520

TOOLSD:

\ORACLE\ORADATA\ORA816\TOOLS01.DBF10485760

INDXD:

\ORACLE\ORADATA\ORA816\INDX01.DBF20971520

RBSD:

\ORACLE\ORADATA\ORA816\RBS01.DBF73400320

TEMPD:

\ORACLE\ORADATA\ORA816\TEMP01.DBF92405760

SYSTEMD:

\ORACLE\ORADATA\ORA816\SYSTEM01.DBF246939648

SYSTEMD:

\ORACLE\ORADATA\ORA816\SYSTEM02.DBF10485760

已选择8行。

●数据库与表空间

Oracle包含多个逻辑存储空间叫表空间;表空间存放数据库的所有数据。

●表空间与数据文件

一个Oracle表空间包含一个或多个文件叫数据文件或Oracle数据库文件。

这些文件是操作能看见,但只有Oracle系统能读写的文件。

●数据库与数据文件

一个数据库的数据共同存储在数据文件里,数据文件建立在数据库的表空间里。

另外,读者还要注意下面的概念:

●Oracle块(数据库块)是Oracle系统可以在磁盘间移动的单位;

●Oracle8i之后的Oracle块可以从2KB到64KB字节;

●单个块不能存放整个表,因而将块组合成段(segment)来存储表中的数据;

●一个段包含一个(或构成cluster的表)表的多个行;

●索引段包含有有序的索引项数据;

●Oracle可以有很大的段,很大的段不可能放在一组相临的Oracle块里。

§13.2创建表空间

需要有CREATETABLESPACE或CREATEANYTABLESPACE,ALTERTABLESPACE的权限。

才能创建表空间。

§13.2.1新类型表空间

●Oracle8i以前版本(Oraclereleases8.0和以前的版本),所有的表空间都是字典管理类(dictionary-mamaged)表空间,它特点是利用SQL字典跟踪磁盘的使用情况;

●Oracle8i版本可以创建字典类型表空间;也可以创建本地(locally-managed)表空间,本地表空间利用位图来跟踪表空间的使用情况(已使用和自由空间);

●Oracle虽然兼容两种类型的表空间,但建议从现在起最好创建本地表空间。

§13.2.2创建表空间语法

创建表空间的CREATETABLESPACE命令语法如下:

CREATETABLESPACEtablespace

DATAFILE'/path/filename'SIZEinteger[K|M]REUSE

[,'/path/filename'SIZEinteger[K|M]REUSE]

[AUTOEXEND[OFF|ONNEXTinteger[K|M]][MAXSIZE[UNLIMITED|integer[K|M]]]]

[MINIMUMEXTENTinteger[K|M]]

[DEFAULTSTORAGEstorage]

[ONLINE|OFFLINE]

[LOGGING|NOLOGGING]

[PERMANENT|TEMPORARY]

[EXTENTMAANGEMENT

[DICTIONARY|LOCAL[AUTOALLOCATE|UNIFORMSIZEinteger[K|M]]]

]

说明:

●tablespace要创建的表空间名字;

●'/path/filename一个多个数据文件路径与名字;当使用size和reuse时,表示若该文件存在,则清除该文件再重新建立该文件,若该文件不存在,则建立该文件。

●AUTOEXEND[OFF|ON...设为自动扩展或非自动扩展。

●MAXSIZE[UNLIMITED|integer[K|M]]当AUTOEXTEND为ON自动扩展时,允许的最大长度。

●MINIMUMEXTENT指定最小的长度,缺省为操作系统和数据库块确定。

●[DEFAULTSTORAGEstorage]指定以后要创建的表、索引及簇的存储参数值。

值得注意的是,这些参数将影响以后表等的存储参数值。

●[PERMANENT|TEMPORARY]创建的表空间为永久或临时表空间。

缺省为永久表空间。

●[LOGGING|NOLOGGING]指定日志属性,它可使将来的表、索引等是否需要进行日志处理。

缺省为要日志。

注意只要下面才支持NOLOGGING:

1)SQL*LOAD的直接数据加载;

2)CREATETABLE...ASSELECT,CREATEINDEX,ALTERINDEX...

REBUILD,ALTERINDEX...REBUILDPARTITION,ALTERINDEX...SPLIT

PARTITION,ALTERTABLE...SPLITPARTITION,及ALTERTABLE...MOVE

PARTITION

注意,如果设置为NOLOGGING模式,则不能进行恢复处理,因为所有的处理都不会写到日志文件中。

●[PERMANENT|TEMPORARY]是说明表空间是永久的或是临时的。

●DICTIONARY是指定表空间为字典管理表空间,缺省为DICTIONARY。

●LOCAL是指定表空间为本地管理表空间。

●AUTOALLOCATE是指定有系统自动管理。

此时不能指定大小。

●UNIFORM是指定表空间的扩展按照等同大小进行。

缺省为1MB。

●[DEFAULTSTORAGEstorage]是存储参数,它的值可以表达如下:

STORAGE(

INITIALinteger[K|M]

NEXTinteger[K|M]

MINEXTENTSinteger

MAXEXTENTSinteger[UNLIMITED]

PCTINCREASEinteger

FREELISTSinteger

FREELISTGROUPSinteger

OPTIMAL[integer[K|M]|NULL]

BUFFERPOOL[KEEP|RECYCLE|DEFAULT]

INITIAL整数,开始分配的字节数,缺省为5块,块大小依OS,可以

K、M表示单位,系统自动确定舍入到一个整数单位。

NEXT整数,下一次分配的字节数,可以K、M表示单位。

PCTINCREASE第二次之后每次增长的百分比,缺省为50,意思是比上

一次扩展多50%。

如果为0,意思是第二次以后的分配与

第一次相同大小,最大依OS而定。

回滚段不能指定此参

数值,其值总是0。

MINEXTENTS整数,即使在空间不连续情况下,你可以指定的分配数。

MAXEXTENTS整数,包括第一次在内的最大扩展数。

OPTIMAL最优分配,即为回滚段指定一个最优大小,表空间不需指定此参数。

FREELISTGROUPS在并行服务器中指定表或分类、索引组的自由列表数目。

缺省为1。

每个自由列表组使用一个数据库块,因此有:

1)如果指定的INITIAL参数不够大,则Oracle就加大INITIAL值。

2)如果在一个本地管理类表空间里创建一个对象并且根据该组自由列数来进行分配,如果不够分配时就失败。

FREELISTS在并行服务器中指定表、簇、索引的自由列表数。

与表空间不同,表、分区、簇、及索引需要指定自由列表数。

缺省值和最小值为1。

意思是每个自由列表组包含一个自由列表。

如果pctincrease不为0,则NEXT=SIZEof(previous_extent)x(1+PCTINCRASE/100)

§13.2.3创建字典管理表空间

传统的表空间就是字典管理表空间。

在Oracle在数据字典中更新有关的表(无论分配一个扩展或为了重使用而释放扩展)时,它都利用数据字典来管理表空间的扩展。

Oracle也在表空间的回滚段里存储回滚信息。

因为数据字典表和回滚段都是数据库的一部分。

所以数据字典表和回滚段(即表空间)所占据的空间隶属于相同的空间管理。

Oracle8i版本里,字典表空间的创建方法与以前的版本一样,例子如下:

例1:

创建一般的字典管理类表空间:

CREATETABLESPACEmytablespace

DATAFILE'/u02/oracle/oradata/tab01.dnf'size100m

DEFAULTSTORAGE(initial512knext128kminextents2maxextents999

pctincrease0);

例2:

创建一般的字典管理类表空间并使该表空间处于ONLINE:

CREATETABLESPACEtabspace_2

DATAFILE'diska:

tabspace_file2.dat'SIZE20M

DEFAULTSTORAGE(INITIAL10KNEXT50K

MINEXTENTS1MAXEXTENTS999)

ONLINE;

例3:

创建一个能自动扩展的字典管理类表空间:

CREATETABLESPACEtabspace_5

DATAFILE'diskb:

tabspace_file3.dat'SIZE500KREUSE

AUTOEXTENDONNEXT500KMAXSIZE10M;

例4:

创建带最小扩展的字典管理类表空间:

CREATETABLESPACEtabspace_3

DATAFILE'tabspace_file5.dbf'SIZE2M

MINIMUMEXTENT64K

DEFAULTSTORAGE(INITIAL128KNEXT128K)

LOGGING;

§13.2.4创建本地管理表空间

本地表空间与字典表空间不一样,它是使用位图来对表空间所对应的数据文件的自由空间和块的使用状态进行跟踪。

位图中的每个位(bit)对应一个块或一组块。

当分配一个扩展或释放一个扩展时,Oracle就改变该位图的值来指示该块的状态。

这些位图值的改变不产生回滚信息,因为它们不去更新数据字典的任何表。

所有本地管理表空间有下列优点:

●本地的扩展管理,避免重复发生的空间管理操作。

●本地管理的自动扩展跟踪临近的自由空间,消除接合自由空间的麻烦。

本地的扩展大小可以有系统自动确定。

可以选择所有扩展有同样的大小。

EXTENTMANAGEMENTLOCAL子句指定创建可变的表空间。

●可以在CREATETABLESPACE语句中使用EXTENTMANAGEMENTLOCAL来建立永久表空间。

●可以在CREATETEMPORARYTABLESPACE语句中使用EXTENTMANAGEMENTLOCAL来建立临时表空间。

例1:

假设数据库块为2K,则本地管理类表空间建立命令为:

CREATETABLESPACEtbs_1DATAFILE'file_1.f'SIZE10M

EXTENTMANAGEMENTLOCALUNIFORMSIZE128K;

每个扩展都是128K,并且位图中的每个位描述64块(因为128k/1块=128k/2k)。

例2:

创建本地管理类表空间:

CREATETABLESPACEtbs_2DATAFILE'/u02/oracle/oradata/tbs02.ora'SIZE10MEXTENTMANAGEMENTLOCALAUTOALLOCATE;

注意:

●一般建议的应用系统建议不要创建为AUTOALLOCATE或UNIFORMSIZE;

●如果表空间将来要存储的对象类型不同,需要的空间也不同,则可以不防采用AUTOALLOCATE

●如果对所要存放的对象的容量比较清楚,比如记录的长度固定等。

则可以采用UNIFORMSIZE来指定明确的大小。

§13.2.5创建临时表空间

临时表空间是Oracle系统用于排序的磁盘空间,一般是在排序时使用,使用完毕后可以释放的空间。

因此称作临时表空间。

下面语句可以引起排序:

●ORDERBY

●GROUPBY

●SELECTDISTINCT

●UNION

●INTERSECT

●MINUS

●ANALYZE

●CREATEINDEX

●连接两个没有索引的表。

§13.2.5.1创建字典管理类临时表空间

Oracle8i提供两种方式来创建字典管理类临时表空间。

看下面例子:

方法1:

使用CREATETABLESPACE命令

可以使用CREATETABLESPACE语句创建表空间,然后该语句后加TEMPORARY关键字来说明所创建的表空间是临时表空间。

如:

CREATETABLESPACEfin_sort

DATAFILE'/u02/oracle/oradata/sort1.dbf'SIZE100M

DEFAULTSTORAGE(INITIAL5MNEXT1MMINEXTENTS1PCTINCREASE0)

TEMPORARY;

方法2:

可以将已经存在的表空间修改为临时表空间:

ALTERTABLESPACETab_sortTEMPORARY;

§13.2.5.2创建本地管理类临时表空间

Oracle8i要求用CREATETEMPORARYTABLESPACE命令来创建本地临时表空间。

它的语法与CREATETABLESPACE一样。

一般只要用户具有CREATETABLESPACE权限即可进行本地临时表空间的创建。

例1:

创建一个每个扩展都是16m的本地临时表空间:

CREATETEMPORARYTABLESPACEtbs_1TEMPFILE'file_1.f'

EXTENTMANAGEMENTLOCALUNIFORMSIZE16M;

如果数据库块大小是2K,则位图中的每个位(bit)可表示一个扩展,每个位可以映射为8000块。

例2:

创建一个本地临时表空间,如果对应的数据文件存在,则重建立该数据文件:

CREATETEMPORARYTABLESPACEimtempTEMPFILE

'/u02/oracle/oradata/sort1.ora'SIZE20MREUSE

EXTENTMANAGEMENTLOCALUNIFORMSIZE16M;

§13.2.5.3改变本地管理类临时表空间

这样创建了本地管理临时表空间,它只允许用ALTERTABLESPACE来对该表空间追加新的临时数据文件。

别的操作是不允许的。

如:

例1:

追加新的临时文件到已存在的临时表空间中:

ALTERTABLESPACEimtempADDTEMPFILE

'/u02/oracle/oradata/sort2.ora'SIZE30MREUSE

注意:

在改变表空间的类型时,需要注意下面的限制:

●不允许用ALTERTABLESPACE带TEMPORARY来改变本地管理的永久表空间为临时表空间;

●可以用户ALTERTABLESPACE带TEMPORARY来改变字典管理表空间为临时表空间。

●可以直接用CREATETEMPORARYTABLESPACE来创建本地临时表空间。

例2:

临时表空间脱机或联机:

ALTERDATABASETEMPFILE'/u02/oracle/oradata/sort2.ora'OFFLINE;

ALTERDATABASETEMPFILE'/u02/oracle/oradata/sort2.ora'ONLINE;

例3:

调整临时表空间对应的临时文件的大小:

ALTERDATABASETEMPFILE‘/u02/oracle/oradata/sort2.ora'RESIZE5M;

例4:

删除一个临时文件:

ALTERDATABASETEMPFILE'/u02/oracle/oradata/sort2.ora'DROP;

§13.3表空间日常管理

表空间完成后,管理员还要对系统中的各个表空间进行管理,以保证系统正常运行。

本节给出作者本人在工作的表空间的日常管理介绍,希望能对广大读者有所帮助。

§13.3.1管理SYSTEM表空间

当Oracle数据库系统安装完成后,SYSTEM表空间就处于下面状态:

●Oracle安装完成后,自动建立SYSTEM表空间;

●当数据库实例启动后,SYSTEM中是处于ONLINE;

●SYSTEM表空间包含数据库系统的数据字典表;

●所有的PL/SQL程序部件(存储过程、函数、包及触发器)驻留在SYSTEM表空间里;

虽然在安装完成SYSTEM表空间处于正常状态,但并不是不需要管理系统运行得很好了。

其实,当系统安装完成后,管理员应该对SYSTEM表空间的存储参数进行调整,主要是调整NEXT值,如:

SQL>colsegment_namefora20

SQL>colbytesfor999,999,999

SQL>colnext_extentfor99,999,999

SQL>colinitial_extentfor99,999,999

SQL>selectsegment_name,initial_extent,next_extent

2fromdba_segmentswheresegment_type='ROLLBACK';

SEGMENT_NAMEINITIAL_EXTENTNEXT_EXTENT

---------------------------------------------

SYSTEM57,34457,344

RBS0524,288524,288

RBS1524,288524,288

RBS2524,288524,288

RBS3524,288524,288

RBS4524,288524,288

RBS5524,288524,288

RBS6524,288524,288

已选择8行。

SQL>altertablespacesystemdefaultstorage(next1mpctincrease0);

表空间已更改。

§13.3.2使用多个表空间

一个很小的数据库可以只需要有SYSTEM表空间,但Oracle公司建议至少建立一个附加的表空间来存放用户数据,以便与系统数据字典分开,达到减少冲突等目的。

使用多个表空间可以达到:

●控制数据库数据的磁盘空间分配;

●分配空间限额给用户;

●通过采用独立表空间的ONLINE或OFFLINE来控制数据的可用性;

●执行局部数据库备份与恢复;

●将用户的数据从系统表空间中分裂出来,以减少与Oracle系统的争用。

●在不同磁盘上存储表空间的数据文件,以减少I/O争用。

●为专门的用途建立专门的表空间,比如用频繁的大量更新、或作临时表空间用。

●备份个别重要的表空间。

§13.3.3修改表空间的存储参数

由于Oracle8i支持了两种类型的表空间,有点让读者搞不清的是:

是否两类型的存储参数上都可以修改呢?

从创建的命令来看,字典管理类表空间使用了DEFAULTSTORAGE子句来说明存储参数,所以,只有字典管理类表空间才能修改存储参数。

看下面操作:

SQL>selecttablespace_name,initial_extent,next_extent,min_extents,max_extents,

pct_increasefromdba_tablespaces;

TABLESPACE_NAMEINITIAL_EXTENTNEXT_EXTENTMIN_EXTENTSMAX_EXTENTSPCT_INCREASE

------------------------------------------------------------------------

SYSTEM65536655361214748364550

RBS5242885242888409650

USERS131072131072140960

TEMP655366553610

TOOLS3276832768140960

INDX131072131072140960

DRSYS65536655361214748364550

已选择7行。

以上查询结果是系统安装完成后的字典表空间情况。

下面开始创建一个新的本地表空间:

SQL>createtablespaceuser_data

2'D:

\ORACLE\ORADATA\ORA816\data01.dbf'size5m

3extentmanagementlocalautoallocate;

表空间已创建。

到次所创建的表空间user_data已经成功完成。

接着在查询一下有关表空间的信息:

SQL>selecttablespace_name,initial_extent,next_extent,

min_extents,max_extents,pct_increasefromdba_tablespaces;

TABLESPACE_NAMEINITIAL_EXTENTNEXT_EXTENTMIN_EXTENTSMAX_E

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1