Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да се отърва от празна, но огромна LOB колона?

Като алтернатива на премахването и повторното добавяне на колоната можете да използвате shrink space клауза :

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

db<>цигулка , което е 18c, но трябва да работи и в 11g. (По-късно:да, прави го в 11gR2 с retention none така или иначе пропуснат; SQL Fiddle обаче не го харесва.)

Пропуснах този детайл, но все още работи; просто се нуждаете от допълнителна стъпка, за да намерите скритата BLOB колона, архивираща колоната XMLType, както е показано тук . Направих alter динамично само за да вземете това в движение, но ако можете да го намерите ръчно, можете просто да го включите сами в изявлението очевидно:

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<>цигулка

Вероятно си струва да се отбележи, че това работи с basicfile съхранение, както е показано във вашата минимална демонстрация, но може да не работи с securefile съхранение - поне част от времето, което извежда ORA-10635:Невалиден тип сегмент или таблично пространство.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да копирам или импортирам схеми на Oracle между две различни бази данни на различни сървъри?

  2. Многонишково четене на база данни

  3. ORA-00932:непоследователни типове данни:очаквано - получено -

  4. Грешка в израза на Oracle MERGE (ORA-30926)

  5. PLS-00201 идентификатор „PACKAGENAME.PROCEDURENAME“ трябва да бъде деклариран