2011-02-01 18 views
14

Czy istnieje sposób, w jaki mogę określić rozmiar bloku mojej bazy danych Oracle, jeśli nie mam dostępu do widoku v$parameter?Zapytanie o rozmiar mojego bloku

Dzięki!

f.

+0

Uwaga: Oracle obsługuje inny rozmiar bloku dla każdego tablespaspace. Parametr valuse v v $ jest po prostu "domyślny". – ibre5041

Odpowiedz

16

Można to zrobić:

select distinct bytes/blocks from user_segments; 
+0

który to zrobił. dzięki. – filippo

+1

To zapytanie jest bardzo kosztowne, lepiej rozważ coś w rodzaju wartości wybranej z parametru v $, gdzie name = 'db_block_size' –

+0

@GuidoLeenders: "jeśli nie mam dostępu do widoku parametrów v $"! –

1

Tak, to masz poważny problem. Odpytywanie user_segments może być naprawdę powolne, szczególnie gdy korzystasz z SAP lub Infor BAAN, które tworzą dziesięć tysięcy segmentów i mają tendencję do fragmentacji słownika danych. Najlepiej przekonać administratora DBA, aby przyznał ci dostęp w jakiś sposób, być może poprzez widok z v_ $.

Alternatywa, która działa lepiej: kiedy możesz tworzyć segmenty, masz dostęp do obszarów tabel (zauważ, że wyróżnienie nie działa, gdy nie masz żadnych segmentów). Lista ta jest na ogół krótsza, więc na przykład użytku:

wybierz bajtów/bloków z user_ts_quotas

Że nadal pozostawia nam z problemem inżynierii społecznej z lokalną DBA gdy użytkownik jest tak ograniczony, że nie mają kontyngent :-)

+0

Naprawdę? Chciał poznać rozmiar bloku i nie miał dostępu do widoku parametrów v $. Nawet jeśli zapytanie dotyczące user_segments zajęło 5 minut, wciąż otrzymywało odpowiedź w 5 minut. O ile nie ma szczególnej potrzeby sprawdzania rozmiaru bloku bazy danych kilka razy dziennie, wydaje się, że OTT prosi administratora DBA o przywilej, aby dowiedzieć się o wiele szybciej? –

2

W Oracle, rozmiar bloku jest ustawiony na tabelę. Możesz zapytać user_tablespaces lub dba_tablespaces (jeśli masz dostęp) i zobaczyć rozmiar bloku dla każdego obszaru tabel; te widoki zwykle działają natychmiast.

Możesz również dołączyć do tych 2 do dba_tabeli, user_tables lub all_tables i pomnożyć liczbę bloków przez rozmiar bloku, aby uzyskać całkowity rozmiar tabeli w bajtach (podzielić przez 1024 * 1024, aby uzyskać rozmiar w MB etc.)

1

Ponieważ rozmiar bloku jest różna dla każdej tabel lepiej wykorzystać następujące zapytanie:

select block_size, tablespace_name from dba_tablespaces;