MOVE降低高水位 HWM
--创建实验表空间
SQL> create tablespace andy03 datafile '/home/oracle/app/oradata/orcl/andy03.dbf' size 10M autoextend on next 30M;
--创建实验数据
SQL> create table andy03 tablespace andy03 as select * from dba_objects ;
SQL> insert into andy03 select * from dba_objects ;
SQL> commit;
SQL> select BYTES/1024/1024,MAXBYTES/1024/1024 from Dba_Data_Files where tablespace_name ='ANDY03';
-- 模拟系列高水位变化
SQL>col name for a30
SQL>
SELECT UPPER(F.TABLESPACE_NAME) " name",
D.TOT_GROOTTE_MB " size(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES " used(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "percent",
F.TOTAL_BYTES "current_free_size(M)",
(SELECT free_space_mb+free_allocate_mb FROM dba_tablespace_free a where a.tablespace_name= f.tablespace_name) "total_ FREE_size",
D.TOT_GROOTTE_MB - F.MAX_BYTES "HWM(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
and f.tablespace_name='ANDY03'
ORDER BY 3 desc;
name size(M) used(M) percent current_free_size(M) total_ FREE_size HWM(M)
------------------------------ ---------- ---------- -------- -------------------- ---------------- ----------
ANDY03 40 22 55.00% 18 32745.9844 22
SQL> create table andy04 tablespace andy03 as select * from dba_objects;
SQL>
SELECT UPPER(F.TABLESPACE_NAME) " name",
D.TOT_GROOTTE_MB " size(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES " used(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "percent",
F.TOTAL_BYTES "current_free_size(M)",
(SELECT free_space_mb+free_allocate_mb FROM dba_tablespace_free a where a.tablespace_name= f.tablespace_name) "total_ FREE_size",
D.TOT_GROOTTE_MB - F.MAX_BYTES "HWM(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
and f.tablespace_name='ANDY03'
ORDER BY 3 desc;
name size(M) used(M) percent current_free_size(M) total_ FREE_size HWM(M)
------------------------------ ---------- ---------- -------- -------------------- ---------------- ----------
ANDY03 40 33 82.50% 7 32734.9844 33
SQL> truncate table andy03;
SQL>
SELECT UPPER(F.TABLESPACE_NAME) " name",
D.TOT_GROOTTE_MB " size(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES " used(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "percent",
F.TOTAL_BYTES "current_free_size(M)",
(SELECT free_space_mb+free_allocate_mb FROM dba_tablespace_free a where a.tablespace_name= f.tablespace_name) "total_ FREE_size",
D.TOT_GROOTTE_MB - F.MAX_BYTES "HWM(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
and f.tablespace_name='ANDY03'
ORDER BY 3 desc;
name size(M) used(M) percent current_free_size(M) total_ FREE_size HWM(M)
------------------------------ ---------- ---------- -------- -------------------- ---------------- ----------
ANDY03 40 12.06 30.15% 27.94 32755.9244 19.06
-- 说明truncate table后,统计信息发生了变化,查询的 HWM 不是真实的(此时 HWM 值 = 表空间大小 - 表空间对象实际物理空间总和)。
SQL> alter database datafile 10 resize 20M;
alter database datafile 10 resize 20M
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value
-- 执行成功说明 真实的 HWM 为历史上实际最大值(33 M 为上面操作查询的值)。
SQL> alter database datafile 10 resize 33M;
Database altered.
-- 查询指定表空间内对象的块号
SQL> select segment_name,block_id,blocks FROM dba_extents where Tablespace_name ='ANDY03' order by block_id desc;
-- 查询表空间内所有对象
SQL> col SEGMENT_NAME for a25
SQL>
SELECT t.owner, t.segment_name,SUM(bytes)/1024/1024 "SIZE(M)", t.SEGMENT_TYPE From dba_segments t
WHERE t.tablespace_name = 'ANDY03'
GROUP BY t.owner,t.segment_name,t.SEGMENT_TYPE
ORDER BY SUM(bytes) desc;
OWNER SEGMENT_NAME SIZE(M) SEGMENT_TYPE
------------------------------ ------------------------- ---------- ------------------
SYS ANDY04 11 TABLE
SYS ANDY03 .0625 TABLE
-- 一一开启所有对象 move 。 (按对象 block_id 由小到大 依次 move)
SQL> alter table andy04 move;
说明:
table在进行move操作时,我们只能对它进行select的操作。反过来说,当我们的一个session对table进行DML操作且没有commit时,
在另一个session中是不能对这个table进行move操作的,否则oracle会返回这样的错误信息:ORA-00054
SQL>
SELECT UPPER(F.TABLESPACE_NAME) " name",
D.TOT_GROOTTE_MB " size(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES " used(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "percent",
F.TOTAL_BYTES "current_free_size(M)",
(SELECT free_space_mb+free_allocate_mb FROM dba_tablespace_free a where a.tablespace_name= f.tablespace_name) "total_ FREE_size",
D.TOT_GROOTTE_MB - F.MAX_BYTES "HWM(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
and f.tablespace_name='ANDY03'
ORDER BY 3 desc;
name size(M) used(M) percent current_free_size(M) total_ FREE_size HWM(M)
------------------------------ ---------- ---------- -------- -------------------- ---------------- ----------
ANDY03 33 12.06 36.55% 20.94 32755.9244 13
-- move后,可resize 。 (原因 block_id 发生了变化)
SQL> alter database datafile 10 resize 13M;
Database altered.
SQL>
SELECT UPPER(F.TABLESPACE_NAME) " name",
D.TOT_GROOTTE_MB " size(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES " used(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "percent",
F.TOTAL_BYTES "current_free_size(M)",
(SELECT free_space_mb+free_allocate_mb FROM dba_tablespace_free a where a.tablespace_name= f.tablespace_name) "total_ FREE_size",
D.TOT_GROOTTE_MB - F.MAX_BYTES "HWM(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
and f.tablespace_name='ANDY03'
ORDER BY 3 desc;
name size(M) used(M) percent current_free_size(M) total_ FREE_size HWM(M)
------------------------------ ---------- ---------- -------- -------------------- ---------------- ----------
ANDY03 13 12.06 92.77% .94 32755.9244 12.06
最后,HWM 的确下降了。 OK,转载请标明出处。
MOVE降低高水位 HWM相关推荐
- oracle delete block,Oracle delete和truncate对高水位(HWM)的影响详细解析
在讨论高水位之前需要明确一下oracle的逻辑存储的概念:Block.extent.segment.tablespace block:块的概念,他是oracle最小的一个存储单元,一般为8K,也是一次 ...
- DB2 V9.7新特性 - 降低高水位标记
孔再华, 软件工程师, IBM 简介: DB2 9.7 增加了很多新功能帮助用户更容易地管理数据库.在 9.7 之前的版本中,降低表空间高水位标记是一件比较麻烦的事情,需要使用多个命令.在 DB2 9 ...
- Oracle 高水位(HWM: High Water Mark) 说明
一. 准备知识:ORACLE的逻辑存储管理. ORACLE在逻辑存储上分4个粒度: 表空间, 段, 区 和 块. 1.1 块: 是粒度最小的存储单位,现在标准的块大小是8K ...
- oracle hwm调整语法,各个Oracle 版本下如何调整高水位(HWM)
各个Oracle 版本下如何调整高水位(HWM) 以下没有注明版本号的各版本都适用. 1.CTAS : create table xxx_new tablespace new_tablespace_n ...
- mysql 回收高水位_Oracle 高水位(HWM)回收原理及操作方法
一. 高水位(HWM)及其产生原因 High Water Mark,HWM) 是Oracle(Segment)级别的概念.在仅有DML(比如delete,insert)操作时,高水位线只会增长,不会 ...
- 数据表 高水位 mysql_Oracle中的高水位(HWM)
Linux公社(www.linuxidc.com)是专业的Linux系统门户网站,实时发布最新Linux资讯,包括Linux.Ubuntu.Fedora.RedHat.红旗Linux.Linux教程. ...
- mysql降低高水位_[数据库]数据高水位分析
[数据库]数据高水位分析 0 2014-10-16 11:02:12 2014-10-04 BaoXinjian 一.摘要 PLSQL_性能优化系列14_Oracle High Water Level ...
- oracle hwm的位置,Oracle 高水位(HWM)教程(2)
4. 用逻辑导入导出: Emp/Imp 5. Alter table table_name deallocate unused 注:这证明,DEALLOCATE UNUSED为释放HWM上面的未使用空 ...
- 高水位(HWM)详解
什么是高水位线? 所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称为"high water ...
- ORACLE 高水位(HWM)
在9I中: (1)如果MINEXTENT 可以使ALTER TABLE TABLENAME DEALLOCATE UNUSED将HWM以上所有没使用的空间释放 (2)如果MINEXTENT >H ...
最新文章
- 01 python爬虫
- matlab messagebox函数,[MATLAB]在C#中引用MATLAB函数
- ajax练习,ajax练习
- 13寸笔记本电脑尺寸_如何判断行李箱的尺寸?标准行李箱尺寸对照表(13~32寸)
- 浅谈内存映射I/O(MMIO)与端口映射I/O(PMIO)的区别
- xamarin.android 图片高斯模糊效果
- 条款2.	最好使用C++转型操作符
- 一天一工程总结系列-7.2
- uploadify3.1 php,Jquery上传插件 uploadify v3.1使用说明_jquery
- RapidMiner是什么,主要的功能和特点是什么?
- 计算机wmi配置错误,系统没有WMI服务怎么办、WMI错误修复方法
- python爬虫之SSL、加密、破解有道词典加密算法并编写有道词典实时翻译
- 什么是AppImage
- 利用JAVA画一颗小心心
- 2021-06-26 Vue中关与el挂载点的学习
- 用CSS实现段落前面缩进两个字
- 面试题详解:如何用Redis实现分布式锁?
- 前端构建工具(理解+使用)
- 京东吞下一号店之后,网易成中国电商最大变量?
- 第七届“创客中国”物联网中小企业创新创业大赛决赛落幕,云蝠智能荣获二等奖