什么是高水位标记

高水位标记
什么是高水位标记
 表的高水位标记指出该表所使用过的最后一个块
 在向表中插入数据时高水位标记会移动以标记所使用的最后一个块
 从表中删除行时高水位标记不会重新设置
 高水位标记存储在表的段头部
 当 Oracle 服务器执行全表扫描时它会读取高水位标记以下的所有块
语法
下面的 PL/SQL 块可用来查找并打印分配给表的块数和未使用的块数
SQL> DECLARE
2 v_owner VARCHAR2(30) := 'SUMMIT' ;
3 v_segment_name VARCHAR2(30) := 'EMPLOYEE';
4 v_segment_type VARCHAR2(30) := 'TABLE';
5 v_total_blocks NUMBER;
6 v_total_bytes NUMBER;
7 v_unused_blocks NUMBER;
8 v_unused_bytes NUMBER;
9 v_last_used_extent_file_id NUMBER;
10 v_last_used_extent_block_id NUMBER;
11 v_last_used_block NUMBER;
12 BEGIN
13 dbms_space.unused_space(v_owner,
14 v_segment_name,
15 v_segment_type,
16 v_total_blocks,
17 v_total_bytes,
18 v_unused_blocks,
19 v_unused_bytes,
20 v_last_used_extent_file_id,
21 v_last_used_extent_block_id,
22 v_last_used_block
23 );
24 dbms_output.put_line(INITCAP(v_segment_type)||'
:'||v_owner||'.'||v_segment_name);
25 dbms_output.put_line('Total Blocks
:'||TO_CHAR(v_total_blocks));
26 dbms_output.put_line('Blocks above HWM
:'||TO_CHAR(v_unused_blocks));
27 END;
28 /
Statement processed.
Table :SUMMIT.EMPLOYEE
Total Blocks : 25
Blocks above HWM : 23
注DBMS_SPACE 程序包是在 catproc.sql 调用 dbmsutil.sql 和
prvtutil.plb 这两个脚本时创建的

获取高水位标记的例子
DECLARE
v_owner VARCHAR2(30) := 'INSUR_CHANGDE' ;
v_segment_name VARCHAR2(30) := 'BS_INSURED';
v_segment_type VARCHAR2(30) := 'TABLE';
v_total_blocks NUMBER;
v_total_bytes NUMBER;
v_unused_blocks NUMBER;
v_unused_bytes NUMBER;
v_last_used_extent_file_id NUMBER;
v_last_used_extent_block_id NUMBER;
v_last_used_block NUMBER;
BEGIN
dbms_space.unused_space(v_owner,
v_segment_name,
v_segment_type,
v_total_blocks,
v_total_bytes,
v_unused_blocks,
v_unused_bytes,
v_last_used_extent_file_id,
v_last_used_extent_block_id,
v_last_used_block
);
dbms_output.put_line(INITCAP(v_segment_type)||':'||v_owner||'.'||v_segment_name);
dbms_output.put_line('Total Blocks:'||TO_CHAR(v_total_blocks));
dbms_output.put_line('Blocks above HWM:'||TO_CHAR(v_unused_blocks));
END;

Table:INSUR_CHANGDE.BS_INSURED
Total Blocks:57344
Blocks above HWM:40448

回收未使用空间
如果已为表分配了大量区但这些区未完全使用则可以手动从表中回收空
间所释放的空间可供表空间中的其它段使用
语法
使用下面的命令回收表中未使用空间
ALTER TABLE [schema.]table
DEALLOCATE UNUSED [KEEP integer [ K|M ] ]
KEEP 指定在高水位标记以上应该保留的字节数
如果使用上述命令时没有 KEEP 子句Oracle 服务器将回收高水位标记以上所
有未使用空间如果高水位标记所在的区小于 MINEXTENTS 的值Oracle 服
务器将释放 MINEXTENTS 以上的区
 因为使用此命令回收空间可以释放区内未使用的空间所以频繁使用此命令
可能会导致数据文件中产生碎片若要避免出现此问题请为表空间设置
MINIMUM EXTENT
 若要释放高水位标记以下的所有空间即使高水位标记在 MINEXTENTS
以下请使用 KEEP 0

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26015009/viewspace-717675/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26015009/viewspace-717675/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值