8i | 9i | 10g | 11g | 12c | 13c | 18c | 19c | 21c | Różne | PL / SQL | SQL | RAC | WebLogic | Linux
Strona główna „Artykuły” 8i „Tutaj
Oracle 8i wprowadził możliwość usuwania kolumny z tabeli. Wcześniej konieczne było usunięcie całej tabeli i odbuduj go. Teraz możesz oznaczyć kolumnę jako nieużywaną (usunięcie logiczne) lub całkowicie ją usunąć (usunięcie fizyczne).
- Usuń logiczne
- Usuń fizycznie
- Rozważania
Logiczne usuwanie
W przypadku dużych tabel proces fizycznego usuwania kolumny może być bardzo czasochłonny i zasobochłonny. Z tego powodu możesz zdecydować się na logiczne usunięcie
alter table table_name set unused (column_name);alter table table_name set unused (column_name1, column_name2);
Gdy to zrobisz, kolumny nie będą już widoczne dla użytkownika. Jeśli w późniejszym czasie będziesz mieć czas na fizyczne usunięcie kolumn, można wykonać w następujący sposób.
alter table table_name drop unused columns;
W przypadku dużych tabel można zmniejszyć ilość cofniętych dzienników zgromadzonych za pomocą opcji PUNKT KONTROLNY, która wymusza punkt kontrolny po określonej wiersze zostały przetworzone.
Widok DBA_UNUSED_COL_TABS
może służyć do wyświetlania liczby nieużywanych kolumn w tabeli.
Fizyczne usuwanie
Aby fizycznie usunąć kolumnę, możesz użyć jednej z następujących składni, w zależności od tego, czy chcesz usunąć jedną, czy wiele kolumn.
alter table table_name drop column column_name;alter table table_name drop (column_name1, column_name2);
Porzucenie kolumna z tabeli spowoduje, że wszystkie nieużywane kolumny w tej tabeli zostaną usunięte w tym samym czasie.
Uwagi
Usunięcie kolumny może nie skutkować dodatkowym użytecznym wolnym miejscem w bloku. Jeśli kolumna jest mała, w każdym bloku otrzymasz tylko małe fragmenty miejsca, które mogą nie nadawać się do ponownego wykorzystania. Jedynym sposobem, w jaki zostanie to zwolnione do ponownego wykorzystania, jest odbudowanie / przeniesienie tabeli. Bardziej wydajne jest oznaczenie kolumny jako nieużywalnej, a następnie odbudowanie tabeli. Domyślnie przenoszenie nie jest operacją online.
alter table table_name set unused (column_name);alter table table_name move;
W nowszych wersjach bazy danych operację przenoszenia można wykonać online.
alter table table_name set unused (column_name);alter table table_name move online;
Mam nadzieję, że to pomoże. Pozdrawiam Tim …
Powrót na górę