龙空技术网

Oracle 逻辑结构篇 之逻辑结构(四)数据块和段空间管理

一山丘一只羊 294

前言:

今天朋友们对“oracle9i删除表空间”大致比较珍视,各位老铁们都需要知道一些“oracle9i删除表空间”的相关内容。那么小编同时在网摘上网罗了一些有关“oracle9i删除表空间””的相关知识,希望小伙伴们能喜欢,大家一起来了解一下吧!

五、数据块

块是 Oracle 数据库执行输入/输出(I/O) 的最小单位,相应地,操作系统执行输入/出(I/O) 的最小单位为一个操作系统块的大小。假定某用户执行“SELECT* FROM emp WHEREempno=7788”只会返回 100Byte 的数据,而数据块尺寸为 2KB,那么 Oracle 会在数据文件上读取多少数据到数据高速缓存呢?因为 Oracle 数据库输入/输出的最小单位是块,所以一次读取的数据是一个数据块,即读取是 2 KB 的数据。

在 Oracle9i 之前,同一个数据库的所有表空间必须具有相同的数据块尺寸;而从Oracle9i 开始,不同表空间可以具有不同的数据块尺寸。

(一)、多重数据块支持

Oracle9i 支持创建具有多种块大小的数据库。此功能在下列情况下非常有用:• 将表空间从联机事务处理(OLTP) 数据库传送到企业数据仓库时。使用 Oracle9i,可方便地在具有不同块大小的数据库之间传送数据。• 要求能够在具有相应块大小的表空间中定位对象以最大限度地提高 I/O 性能时使用 Oracle9i,除了标准的块大小外,还可以指定最多四种非标准的块大小,如果想使用非标准大小的块,必须在初始化参数文件中,为每个非标准块大小配置子高速缓存。也可以在实例运行过程中配置子高速缓存,可以创建具有其中任意块大小的表空间。如果创建的表空间是非标准块大小,那么在建立表空间时使用 BLOCKSIZE 选项定义表空间所使用的非标准块尺寸。

(二)、标准块与非标准块大小 1.标准块大小

在 SYSTEM 表空间以及任何临时表空间中使用的块大小为标准块大小,除非进行指定,表空间的缺省块大小为标准块。数据块尺寸是由初始化参数 DB_BLOCK_SIZE 指明,其尺寸应该设置为操作系统(OS)块尺寸的整数倍,所以一个数据块由一个或多个操作系统块组,并且该参数的取值一般为 2KB、4KB、8KB、16KB、32KB 等。

通常,将 DB_BLOCK_SIZE 设置为 4 KB 或 8 KB。如果没有指定,则使用缺省数据块小,缺省数据块大小取决于所用的操作系统,在创建数据库后将不能更改标准块大小,如果想更改标准块大小,只能重新创建数据库。使用 DB_CACHE_SIZE 参数指定标准块大小缓冲区的高速缓存大小。DB_CACHE_SIZE 最小值为一个粒组(granule),默认为 48MB.粒组大小由 SGA 来决定,如果 SGA<128MB,一个 granule 则是 4MB,如果 SGA>128MB,一个 granule 则 是 16MB。

2.非标准块大小

从 Oracle 9i 开始,除可以使用标准块大小外,还可以使用非标准块大小,取值范围是2KB、4KB、8KB、16KB、32KB。如果希望使用非标准块,必须在数据库缓冲区为数据库使用的各种块大小指定高速缓存大小。即如果要在数据库中使用多种块大小,则必须设置DB_CACHE_SIZE 和至少一个 DB_nK_CACHE_SIZE 参数。每个参数为相应的块大小指定了缓冲区高速缓存大小。如下所示:

DB_2K_CACHE_SIZE 为 2KB 的块指定数据库高速缓存大小

DB_4K_CACHE_SIZE 为 4KB 的块指定数据库高速缓存大小

DB_8K_CACHE_SIZE 为 8KB 的块指定数据库高速缓存大小

DB_16K_CACHE_SIZE 为 16KB 的块指定数据库高速缓存大小

DB_32K_CACHE_SIZE 为 32KB 的块指定数据库高速缓存大小

如果 nK 是标准块大小,则不能指定的大小,DB_nK_CACHE_SIZE 参数的缺省值为零。如果存在块大小为 nKB 的联机表空间,则不要将此参数设置为零。最小可以设一个 granule。

(三)、创建非标准块表空间

可创建标准块大小的表空间,也可以创建非标准块大小表空间,使用 BLOCKSIZE 子句为表空间指定非标准块大小,要指定该子句,必须设置 DB_CACHE_SIZE 和至少一个DB_nK_CACHE_SIZE 参数,在该子句中指定的整数必须与某个 DB_nK_CACHE_SIZE 参数中的 对应。

【实例4-1】创建一个 2K 块大小的表空间 mytbs2k,并验证。

1)以 sys 用户登录CONN / AS SYSDBA已连接2)设置初始化参数 DB_2K_CACHE_SIZE, 重新启动使参数设置生效SQL> ALTER SYSTEM SET DB_2k_CACHE_SIZE=16M SCOPE=SPFILE;系统已更改。SQL> SHUTDOWN数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。SQL> STARTUPORACLE 例程已经启动。Total System Global Area 47258064 bytesFixed Size 453072 bytesVariable Size 29360128 bytesDatabase Buffers 16777216 bytesRedo Buffers 667648 bytes数据库装载完毕。数据库已经打开。3)创建表空间CREATE TABLESPACE mytbs2kDATAFILE 'd:\oracle\oradata\db01\mytbs2k_1.dbf' SIZE 10MBLOCKSIZE 2K;表空间已创建。4)验证SQL> SELECT tablespace_name,block_sizeFROM dba_tablespacesWHERE tablespace_name='MYTBS2K';TABLESPACE_NAME BLOCK_SIZE------------------------------ ----------MYTBS2K 2048

执行上述命令后,创建名为 mytbs2k 的表空间,表空间中块的大小为 2KB,查DBA_TABLESPACES 数据字典视图,可以看新建表空间的块大小为 2K。

多种块大小使用要注意:

• 分区对象的所有分区必须位于具有相同块大小的表空间中。• 所有临时表空间必须采用标准块大小,包括用作缺省临时表空间的永久表空间。• 按索引组织的表溢出和外部 LOB 段可以存储在块大小与基表不同的表空间中。 (四)、数据块的存储参数

当建立数据对象(表、索引、簇)时,通过指定合理的块空间使用参数可以提高块访问性能和并发性,使用参数可用来控制对数据段和索引段空间的使用。参数分为:控制并性的参数和控制空间使用的参数两类。

1.控制并发性的参数

INITRANS 和 MAXTRANS:指定初始的和最大的事务槽(Transaction slot)数,这些事务槽在索引块或者数据块内创建。事务槽用来存储在某一时间点对块进行更改的事务处理的有关信息。一个事务只占用一个事务槽。

P4-1:数据块的管理参数

INITRANS:保证最低级别的并发性。对于数据段和索引段,INITRANS 的缺省值分别为 1 和 2,以保证最低级别的并发性。例如,设置 INITRANS 的值为 3,那么初始阶段可以有 3 个事务同时访问一个数据块。如果需要,也可以从块空闲空间内分配更多事务槽,以允许更多的事务处理并发修改块内的行。

MAXTRANS:缺省值为 255,它用于设置可更改数据块或者索引块的并发事务处理数的限制。例如 MAXTRANS 的值设为 10 时,访问同一数据块的事务数超过 3 之后,需要为新事务分配新的事务槽,并且最大并发事务个数为 10。

2.控制数据空间使用的参数

PCTFREE:对于数据段而言,此参数用于指定每个数据块中保留空间所占的百分比,当更新块内的行需要更多空间,就会使用保留空间。PCTFREE 的缺省值为 10%。

PCTUSED:对于数据段而言,此参数表示 Oracle 服务器为表内每个数据块所保留的已用空间的最低百分比。如果一个块的已用空间低于 PCTUSED,则将该块放回到空闲列表中。加入段的空闲列表的块可以用于重新插入数据。缺省情况下,每个段在创建时都有一个空列表。通过设置存储子句的 FREELISTS 参数,可以创建有更多空闲列表的段。

PCTUSED 的缺省值为 40%。PCTFREE 和 PCTUSED 都按可用数据空间百分比来计算,可用数据空间是从整个块大小减去块头空间后剩余的块空间。

六、段空间的管理

可以使用两种方法来管理数据块:

• 自动段空间管理• 手动管理 (一)、手动数据块管理

在以前的 Oracle 版本中,这是唯一可用的方法。而且默认的块管理方式为手动管理。手动数据块管理允许手动配置数据块使用参数,例如:PCTFREE 参数,PCTUSED 参数FREELIST 参数。

下面过程介绍对于 PCTFREE=20 且 PCTUSED=40 的数据段如何管理块内的空间(如图 10-5 所示):

当向块中插入行时,块的空闲空间在减少,直到块内的空闲空间等于或者小于 20%,此时行所占用的块内可用数据空间达到 80% (100 – PCTFREE) 或者更多后,此后则无法在该块内插入数据。

剩余的 20% 可在行大小增长时使用。例如,更新初始为 NULL 的列并分配一个值。样,更新后的块使用率可能超过 80%。

如果由于更新,删除了块内的行或者行大小减少,块使用率可能跌至 80% 以下。但是,仍然无法向块中插入,直到块使用率跌至 PCTUSED(在本例中为 40%) 以下,则该块可用于重新插入。

P4-2:pctfree与pctused参数示意

(二)、段空间自动管理

段空间管理方式可以采用自动段空间管理的方式,它是一种在数据库段内管理空闲空间的方法。自动段空间管理使用位图完成对段内空闲和已用空间的跟踪(与使用空闲列表相对)。位图段包含一个位图,它描述了与段中的可用空间相关的每个块的状态。该位图包含在单独的一组块中,这些块称为“位图块”,插入新行时,服务器就会在该位图中搜索是否具有足够空间的块,有则插入数据。当块中的可用空间数量发生变化时,位图中就会反映出它的新状态。使用自动段空间管理更方便、空间使用率更高,并且改进了并发 INSERT 操作性能。但是不能用于包含 LOB 的表空间。管理方便表现在 PCTUSED、FREELISTS、FREELIST GROUPS 均是自动管理的。所有对象都可以更有效地使用空间,尤其是行大小变化很大的对象。

但要注意:

• 自动段空间管理仅能在表空间级别启用,用于在本地管理的表空间• 创建表空间后,这些配置将应用于在该表空间中创建的所有段

自 动 段 空 间 管 理 是 通 过 CREATE TABLESPACE 命 令 的 SEGMENT SPACEMANGEMENT AUTO 子句指定的,此后不能更改这些段。如果定义了 PCTUSED、FREELIST和 FREELISTGROUPS,则将其全部忽略。

因为自动段空间管理仅能在表空间级别启用,且只用于在本地管理的表空间,所以只需要创建本地管理的表空间进行指定即可。以下例子创建了一个自动段空间管理表空间。

【实例4-2】设置自动段空间管理

1)管理员方式登录CONN /AS SYSDBA2)创建表空间并设置自动段空间管理SQL> CREATE TABLESPACE mytbs10DATAFILE 'D:/oracle/oradata/db01/mytbs10.dbf' SIZE 5MEXTENT MANAGEMENT LOCAL UNIFORM SIZE 64KSEGMENT SPACE MANAGEMENT AUTO;

只要是创建在 mytbs10 表空间中所有段都是采用自动段空间管理。可以用位图管理的段为:表、索引、按索引组织的表(IOT) 以及 LOB。

(三)、查询存储信息

可以通过以下视图查询表空间、数据文件、段和空闲区与已用区之间的关系等信息:

DBA_EXTENTSDBA_SEGMENTSDBA_TABLESPACESDBA_DATA_FILESDBA_FREE_SPACE

【实例 4-3】通过 DBA_SEGMENTS 视图,查看段的区和块的数目。

1)以管理员方式登录CONN / AS SYSDBA已连接。2)查询分配给 EMP 段的区和块的数目。SQL> SELECT segment_name,extents,blocks,bytesFROM dba_segmentsWHERE owner = 'SCOTT' AND segment_name='EMP';SEGMENT_NAME EXTENTS BLOCKS BYTES--------------------------------------------EMP 1 8 65536

以上查询结果可以看出,SCOTT 模式中 EMP 段,包含了一个区,总大小是 8 个数据块(65536Byte)。

【实例 4-4】使用 DBA_EXTENTS 视图。

1)以管理员方式登录CONN / AS SYSDBA2)检查给定段的区的信息SQL> SELECT extent_id,file_id,block_id,blocksFROM dba_extentsWHERE owner = 'SCOTT' AND segment_name='EMP';EXTENT_ID FILE_ID BLOCK_ID BLOCKS---------- ---------- ---------- ----------0 1 50465 8

该实例查询出 EMP 段包含的区号,文件号,块号和块数。

【实例 4-5】使用 DBA_FREE_SPACE 视图。

1)以管理员方式登录CONN / AS SYSDBA2)查询所有表空间的自由空间SQL> SELECT tablespace_name, count(*),max(blocks), sum(blocks)FROM dba_free_spaceGROUP BY tablespace_name;TABLESPACE_NAME COUNT(*) MAX(BLOCKS) SUM(BLOCKS)------------------------------ ---------- ----------- -----------CWMLITE 2 1328 1360DRSYS 1 1320 1320EXAMPLE 1 64 64INDX 1 3192 3192MYTBS10 1 632 632ODM 1 1360 1360SYSTEM 1 176 176TOOLS 1 504 504UNDOTBS1 5 24552 25128USERS 1 3192 3192XDB 1 24 24

可见,SYSTEM 表空间的可用空闲空间为 176 个数据块。

七、小结

Oracle 为数据对象所分配的存储空间被称为段,段有多种类型,常见的是表段、还原段、索引段和临时段。存储空间的分配是以区为单位进行的,区由连续的数据块组成。通过指定pctfree、pctused 等参数,来控制其中块存储空间管理方式;通过指定 initial、next、pctincrease等存储参数,以指定其中区的分配方式。可以创建非标志块表空间,以满足不同的存储空间需求。

写在最后的话

感谢各位的支持与阅读,后续会继续推送相关知识和交流,欢迎交流、转发和关注,感谢!

标签: #oracle9i删除表空间