資料庫壓縮開始
--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;
--資料庫壓縮完成