Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

109

积分

0

好友

9

主题
1#
发表于 2012-4-23 15:21:49 | 查看: 8518| 回复: 9
请问,如何查询一个表空间的HWM?
另外,在不影响业务数据的情况下,如何降低一个表空间的HWM?

[ 本帖最后由 chunchun2012 于 2012-4-23 15:29 编辑 ]
2#
发表于 2012-4-23 15:47:35

回复 1# 的帖子

对表或者索引做shrink space可以降低HWM,如何查询不知道!

回复 只看该作者 道具 举报

3#
发表于 2012-4-23 15:51:39
原帖由 ylw6006 于 2012-4-23 15:47 发表
对表或者索引做shrink space可以降低HWM,如何查询不知道!


补充下,用show_space过程可以看到对象的最后一个数据块位置!

回复 只看该作者 道具 举报

4#
发表于 2012-4-23 15:55:33
了解高水位与truncate http://www.oracledatabase12g.com ... -mark-truncate.html

set serveroutput on
DECLARE
TOTAL_BLOCKS number;
TOTAL_BYTES number;
UNUSED_BLOCKS number;
UNUSED_BYTES number;
LAST_USED_EXTENT_FILE_ID number;
LAST_USED_EXTENT_BLOCK_ID number;
LAST_USED_BLOCK number;
BEGIN
dbms_space.unused_space('SYS',
'MACLEAN_TEST1',
'TABLE',
TOTAL_BLOCKS,
TOTAL_BYTES,
UNUSED_BLOCKS,
UNUSED_BYTES,
LAST_USED_EXTENT_FILE_ID,
LAST_USED_EXTENT_BLOCK_ID,
LAST_USED_BLOCK);

dbms_output.put_line('OBJECT_NAME = MACLEAN_TEST1');
dbms_output.put_line('-----------------------------------');
dbms_output.put_line('TOTAL BLOCKS = ' || TOTAL_BLOCKS);
dbms_output.put_line('TOTAL SIZE(KByte) = ' ||
TOTAL_BYTES / 1024);
dbms_output.put_line('UNUSED BLOCKS = ' || UNUSED_BLOCKS);
dbms_output.put_line('UNUSED SIZE(KByte) = ' ||
UNUSED_BYTES / 1024);
END;
/
OBJECT_NAME = MACLEAN_TEST1
-----------------------------------
TOTAL BLOCKS = 256
TOTAL SIZE(KByte) = 2048
UNUSED BLOCKS = 67
UNUSED SIZE(KByte) = 536


HIGH Water Mark =  Total Blocks - UNUSED BLOCKS

回复 只看该作者 道具 举报

5#
发表于 2012-4-23 16:01:55
雪中送炭啊,多谢maclean!

回复 只看该作者 道具 举报

6#
发表于 2012-4-23 16:16:01
将MACLEAN_TEST1修改为USERS后,运行出错,如下所示
SQL> @HWM.sql
DECLARE
*
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at "SYS.DBMS_SPACE", line 137
ORA-06512: at line 10


HWM.sql内容如下
[oracle@OCPDemo ~]$ cat HWM.sql
set serveroutput on
DECLARE
TOTAL_BLOCKS number;
TOTAL_BYTES number;
UNUSED_BLOCKS number;
UNUSED_BYTES number;
LAST_USED_EXTENT_FILE_ID number;
LAST_USED_EXTENT_BLOCK_ID number;
LAST_USED_BLOCK number;
BEGIN
dbms_space.unused_space('SYS',
'USERS',   --只修改过这个地方
'TABLE',
TOTAL_BLOCKS,
TOTAL_BYTES,
UNUSED_BLOCKS,
UNUSED_BYTES,
LAST_USED_EXTENT_FILE_ID,
LAST_USED_EXTENT_BLOCK_ID,
LAST_USED_BLOCK);

dbms_output.put_line('OBJECT_NAME = USERS');
dbms_output.put_line('-----------------------------------');
dbms_output.put_line('TOTAL BLOCKS = ' || TOTAL_BLOCKS);
dbms_output.put_line('TOTAL SIZE(KByte) = ' ||
TOTAL_BYTES / 1024);
dbms_output.put_line('UNUSED BLOCKS = ' || UNUSED_BLOCKS);
dbms_output.put_line('UNUSED SIZE(KByte) = ' ||
UNUSED_BYTES / 1024);
END;
/


请问是什么 原因?

回复 只看该作者 道具 举报

7#
发表于 2012-4-23 16:25:43
第一个是参数用户名,第二个是对象名,第三个是对象类型!你这明显要把sys用户改改!

回复 只看该作者 道具 举报

8#
发表于 2012-4-23 16:42:55
把HWM.sql中表空间改成system后,还是一样的错呢
[oracle@OCPDemo ~]$ more HWM.sql

set serveroutput on
DECLARE
TOTAL_BLOCKS number;
TOTAL_BYTES number;
UNUSED_BLOCKS number;
UNUSED_BYTES number;
LAST_USED_EXTENT_FILE_ID number;
LAST_USED_EXTENT_BLOCK_ID number;
LAST_USED_BLOCK number;
BEGIN
dbms_space.unused_space('SYS',
'SYSTEM',
'TABLE',
TOTAL_BLOCKS,
TOTAL_BYTES,
UNUSED_BLOCKS,
UNUSED_BYTES,
LAST_USED_EXTENT_FILE_ID,
LAST_USED_EXTENT_BLOCK_ID,
LAST_USED_BLOCK);

dbms_output.put_line('OBJECT_NAME = MACLEAN_TEST1');
dbms_output.put_line('-----------------------------------');
dbms_output.put_line('TOTAL BLOCKS = ' || TOTAL_BLOCKS);
dbms_output.put_line('TOTAL SIZE(KByte) = ' ||
TOTAL_BYTES / 1024);
dbms_output.put_line('UNUSED BLOCKS = ' || UNUSED_BLOCKS);
dbms_output.put_line('UNUSED SIZE(KByte) = ' ||
UNUSED_BYTES / 1024);
END;
/
SQL> @HWM.sql
DECLARE
*
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at "SYS.DBMS_SPACE", line 137
ORA-06512: at line 10
难道system表空间不是属于SYS用户 的?那怎么查看一个表空间所属的用户 呢?

回复 只看该作者 道具 举报

9#
发表于 2012-4-23 18:45:56
看起来我们误会了 , 我给出的脚本是 查询 table表的高水位线 High Water Mark的。


对于表空间我们一般不说 HWM high water mark ,这个词HWM只是偶尔用来描述 数据文件上 最后一个存有数据的 数据块, 该值限定了 数据文件所能够 缩小到的 最小尺寸。


there’s no HWM for datafiles, it’s just a virtual term to describe the last block containing data in the data file, which is the minimum size allowed for sizing down the data file.


单纯 降低 数据文件data file 的 HWM没有意义,除非你希望resize datafile到一个更小的尺寸。

回复 只看该作者 道具 举报

10#
发表于 2012-4-24 18:34:34
HWM是可以用dba_segment查询的吧,其中的blocks就是HWM。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-15 12:53 , Processed in 0.056650 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569