Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6177
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-28 10:59
文章分类
文章存档

2022年(3)

2019年(2)

2018年(2)

我的朋友

分类: Oracle

2022-04-14 23:42:20


---start


select  'execute dbms_stats.gather_table_stats(ownname => '''|| '' || owner || ''''|| '' ||','

|| 'tabname =>'''|| '' || table_name || ''''|| '' ||','

|| ' estimate_percent => null , degree =>96, method_opt => '''|| '' || 'for all indexed columns' || ''''|| '' ||');'

from all_tables 

where owner like 'NF_%' or owner like 'HX_%'  or owner like 'GS_%'




oracle database用一段时间以后,硬盘空间会不够,更甚者硬盘会used 100%。(oracle表空间设置为自动扩展)。此时oracle会出现各种莫名其妙的错误,为保持oracle数据库的稳定,我们需要实时查看硬盘空间。 那么怎样缩小一些不用的表空间,以释放硬盘空间?

oracle常用的此类命令Alter database datafile(tempfile),当然也可从toad等UI工具去操作。

ALTER DATABASE TEMPFILE '/opt/oracle/oradata/gctwp101/temp02.dbf' RESIZE 1229M;

如果盲目去操作,oracle会报ora-03297错误。表示在所定义的空间之后有数据存在,不能收缩。我们不得不查出{BANNED}{BANNED}{BANNED}最佳佳佳后的数据所处的位置, 然后表空间设置到稍比这位置大一点的大小。

1. 查该数据文件中数据处在{BANNED}{BANNED}{BANNED}最佳佳佳大位置

select max(block_id) from dba_extents where file_id=15;< /FONT>

max(block_id)

383497

查询file_id,也可在toad工具tablespace直接看到。

select file#,name from v$datafile;

2. 查出{BANNED}{BANNED}{BANNED}最佳佳佳大块位置

select 383497*8/1024 from dual;

2996.0703125

这说明该文件中{BANNED}{BANNED}{BANNED}最佳佳佳大使用块位于2996M与3000M之间,

3. 修改表空间(也可用toad工具界面修改)

ALTER DATABASE TEMPFILE '/opt/oracle/oradata/gctwp101/temp02.dbf' RESIZE 3000M;



--------

set verify off
col value format a20
column file_name format a50 word_wrapped
column smallest format 999,990 heading "Smallest|Size|Poss."
column currsize format 999,990 heading "Current|Size"
column savings format 999,990 heading "Poss.|Savings"
break on report
compute sum of savings on report

column value new_val blksize
select value from v$parameter where name = 'db_block_size'
/
select file_name,
ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) smallest,
ceil( blocks*&&blksize/1024/1024) currsize,
ceil( blocks*&&blksize/1024/1024) -
ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) savings
from dba_data_files a,
( select file_id, max(block_id+blocks-1) hwm
from dba_extents
group by file_id ) b
where a.file_id = b.file_id(+)
/
column cmd format a75 word_wrapped

set heading off feedback off termout off
spool /tmp/tmp_shrink_data_files.sql
select 'alter database datafile '''||file_name||''' resize ' ||
ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) || 'm;' cmd
from dba_data_files a,
( select file_id, max(block_id+blocks-1) hwm
from dba_extents
group by file_id ) b
where a.file_id = b.file_id(+)
and ceil( blocks*&&blksize/1024/1024) -
ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) > 0
/
spool off;
set heading on feedback on termout on





------

SELECT a.tablespace_name,
file_name,
c.VALUE / 1024 "Blk. size(Kb)",
CEIL ((NVL (hwm, 1) * c.VALUE) / 1024 / 1024) "smallest(Mb) - HWM",
CEIL (blocks * c.VALUE / 1024 / 1024) "currsize(Mb)",
CEIL (blocks * c.VALUE / 1024 / 1024) - CEIL ((NVL (hwm, 1) * c.VALUE) / 1024 / 1024) "savings(Mb)"
FROM dba_data_files a,
(SELECT file_id, MAX (block_id + blocks - 1) hwm
FROM dba_extents
GROUP BY file_id) b,
(SELECT VALUE
FROM v$parameter
WHERE NAME = 'db_block_size') c
WHERE a.file_id = b.file_id(+)
and a.status !='INVALID'
order by 6;






-----To select Tablespace status before housekeep table 7777777(save the result to a file.txt )
SELECT data_file_count.tablesapce_name_var tablespace_name,data_file_count.data_file_size "Tablespace_Size(MB)",nvl(data_file_used.used_size,0"Used(MB)",data_file_count.data_file_size-nvl(data_file_used.used_size,0"Free(MB)",
to_char(round(nvl(data_file_used.used_size,0)/data_file_count.data_file_size*100,2),'90.99')||'%' "Used(%)"
FROM
(
SELECT C.tablesapce_name_var,SUM(C.datafile_size_var) AS  data_file_size
FROM 
(
SELECT
T.tablespace_name  tablesapce_name_var,
decode(T.autoextensible,
'NO',round(SUM(T.BYTES)/(1024*1024),2),
'YES',round(SUM(T.maxbytes)/(1024*1024),2)
) datafile_size_var 
FROM  dba_data_files T
GROUP BY T.tablespace_name,T.autoextensible
)  C
GROUP BY C.tablesapce_name_var
) data_file_count
,
(
SELECT b.tablespace_name tablesapce_name_var2,round(SUM(b.BYTES)/(1024*1024),2) used_size
FROM dba_segments b
GROUP BY b.tablespace_name
) data_file_used
WHERE data_file_used.tablesapce_name_var2(+)=data_file_count.tablesapce_name_var
ORDER BY 5 DESC;

-----To select ASM diskgroup status before housekeep table 7777777(save the result to a file.txt)
select name,total_mb,free_mb,round(((total_mb - free_mb)/total_mb)*100,2)  "Used(%)" from v$asm_diskgroup order by 4;

-----To alter session parallel 
set define off;
alter session set db_securefile=ignore;
alter session force parallel DML parallel 32;
alter session force parallel DDL  parallel 32;

---------------Switch the user of the connected session---------------
alter session set current_schema=7777777;

---------------View currently connected username---------------
select SCHEMANAME from v$session where sid in (select distinct(sidfrom v$mystat);    

-----1. To ensure current table 7777777 uesed size(MB) 
select segment_name,segment_type,round(SUM(BYTES)/(1024*1024),2) used_size_MB from dba_segments where owner='7777777'  and segment_name='7777777' group by segment_name,segment_type order by 3 desc ;

-----2. To ensure current table 7777777 uesed size(MB) 
select table_owner||'.'||table_name,partition_name,high_value,tablespace_name from dba_tab_partitions where table_NAME='7777777' and table_owner='7777777' ;





-----3. truncate  7777777 image partition(just keeep this current month data)
alter table 7777777 truncate partition SYS_P9425 drop storage;
alter table 7777777 drop partition SYS_P9425 update INDEXES ;

alter table 7777777 truncate partition SYS_P10130 drop storage;
alter table 7777777 drop partition SYS_P10130 update INDEXES ;

alter table 7777777 truncate partition SYS_P11265 drop storage;
alter table 7777777 drop partition SYS_P11265 update INDEXES ;

alter table 7777777 truncate partition SYS_P12449 drop storage;
alter table 7777777 drop partition SYS_P12449 update INDEXES ;



-----3.1 drop  primary key
--alter table 7777777 drop constraint PK_7777777;
--drop INDEX PK_7777777 ;


-----3.2 shrink table storeage
ALTER TABLE 7777777 ENABLE ROW MOVEMENT;
ALTER TABLE 7777777 SHRINK SPACE COMPACT;
ALTER TABLE 7777777 SHRINK SPACE;
ALTER TABLE 7777777 disable ROW MOVEMENT;

-----3.2 shrink table storeage
alter table 7777777 deallocate unused keep 0;

-----3.3 rebuid  primary key
--alter table 7777777 add constraint PK_7777777 primary key("CARD_NUMBER", "MTI", "MANAGE_TYPE", "INTERNAL_STAN", "SRC_DBSERV_ID", "DST_DBSERV_ID", "INTERNAL_TRANSMISSION_TIME");


-----4.resize datafile which relate with table 7777777(save the result to a file.txt)
SELECT
T.tablespace_name  tablesapce_name_var,
t.file_id,
decode(T.autoextensible,
'NO',round(SUM(T.BYTES)/(1024*1024),2),
'YES',round(SUM(T.maxbytes)/(1024*1024),2)
) datafile_size_var 
FROM  dba_data_files T
where  tablespace_name in (select tablespace_name from dba_tab_partitions where table_NAME='7777777' and table_owner='7777777'
GROUP BY T.tablespace_name,T.autoextensible,t.file_id
order by T.tablespace_name;




-----5.resize datafile which relate with table 7777777

select  'alter database datafile '||c.file_id||' resize 1024m;' 
from 
(
SELECT
T.tablespace_name  tablesapce_name_var,
t.file_id,
decode(T.autoextensible,
'NO',round(SUM(T.BYTES)/(1024*1024),2),
'YES',round(SUM(T.maxbytes)/(1024*1024),2)
) datafile_size_var 
FROM  dba_data_files T
where  tablespace_name in (select tablespace_name from dba_tab_partitions where table_NAME='7777777' and table_owner='7777777'
GROUP BY T.tablespace_name,T.autoextensible,t.file_id
order by T.tablespace_name
) C
where c.datafile_size_var>5120;



a="
select  'alter database datafile '||c.file_id||' resize 1024m;'
from
(
SELECT
T.tablespace_name  tablesapce_name_var,
t.file_id,
decode(T.autoextensible,
'NO',round(SUM(T.BYTES)/(1024*1024),2),
'YES',round(SUM(T.maxbytes)/(1024*1024),2)
) datafile_size_var
FROM  dba_data_files T
where  tablespace_name in (select tablespace_name from dba_tables where table_NAME='7777777' and owner='7777777')
GROUP BY T.tablespace_name,T.autoextensible,t.file_id
order by T.tablespace_name
) C
where c.datafile_size_var>5120; 
"







-----To select Tablespace status after housekeep table 7777777(save the result to a file.txt)
SELECT data_file_count.tablesapce_name_var tablespace_name,data_file_count.data_file_size "Tablespace_Size(MB)",nvl(data_file_used.used_size,0"Used(MB)",data_file_count.data_file_size-nvl(data_file_used.used_size,0"Free(MB)",
to_char(round(nvl(data_file_used.used_size,0)/data_file_count.data_file_size*100,2),'90.99')||'%' "Used(%)"
FROM
(
SELECT C.tablesapce_name_var,SUM(C.datafile_size_var) AS  data_file_size
FROM 
(
SELECT
T.tablespace_name  tablesapce_name_var,
decode(T.autoextensible,
'NO',round(SUM(T.BYTES)/(1024*1024),2),
'YES',round(SUM(T.maxbytes)/(1024*1024),2)
) datafile_size_var 
FROM  dba_data_files T
GROUP BY T.tablespace_name,T.autoextensible
)  C
GROUP BY C.tablesapce_name_var
) data_file_count
,
(
SELECT b.tablespace_name tablesapce_name_var2,round(SUM(b.BYTES)/(1024*1024),2) used_size
FROM dba_segments b
GROUP BY b.tablespace_name
) data_file_used
WHERE data_file_used.tablesapce_name_var2(+)=data_file_count.tablesapce_name_var
ORDER BY 5 DESC;

-----To select ASM diskgroup status after housekeep table 7777777(save the result to a file.txt)
select name,total_mb,free_mb,round(((total_mb - free_mb)/total_mb)*100,2)  "Used(%)" from v$asm_diskgroup order by 4;




----------ASM reblanceUSED(%)
select nvl(a.name,'[candidate]'),b.path,b.name,b.total_mb,(b.total_mb - b.free_mb) used_mb,
case b.total_mb
when 0 then 0 
else round ((1-(b.free_mb/b.total_mb))*100,2)
end pct_used


from v$asm_diskgroup a right outer join v$asm_disk b using(group_number)
where 
a.name not like '%CAND%'
order by a.name,b.failgroup,b.path;


阅读(52) | 评论(0) | 转发(0) |
0

上一篇:每小时生成一个oracle_RAC AWR报告

下一篇:没有了

给主人留下些什么吧!~~