测试2——表空间管理 段空间管理 段收缩测试

简介: 表空间的管理  --简要语法:     CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name     DATAFILE datafile spec | TE...

表空间的管理

 --简要语法:

    CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name

    DATAFILE datafile spec | TEMPFILE tempfile spec

    [MINIMUM EXTENT minimum extent size]

    [BLOCKSIZE blocksize]

    [[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]

    [LOGGING|NOLOGGING]

    [FORCE LOGGING]

    [ONLINE|OFFLINE]

    [EXTENT MANAGEMENT DICTIONARY | LOCAL [AUTOALLOCATE|UNIFORM SIZE size]]

    [SEGMENT SPACE MANAGEMENT MANUAL|AUTO]

    [FLASHBACK ON|OFF]


注意标红的部分,EXTENT管理,也就是所谓的表空间管理;而SEGMENT管理就是所谓的段空间管理。我们稍后会做一个段空间收缩的实验。

字典管理:oracle 8i(不包括i),只存在一种表空间的管理模式,即字典管理表空间(DMT),DMT是指oracle的空间分配或回收是通过数据库中的数据字典表来记录和管理的,用于管理的两个数据字典表分别是:UET$used extents)FET$(freeextents) 。其工作方式是:当建立一个新的段或者段在表空间时,oracle通过一系列的SQL语句来完成这个工作; 且和前面的两个字典表有关,在繁忙的系统中会造成竞争和等待(另一个DMT会带来的问题是空间碎片)(DMT已经废弃了)

      

    本地管理(LMT):   在9iR2版本后成了默认的选项

       LMT在表空间的数据文件头部加入了一个位图区域,在其中记录每个extent的使用状况

       extent被使用或者被释放,oracle会更新头部的记录来反映这个变化,不产生回滚信息

        因为仅仅操作数据文件头部的几个数据块,不用操作数据字典,LMTDMT要快,尤其是在繁忙的时候更明显

在每个表空间的数据文件的头部加入了一个位图区域 
一个段的第一个区的第一个块是first level bitmap block 
第二个块是second level bitmap block 
第三个块才是段头块 
这两个块是用来管理freeblock 

若为自动分配,则Oracle会按照递增算法来分配空间 
如果选择统一尺寸,还可以详细指定每个区间的大小 
dba_extents这个视图可以看到哪些对象分配了多少区间 


段空间管理:

从9i开始,段空间管理有两种: 
①MSSM:由你设置freelists、freelistgroups、pctused、pctfree、initrans等参数来控制如何分配、使用段中的空间 
②ASSM:你只需控制一个参数pctfree,其他参数即使建了也将被忽略 



(1)freelist和freelistgroup

使用MSSM表空间管理时,Oracle会在freelist中为有自由空间的对象维护HWM以下的块 
freelist和freelistgroup在ASSM表空间中根本不存在,仅在MSSM表空间使用这个技术 


(2)pctfree和pctused 
pctfree告诉Oracle:块上应该保留多大的空间来完成将来的更新 
对于MSSM,她控制着块何时放入freelist中,以及何时从freelist中取出。 如果大于pctfree,则这个块会一直在freelist上 
对于ASSM,因为ASSM根本不使用freelist。在ASSM中,pctused也将被忽略。 
但她仍然会限制能否将一个新行插入到一个块中 .
适当的设置pctfree有助于减小行迁移 .


⑶initrans 
无论是ASSM  or  MSSM这个参数仍然有效 
块头的事务槽的初始化大小有对象的initrans指定


实验:shrink命令完成段收缩

从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理 (ASSM),就可以使用这个特性缩小段,即降低HWM.这里需要强调一点,10g的这个新特性,仅对ASSM表空间有效,否则会报ORA-10635: Invalid segment or tablespace type.

在这里,我们来讨论如和对一个ASSM的segment回收浪费的空间.

同样,我们用系统视图all_objects来在tablespace ASSM上创建测试表my_objects,这一小节的内容,

实验环境为oracle11.2.0.3:

SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production


[oracle@lyg ~]$ sqlplus "/as sysdba"

SQL*Plus: Release 11.2.0.3.0 Production on Thu Apr 10 14:31:45 2014
Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

创建测试表空间:

SQL>   CREATE  TABLESPACE ASSMTEST
    DATAFILE '/u01/app/oracle/oradata/test/assmtest01.dbf' size 50m  2  ;

Tablespace created.


SQL> create user assmtest identified by assm default tablespace ASSMTEST;
User created.


SQL>   grant connect,resource to assmtest;
Grant succeeded.


创建测试用户:

SQL> grant dba to assmtest;
Grant succeeded.


SQL> conn assmtest/assm
Connected.


SQL> create table my_objects as select * from dba_objects;
Table created.

查看表空间管理状态:

select TABLESPACE_NAME,BLOCK_SIZE,EXTENT_MANAGEMENT,ALLOCATION_TYPE, SEGMENT_SPACE_MANAGEMENT 
from dba_tablespaces where TABLESPACE_NAME = 'ASSMTEST';

然后我们随机地从table MY_OBJECTS中删除一部分数据:
SQL>select count(*) from my_objects;
COUNT(*)
----------

74582


SQL>delete from my_objects where object_name like '%C%';

27523 rows deleted.


SQL>delete from my_objects where object_name like '%U%';

6632 rows deleted.


SQL> delete from my_objects where object_name like '%A%';

10828 rows deleted.

现在我们使用show_space和show_space_assm来看看my_objects的数据存储状况:

SQL>exec show_space('MY_OBJECTS','ASSMTEST');
SQL> exec show_space('MY_OBJECTS','ASSMTEST');
Unformatted Blocks  ....................     0
FS1 Blocks (0-25)   ....................       0
FS2 Blocks (25-50)  ....................     330
FS3 Blocks (50-75)  ....................     270
FS4 Blocks (75-100) ....................    398
Full Blocks    ....................      65
Total Blocks ...........................       1,152
Total Bytes  ...........................              9,437,184
Total MBytes ...........................       9
Unused Blocks...........................      63
Unused Bytes ...........................       516,096
Last Used Ext FileId....................      8
Last Used Ext BlockId..................    1,152
Last Used Block.........................      65

PL/SQL procedure successfully completed.


SQL>exec show_space_assm('MY_OBJECTS','ASSMTEST');
SQL> exec show_space_assm('MY_OBJECTS','ASSMTEST');
free space 0-25% Blocks:................0
free space 25-50% Blocks:...............330
free space 50-75% Blocks:...............270
free space 75-100% Blocks:..............398
Full Blocks:............................65
Unformatted blocks:.....................0

PL/SQL procedure successfully completed.


这里,table my_objects的HWM下有1151个block,其中,free space为25-50%的block有330个,free space为50-75%的block有270个,free space为75-100%的block有398个,full space的block只有65个,这种情况下,我们需要对这个table的现有数据行进行重组.

要使用assm上的shink,首先我们需要使该表支持行移动,可以用这样的命令来完成:

SQL>alter table my_objects enable row movement;

现在,就可以来降低my_objects的HWM,回收空间了,使用命令:
SQL>   alter table my_objects shrink space;

表已更改.


我们具体的看一下实验的结果:

SQL> exec show_space('MY_OBJECTS','ASSMTEST');
Unformatted Blocks  .................... 0
FS1 Blocks (0-25)   ....................       0
FS2 Blocks (25-50)  ....................      1
FS3 Blocks (50-75)  ....................      1
FS4 Blocks (75-100) .................... 0
Full Blocks    ....................     427
Total Blocks ...........................     448
Total Bytes  ...........................           3,670,016
Total MBytes ...........................       3
Unused Blocks...........................       3
Unused Bytes ...........................       24,576
Last Used Ext FileId.................... 8
Last Used Ext BlockId................... 512
Last Used Block.........................      61
PL/SQL 过程已成功完成.
SQL> exec show_space_assm('MY_OBJECTS','ASSMTEST');
free space 0-25% Blocks:................0
free space 25-50% Blocks:...............1
free space 50-75% Blocks:...............1
free space 75-100% Blocks:..............0
Full Blocks:.........................................427
Unformatted blocks:.....................0

PL/SQL 过程已成功完成. 


在执行完shrink命令后,我们可以看到,table my_objects的HWM现在降到了447的位置,而且HWM下的block的空间使用状况,full space的block有249个,free space 为25-50%Block只有1个.


相关文章
|
1月前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
1月前
|
人工智能 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(4-2):渗透测试行业术语扫盲完结:就怕你学成黑客啦!)作者——LJS
网络空间安全之一个WH的超前沿全栈技术深入学习之路(4-2):渗透测试行业术语扫盲完结:就怕你学成黑客啦!)作者——LJS
|
1月前
|
安全 大数据 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(3-2):渗透测试行业术语扫盲)作者——LJS
网络空间安全之一个WH的超前沿全栈技术深入学习之路(3-2):渗透测试行业术语扫盲)作者——LJS
|
1月前
|
SQL 安全 网络协议
网络空间安全之一个WH的超前沿全栈技术深入学习之路(1-2):渗透测试行业术语扫盲)作者——LJS
网络空间安全之一个WH的超前沿全栈技术深入学习之路(1-2):渗透测试行业术语扫盲)作者——LJS
|
4月前
|
Web App开发 敏捷开发 测试技术
自动化测试框架的设计与实现探索操作系统的心脏:内核与用户空间的交互
【8月更文挑战第26天】本文旨在探讨自动化测试框架的设计原则、核心组件和实现方法。通过分析自动化测试的优势,我们深入讨论了框架设计的关键考虑因素,包括模块化、可重用性、可扩展性和易维护性。文章还介绍了如何利用流行的测试工具和编程语言来实现一个高效的自动化测试框架,并通过实例展示了框架的应用。
|
7月前
|
开发框架 监控 Java
深入探索Spring Boot的监控、管理和测试功能及实战应用
【5月更文挑战第14天】Spring Boot是一个快速开发框架,提供了一系列的功能模块,包括监控、管理和测试等。本文将深入探讨Spring Boot中监控、管理和测试功能的原理与应用,并提供实际应用场景的示例。
85 2
|
7月前
|
JSON 前端开发 测试技术
接口管理测试繁琐复杂?何不试试Eolink
接口管理测试繁琐复杂?何不试试Eolink
67 0
|
7月前
|
测试技术
『测试基础』| 如何理解测试用例管理和缺陷管理?
『测试基础』| 如何理解测试用例管理和缺陷管理?
221 1
|
7月前
|
前端开发 JavaScript API
React 生态系统:路由、状态管理、调试、测试、组件库、文档……
React 生态系统:路由、状态管理、调试、测试、组件库、文档……
119 0
|
7月前
|
算法 关系型数据库 API
Python【算法中心 02】Web框架Django管理页面使用(管理员账号创建+API使用+应用添加)GreenPlum数据库引擎及API测试
Python【算法中心 02】Web框架Django管理页面使用(管理员账号创建+API使用+应用添加)GreenPlum数据库引擎及API测试
115 0
下一篇
DataWorks