您的位置:首页 > 数据库 > Oracle

【转自Oracle ACS--惜总】一个重设Oracle 数据文件大小的sql语句

2015-04-26 15:34 369 查看
转自:

http://ask.orasos.com/thread-11-1-1.html

set verify off
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(+)
/ 

--上面的语句是查询datafile的现状,本行汉字是我自己加的。惜总的sql没有本行汉字。




column cmd format a75 word_wrapped

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
/

--上面的语句是生成 datafile的resize语句。本行汉字是我自己加的。惜总的sql没有本行汉字。




下面来试验一下:

[oracle@rhel63single ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Wed Apr 22 18:44:43 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set pages 200  
SQL> set verify off
SQL> column file_name format a50 word_wrapped
SQL> column smallest format 999,990 heading "Smallest|Size|Poss."
SQL> column currsize format 999,990 heading "Current|Size"
SQL> column savings  format 999,990 heading "Poss.|Savings"
SQL> break on report
SQL> compute sum of savings on report
SQL> 
SQL> column value new_val blksize
SQL> select value from v$parameter where name = 'db_block_size'
  2  / 

VALUE
--------------------------------------------------------------------------------
8192

SQL> SQL> select file_name,
  2         ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) smallest,
  3         ceil( blocks*&&blksize/1024/1024) currsize,
  4         ceil( blocks*&&blksize/1024/1024) -
  5         ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) savings
  6  from dba_data_files a,
  7       ( select file_id, max(block_id+blocks-1) hwm
  8           from dba_extents
  9          group by file_id ) b
 10  where a.file_id = b.file_id(+)
 11  / 

                                                   Smallest
                                                       Size  Current    Poss.
FILE_NAME                                             Poss.     Size  Savings
-------------------------------------------------- -------- -------- --------
/u01/app/oracle/oradata/test/system01.dbf               801      810        9
/u01/app/oracle/oradata/test/tb_test_01.dbf               5        5        0
/u01/app/oracle/oradata/test/test_uni_sz_1m_01.dbf       13      200      187
/u01/app/oracle/oradata/test/sysaux01.dbf             3,219    3,310       91
/u01/app/oracle/oradata/test/users01.dbf                348      365       17
/u01/app/oracle/oradata/test/ten01.dbf                   20       50       30
/u01/app/oracle/oradata/test/ts2.dbf                    201      500      299
/u01/app/oracle/oradata/test/undotbs01.dbf               69      240      171
/u01/app/oracle/oradata/test/test01.dbf                   7       50       43
/u01/app/oracle/oradata/test/test_uni_sz_2m_01.dbf        7       50       43
/u01/app/oracle/oradata/test/test.dbf                     1
/u01/app/oracle/oradata/test/ts1.dbf                      1      500      499
                                                                     --------
sum                                                                     1,389

12 rows selected.

SQL> column cmd format a75 word_wrapped
SQL> 
SQL> select 'alter database datafile '''||file_name||''' resize ' ||
  2         ceil( (nvl(hwm,1)*&&blksize)/1024/1024 )  || 'm;' cmd
  3  from dba_data_files a,
  4       ( select file_id, max(block_id+blocks-1) hwm
  5           from dba_extents
  6          group by file_id ) b
  7  where a.file_id = b.file_id(+)
  8    and ceil( blocks*&&blksize/1024/1024) -
  9        ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) > 0
 10  /

CMD
---------------------------------------------------------------------------
alter database datafile '/u01/app/oracle/oradata/test/system01.dbf' resize
801m;

alter database datafile
'/u01/app/oracle/oradata/test/test_uni_sz_1m_01.dbf' resize 13m;

alter database datafile '/u01/app/oracle/oradata/test/sysaux01.dbf' resize
3219m;

alter database datafile '/u01/app/oracle/oradata/test/users01.dbf' resize
348m;

alter database datafile '/u01/app/oracle/oradata/test/ten01.dbf' resize
20m;

alter database datafile '/u01/app/oracle/oradata/test/ts2.dbf' resize 201m;
alter database datafile '/u01/app/oracle/oradata/test/undotbs01.dbf' resize
69m;

alter database datafile '/u01/app/oracle/oradata/test/test01.dbf' resize
7m;

alter database datafile
'/u01/app/oracle/oradata/test/test_uni_sz_2m_01.dbf' resize 7m;

alter database datafile '/u01/app/oracle/oradata/test/ts1.dbf' resize 1m;

10 rows selected.

SQL>



一共12个datafile,为啥resize的时候返回10行呢?因为生成resize的sql是有条件的:

ceil( blocks*&&blksize/1024/1024) -
       ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) > 0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: