用Oracle数据库10g通过回收浪费的空间、联机重组表格和评估增长的趋势,有效地在段中进行存储管理。近来,有人要求我评估一个与
用Oracle数据库10g通过回收浪费的空间、联机重组表格和评估增长的趋势,有效地在段中进行存储管理。近来,有人要求我评估一个与 Oracle 数据库竞争的RDBMS。在供应商的演示过程中,观众认为“最棒”的特性是,对联机重组的支持——该产品可以联机重新部署数据块,以使段的等价物更简洁,并且不会影响当前的用户。
那时,Oracle还没有在Oracle 9i数据库中提供这种功能。但是现在,有了Oracle数据库10g,就可以轻松地联机回收浪费的空间和压缩对象——正好适合于起步者。
不过,在检验该特性之前,让我们看一看处理这项任务的“传统的”方法。
当前惯例
考虑让我们看一个段,如一张表,其中填满了块,如图1 所示。在正常操作过程中,,删除了一些行,如图2 所示。现有就有了许多浪费的空间:(i)在表的上一个末端和现有的块之间,以及(ii)在块内部,其中还有一些没有删除的行。
图 1:分配给该表的块。用灰色正方形表示行
Oracle不会释放空间以供其他对象使用,有一条简单的理由:由于空间是为新插入的行保留的,并且要适应现有行的增长。被占用的最高空间称为最高使用标记(HWM),如图2所示:
图 2:行后面的块已经删除了;HWM 仍保持不变
但是,这种方法有两个主要的问题:
当用户发出一个全表扫描时,Oracle始终必须从段一直扫描到HWM,即使它什么也没有发现。该任务延长了全表扫描的时间。
当用直接路径插入行时 — 例如,通过直接加载插入(用APPEND提示插入)或通过SQL*Loader直接路径 — 数据块直接置于HWM之上。它下面的空间就浪费掉了。
在Oracle9i及其以前的版本中,可以通过删除表,然后重建表并重新加载数据来回收空间;或通过使用ALTER TABLE MOVE命令把表移动到一个不同的表空间中来回收空间。这两种处理方式都必须脱机进行。另外,可以使用联机表重组特性,但是这需要至少双倍的现有表空间。
在10g中,该任务已经变得微不足道了;假如您的表空间中支持自动段空间管理(ASSM),您现在可以缩小段、表和索引,以回收空闲块并把它们提供给数据库以作他用,让我们看看其中的缘由。
10g中的段管理方式
设想有一个表BOOKINGS,它保存有经由Web站点的联机登记。当一个登记确认后,就会把它存储在一个存档表BOOKINGS_HIST中,并从BOOKINGS表中删除该行。登记和确认之间的时间间隔依据客户有很大的不同,由于无法从删除的行获得足够的空间,因此许多行就插入到了表的 HWM 之上。
现在您需要回收浪费的空间。首先,准确地查明在可回收的段中浪费了多少空间。由于它是在支持ASSM的表空间中,您将不得不使用DBMS_SPACE包的SPACE_USAGE过程,如下所示:
declare
l_fs1_bytes number;
l_fs2_bytes number;
l_fs3_bytes number;
l_fs4_bytes number;
l_fs1_blocks number;
l_fs2_blocks number;
l_fs3_blocks number;
l_fs4_blocks number;
l_full_bytes number;
l_full_blocks number;
l_unformatted_bytes number;
l_unformatted_blocks number;
begin
dbms_space.space_usage(
segment_owner => user,
segment_name => 'BOOKINGS',
segment_type => 'TABLE',
fs1_bytes => l_fs1_bytes,
fs1_blocks => l_fs1_blocks,
fs2_bytes => l_fs2_bytes,
fs2_blocks => l_fs2_blocks,
fs3_bytes => l_fs3_bytes,
fs3_blocks => l_fs3_blocks,
fs4_bytes => l_fs4_bytes,
fs4_blocks => l_fs4_blocks,
full_bytes => l_full_bytes,
full_blocks=> l_full_blocks,
unformatted_blocks => l_unformatted_blocks,
unformatted_bytes => l_unformatted_bytes
);
dbms_output.put_line(' FS1 Blocks = '
||l_fs1_blocks||' Bytes = '||l_fs1_bytes);
dbms_output.put_line(' FS2 Blocks = '
||l_fs2_blocks||' Bytes = '||l_fs1_bytes);
dbms_output.put_line(' FS3 Blocks = '
||l_fs3_blocks||' Bytes = '||l_fs1_bytes);
dbms_output.put_line(' FS4 Blocks = '
||l_fs4_blocks||' Bytes = '||l_fs1_bytes);
dbms_output.put_line('Full Blocks = '
||l_full_blocks||' Bytes = ||l_full_bytes);
end;
/
输出结果如下:
FS1 Blocks = 0 Bytes = 0
FS2 Blocks = 0 Bytes = 0
FS3 Blocks = 0 Bytes = 0
FS4 Blocks = 4148 Bytes = 0
Full Blocks = 2 Bytes = 16384
这个输出结果显示有4,148个块,具有75-100%的空闲空间(FS4);没有其他空闲块可用。这里仅有两个得到完全使用的块。4,148个块都可以回收。

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

Notepad++7.3.1
Easy-to-use and free code editor

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.