天天看點

oracle壓縮和mysql壓縮_ORACLE資料庫表分區壓縮說明

資料庫壓縮開始

--1、最開始先執行資料的導出和删除

--2、執行下面語句檢視空間壓縮情況

select a.file#,

a.name,

a.bytes / 1024 / 1024 CurrentMB,

ceil(HWM * a.block_size) / 1024 / 1024 ResizeTo,

(a.bytes - HWM * a.block_size) / 1024 / 1024 ReleaseMB,

'alter database datafile ''' || a.name || ''' resize ' ||

ceil(HWM * a.block_size / 1024 / 1024) || 'M;' ResizeCMD

from v$datafile a,

(select file_id, max(block_id + blocks - 1) HWM

from dba_extents

group by file_id) b

where a.file# = b.file_id(+)

and (a.bytes - HWM * block_size) > 0

and a.NAME like '%TBS_PART_01%' --根據月份修改數值,目前情況是月份,二月份修改為 and a.NAME like '%TBS_PART_02%'

order by 2;

--3、複制2查詢的字段‘ResizeCMD’的結果,如果 resize 後面的數字小于1024M,則改為 1024M

alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0101.DBF' resize 1M;

--修改為

alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0101.DBF' resize 1024M;

--4、執行修改後的語句。

--資料庫壓縮完成。

--如果第3部中的 resize 後面的數字大于1024M,則往下運作步驟。。。。。

--如果第3部中的 resize 後面的數字大于1024M,則往下運作步驟。。。。。

--如果第3部中的 resize 後面的數字大于1024M,則往下運作步驟。。。。。

--如果第3部中的 resize 後面的數字大于1024M,則往下運作步驟。。。。。

--下面假如有這種情況: alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1524M;

--6、移動表前先對表空間做整理

alter tablespace TBS_PART_0131 coalesce;

--7、找到2步驟中 ResizeCMD 為 alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1524M;的行的 ‘a.file#’值

--8、修改下面file_id= 的值為 找到的 ‘a.file#’ 值。(假設找到的值為 861)

set heading off

set echo off

set feedback off

set termout on

spool d:\aaa.sql

--移動表

select DISTINCT 'alter table '|| segment_name || ' move tablespace BK_SPACE;' from dba_extents where segment_type='TABLE' and owner = 'XM_RC_DBCENTER' and file_id=861;

--移動索引

select DISTINCT 'alter index '|| segment_name || ' rebuild tablespace BK_SPACE;' from dba_extents where segment_type='INDEX' and owner = 'XM_RC_DBCENTER' and file_id=861;

--移動分區表

select DISTINCT 'alter table '|| segment_name || ' move partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='TABLE PARTITION' and owner = 'XM_RC_DBCENTER' and file_id=861;

--移動分區索引

select DISTINCT 'alter index '|| segment_name || ' rebuild partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='INDEX PARTITION' and owner = 'XM_RC_DBCENTER' and file_id=861;

spool off

set heading off

set echo off

set feedback off

set termout on

spool d:\bbb.sql

--移動表

select DISTINCT 'alter table '|| segment_name || ' move tablespace BK_SPACE;' from dba_extents where segment_type='TABLE' and owner = 'XM_RT_DBCENTER' and file_id=861;

--移動索引

select DISTINCT 'alter index '|| segment_name || ' rebuild tablespace BK_SPACE;' from dba_extents where segment_type='INDEX' and owner = 'XM_RT_DBCENTER' and file_id=861;

--移動分區表

select DISTINCT 'alter table '|| segment_name || ' move partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='TABLE PARTITION' and owner = 'XM_RT_DBCENTER' and file_id=861;

--移動分區索引

select DISTINCT 'alter index '|| segment_name || ' rebuild partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='INDEX PARTITION' and owner = 'XM_RT_DBCENTER' and file_id=861;

spool off

--9、複制上面步驟8修改後的語句,在plsql工具中打開“Command Window” 視窗,黏貼語句。

--10、找到d盤下的aaa.sql檔案,複制内容到plsql工具中,點選運作,(内容如下)

alter table TRRT_BUS_INOUT_GPS_HIS move partition TRRT_BUS_INOUT_HIS_20160131 tablespace BK_SPACE;

alter index IND_TRRT_BUS_INOUT_GPS_HIS_1 rebuild partition TRRT_BUS_INOUT_HIS_20160131 tablespace BK_SPACE;

--11、然後修改語句再執行壓縮表空間的語句

alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1524M;

--修改為

alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1024M;

--12、最後再把步驟10中aaa.sql檔案的語句修改,(把BK_SPACE改回原來的TBS_PART_0131)再運作

alter table TRRT_BUS_INOUT_GPS_HIS move partition TRRT_BUS_INOUT_HIS_20160131 tablespace TBS_PART_0131;

alter index IND_TRRT_BUS_INOUT_GPS_HIS_1 rebuild partition TRRT_BUS_INOUT_HIS_20160131 tablespace TBS_PART_0131;

--資料庫壓縮完成

開始

--1、最開始先執行資料的導出和删除

--2、執行下面語句檢視空間壓縮情況

select a.file#,

a.name,

a.bytes / 1024 / 1024 CurrentMB,

ceil(HWM * a.block_size) / 1024 / 1024 ResizeTo,

(a.bytes - HWM * a.block_size) / 1024 / 1024 ReleaseMB,

'alter database datafile ''' || a.name || ''' resize ' ||

ceil(HWM * a.block_size / 1024 / 1024) || 'M;' ResizeCMD

from v$datafile a,

(select file_id, max(block_id + blocks - 1) HWM

from dba_extents

group by file_id) b

where a.file# = b.file_id(+)

and (a.bytes - HWM * block_size) > 0

and a.NAME like '%TBS_PART_01%' --根據月份修改數值,目前情況是月份,二月份修改為 and a.NAME like '%TBS_PART_02%'

order by 2;

--3、複制2查詢的字段‘ResizeCMD’的結果,如果 resize 後面的數字小于1024M,則改為 1024M

alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0101.DBF' resize 1M;

--修改為

alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0101.DBF' resize 1024M;

--4、執行修改後的語句。

--資料庫壓縮完成。

--如果第3部中的 resize 後面的數字大于1024M,則往下運作步驟。。。。。

--如果第3部中的 resize 後面的數字大于1024M,則往下運作步驟。。。。。

--如果第3部中的 resize 後面的數字大于1024M,則往下運作步驟。。。。。

--如果第3部中的 resize 後面的數字大于1024M,則往下運作步驟。。。。。

--下面假如有這種情況: alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1524M;

--6、移動表前先對表空間做整理

alter tablespace TBS_PART_0131 coalesce;

--7、找到2步驟中 ResizeCMD 為 alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1524M;的行的 ‘a.file#’值

--8、修改下面file_id= 的值為 找到的 ‘a.file#’ 值。(假設找到的值為 861)

set heading off

set echo off

set feedback off

set termout on

spool d:\aaa.sql

--移動表

select DISTINCT 'alter table '|| segment_name || ' move tablespace BK_SPACE;' from dba_extents where segment_type='TABLE' and owner = 'XM_RC_DBCENTER' and file_id=861;

--移動索引

select DISTINCT 'alter index '|| segment_name || ' rebuild tablespace BK_SPACE;' from dba_extents where segment_type='INDEX' and owner = 'XM_RC_DBCENTER' and file_id=861;

--移動分區表

select DISTINCT 'alter table '|| segment_name || ' move partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='TABLE PARTITION' and owner = 'XM_RC_DBCENTER' and file_id=861;

--移動分區索引

select DISTINCT 'alter index '|| segment_name || ' rebuild partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='INDEX PARTITION' and owner = 'XM_RC_DBCENTER' and file_id=861;

spool off

set heading off

set echo off

set feedback off

set termout on

spool d:\bbb.sql

--移動表

select DISTINCT 'alter table '|| segment_name || ' move tablespace BK_SPACE;' from dba_extents where segment_type='TABLE' and owner = 'XM_RT_DBCENTER' and file_id=861;

--移動索引

select DISTINCT 'alter index '|| segment_name || ' rebuild tablespace BK_SPACE;' from dba_extents where segment_type='INDEX' and owner = 'XM_RT_DBCENTER' and file_id=861;

--移動分區表

select DISTINCT 'alter table '|| segment_name || ' move partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='TABLE PARTITION' and owner = 'XM_RT_DBCENTER' and file_id=861;

--移動分區索引

select DISTINCT 'alter index '|| segment_name || ' rebuild partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='INDEX PARTITION' and owner = 'XM_RT_DBCENTER' and file_id=861;

spool off

--9、複制上面步驟8修改後的語句,在plsql工具中打開“Command Window” 視窗,黏貼語句。

--10、找到d盤下的aaa.sql檔案,複制内容到plsql工具中,點選運作,(内容如下)

alter table TRRT_BUS_INOUT_GPS_HIS move partition TRRT_BUS_INOUT_HIS_20160131 tablespace BK_SPACE;

alter index IND_TRRT_BUS_INOUT_GPS_HIS_1 rebuild partition TRRT_BUS_INOUT_HIS_20160131 tablespace BK_SPACE;

--11、然後修改語句再執行壓縮表空間的語句

alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1524M;

--修改為

alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1024M;

--12、最後再把步驟10中aaa.sql檔案的語句修改,(把BK_SPACE改回原來的TBS_PART_0131)再運作

alter table TRRT_BUS_INOUT_GPS_HIS move partition TRRT_BUS_INOUT_HIS_20160131 tablespace TBS_PART_0131;

alter index IND_TRRT_BUS_INOUT_GPS_HIS_1 rebuild partition TRRT_BUS_INOUT_HIS_20160131 tablespace TBS_PART_0131;

--資料庫壓縮完成