powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Empty Tablespaces
10 сообщений из 10, страница 1 из 1
Empty Tablespaces
    #32101697
Bardis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vot uzh ne dumal, chto opredelit pustyje TS v bolshoj base budet tak slozhno.

elementarnyj Statement:

select tablespace_name from dba_tablespaces
where tablespace_name not in
(select distinct tablespace_name
from dba_segments);

imejet Plan na 1000 Strok i dlitsya na BD s 17000 Segmentov bolshe 20 Min,
prichinyaja 16000000 consistent gets.

Peredelal na PL/SQL:

declare
v_tsname varchar2(30);
v_tssize integer;
v_tsfree integer;
v_tsfpct integer;
v_tsstot integer := 0;
v_tsftot integer := 0;
v_string varchar2(79);
v_empty integer;
cursor c1 is
select tablespace_name,round(sum(bytes)/1024/1024,2) tssize
from dba_data_files
group by tablespace_name;
cursor c2 is
select distinct name
from ts$ t,seg$ s
where t.ts#=s.ts#;
cursor c3 is
select round(sum(bytes)/1024/1024,2) tsfree
from dba_free_space
where tablespace_name = v_tsname;
begin
dbms_output.enable(50000);
v_string := rpad('Tablespace',30)||lpad('Size (Mb)',12)||lpad('Free (Mb)',12)||lpad('Pct free',10);
dbms_output.put_line(v_string);
for i1 in c1 loop
v_tsname:=i1.tablespace_name;
v_tssize := i1.tssize;
v_empty:=1;
for i2 in c2 loop
if i2.name=v_tsname then
v_empty:=0;
end if;
end loop;
if v_empty=1 then
v_tsstot := v_tsstot + v_tssize;
for i3 in c3 loop
v_tsfree := i3.tsfree;
v_tsftot := v_tsftot + v_tsfree;
v_tsfpct := round(v_tsfree * 100 / v_tssize,0);
v_string := rpad(v_tsname,30)||lpad(v_tssize,12)||lpad(v_tsfree,12)||lpad(v_tsfpct,10);
dbms_output.put_line(v_string);
end loop;
end if;
end loop;
v_string := rpad('-',30,'-')||' '||lpad('-',11,'-')||' '||lpad('-',11,'-')||' '||lpad('-',9,'-');
dbms_output.put_line(v_string);
v_tsfpct := round(v_tsftot * 100 / v_tsstot,0);
v_string := rpad('Total',30)||lpad(v_tsstot,12)||lpad(v_tsftot,12)||lpad(v_tsfpct,10);
dbms_output.put_line(v_string);
v_string := chr(10);
dbms_output.put_line(v_string);
end;
effekt totzhe.

Hotel chtoby bylo krasivo, a poluchilos kak vsegda!:((

Mozh pomozhet kto, lyudi dobryje!!!
...
Рейтинг: 0 / 0
Empty Tablespaces
    #32101744
D_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
D_A
Гость
так вроде быстрее:
Код: plaintext
1.
2.
3.
4.
5.
6.
select tablespace_name from dba_tablespaces
minus
select tablespace_name from dba_tablespaces t
 where exists (
     select  1  from dba_segments s
     where s.tablespace_name = t.tablespace_name )
...
Рейтинг: 0 / 0
Empty Tablespaces
    #32101837
Bardis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k sozhaleniju i

select tablespace_name from dba_tablespaces t
2 where not exists (
3 select 1 from dba_segments s
4* where s.tablespace_name = t.tablespace_name )

dlitsya bolshe 15 minut.

Dolzhen byt gde-to drugoj vychod.
...
Рейтинг: 0 / 0
Empty Tablespaces
    #32101861
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> select t.tablespace_name
from dba_tablespaces t
minus
select distinct tablespace_name
from dba_segments s
/

TABLESPACE_NAME
 ------------------------------
 
OEM_REPOZITARY
...
Рейтинг: 0 / 0
Empty Tablespaces
    #32101903
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, кто лучше?

вот мой вариант:
Код: plaintext
1.
2.
3.
4.
select  /*+ rule */  t.NAME
from sys.ts$ t
where not exists (select  1  
	  	from sys.seg$ s 
		where t.TS# = s.TS#)
...
Рейтинг: 0 / 0
Empty Tablespaces
    #32102218
Bardis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Variant konechmo luchshij, no resultaty zaprosov ne sovpadajut.
...
Рейтинг: 0 / 0
Empty Tablespaces
    #32102226
Bardis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
obschem rodil krokodila :-).
Kto zhelajet polzujtes. Spasibo za pomosch.

set pause off
set echo off
set termout on
prompt
prompt sel_ts_empty.sql
prompt
prompt Script lists the empty tablespaces.
prompt
define spoolfile = sel_ts_empty.lst
set pages 50000
set linesize 79
set heading on
set verify off
set feedback off
set serveroutput on
spool &&spoolfile
declare
v_tsname varchar2(30);
v_tssize integer;
v_tsfree integer;
v_tsfpct integer;
v_tsstot integer := 0;
v_tsftot integer := 0;
v_string varchar2(79);
cursor c1 is
select tablespace_name,round(sum(bytes)/1024/1024,2) tssize
from dba_data_files
where tablespace_name in (
select tablespace_name from dba_tablespaces
minus
select tablespace_name from dba_tablespaces t
where exists (
select 1 from dba_segments s
where s.tablespace_name = t.tablespace_name )
)
group by tablespace_name;
cursor c2 is
select round(sum(bytes)/1024/1024,2) tsfree
from dba_free_space
where tablespace_name = v_tsname;
begin
dbms_output.enable(50000);
v_string := rpad('Tablespace',30)||lpad('Size (Mb)',12)||lpad('Free (Mb)',12)||lpad('Pct

free',10);
dbms_output.put_line(v_string);
v_string := rpad('-',30,'-')||' '||lpad('-',11,'-')||' '||lpad('-',11,'-')||' '||lpad('-',9,'-');
dbms_output.put_line(v_string);
for i1 in c1 loop
v_tsname := i1.tablespace_name;
v_tssize := i1.tssize;
v_tsstot := v_tsstot + v_tssize;
for i2 in c2 loop
v_tsfree := i2.tsfree;
v_tsftot := v_tsftot + v_tsfree;
v_tsfpct := round(v_tsfree * 100 / v_tssize,0);
v_string := rpad(v_tsname,30)||lpad(v_tssize,12)||lpad(v_tsfree,12)||lpad(v_tsfpct,10);
dbms_output.put_line(v_string);
end loop;
end loop;
v_string := rpad('-',30,'-')||' '||lpad('-',11,'-')||' '||lpad('-',11,'-')||' '||lpad('-',9,'-');
dbms_output.put_line(v_string);
v_tsfpct := round(v_tsftot * 100 / v_tsstot,0);
v_string := rpad('Total',30)||lpad(v_tsstot,12)||lpad(v_tsftot,12)||lpad(v_tsfpct,10);
dbms_output.put_line(v_string);
v_string := chr(10);
dbms_output.put_line(v_string);
end;
/
spool off
clear breaks
clear computes
set pages 60
set verify on
set feedback on
prompt
prompt Output is spooled to &&spoolfile
prompt
undef spoolfile
...
Рейтинг: 0 / 0
Empty Tablespaces
    #32102303
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Variant konechmo luchshij, no resultaty zaprosov ne sovpadajut.

А что именно не совпадает?
...
Рейтинг: 0 / 0
Empty Tablespaces
    #32102592
Bardis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ne sovpadajet kollichestbo empty tablespaces. Pochozhe chto seg$ mozhet soderzhat segmenty allokirovanyje v uzhe ne suschstvujuschich tablespasah.
...
Рейтинг: 0 / 0
Empty Tablespaces
    #32102597
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nesovpadaut iz-za znacheniya polya online$ = 3 v TS$ --> ono oznachaet, cho TS udalena

dlya sovpadeniya nuzno:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select  /*+ rule */  t.NAME
from sys.ts$ t
where not exists (select  1  
                           from sys.seg$ s 
                           where t.TS# = s.TS#)
and
t.online$ <>  3 ;

raznica megdu 2 zaprosami:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
SQL> select  /*+ rule */  t.NAME
from sys.ts$ t
where not exists (select  1 
                           from sys.seg$ s
                           where t.TS# = s.TS#)
and
t.online$ <>  3 ;

NAME
 ------------------------------
 
TOOLS
BERNIES_TEMP
TBERNIES_TEMP
TEMP

Elapsed:  00 : 00 : 00 . 16 
SQL> select  /*+ rule */  t.NAME
from sys.ts$ t
where not exists (select  1 
                           from sys.seg$ s
                           where t.TS# = s.TS#)
;
NAME
 ------------------------------
 
TOOLS
bernies_index
BERNIES_TEMP
tbernies_data
tbernies_index
tbernies_temp
TBERNIES_TEMP
TEMP

 8  rows selected.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Empty Tablespaces
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]