Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak pozbyć się pustej, ale ogromnej kolumny LOB?

Jako alternatywę dla upuszczania i ponownego dodawania kolumny możesz użyć shrink space klauzula :

ALTER TABLE t MODIFY LOB (c) (SHRINK SPACE);

db<>skrzypce , który ma 18c, ale powinien działać również w 11g. (Później:tak, robi to w 11gR2 z retention none i tak pominięte; SQL Fiddle jednak tego nie lubi.)

Brakowało tego szczegółu, ale nadal działa; potrzebujesz tylko dodatkowego kroku, aby znaleźć ukrytą kolumnę BLOB tworzącą kopię zapasową kolumny XMLType, jak pokazano tutaj . Wykonałem alter dynamiczna tylko po to, by wychwycić to w locie, ale jeśli możesz znaleźć to ręcznie, możesz po prostu samodzielnie podłączyć to do instrukcji:

DECLARE
  l_name USER_TAB_COLUMNS.COLUMN_NAME%TYPE;
  l_stmt VARCHAR2(100);
BEGIN
  select column_name
  into l_name
  from user_tab_cols 
  where 
    table_name = 'T' and hidden_column = 'YES'
    and
    column_id = (
        select column_id 
        from user_tab_cols 
        where table_name = 'T' and column_name = 'X'
    );

  l_stmt := 'ALTER TABLE t MODIFY LOB ("' || l_name || '") (SHRINK SPACE)';
  dbms_output.put_line(l_stmt);
  execute immediate l_stmt;
END;
/

db<>skrzypce

Prawdopodobnie warto zauważyć, że działa to z basicfile pamięć, jak pokazano w twoim minimalnym demo, ale może nie działać z securefile pamięć - przynajmniej przez pewien czas, przez który rzuca ORA-10635:Nieprawidłowy typ segmentu lub obszaru tabel.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie blob (Oracle) zwraca Metoda nie jest zaimplementowana przez sterownik JDBC (Jboss eap 5.1)

  2. Kiedy wartości kolumn indeksu Oracle są puste?

  3. Powiązać OCI sysdate() z parametrem PDO?

  4. AKTUALIZACJA ODP.NET... POWRÓT DO... wielu wierszy, Typ parametru

  5. jak odbudować kolejkę wf_java_deferred