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

Jak zrezygnować z Oracle LOB

Jeden scenariusz, w którym możesz zobaczyć LOB w user_objects ale dołączenie do user_lobs nie znajduje niczego, jeśli tabela została już usunięta, ale jest w koszu .

create table t42 (my_clob clob);

table T42 created.

Zgodnie z oczekiwaniami zapytanie Justina pokazuje kolumnę:

select l.table_name,
       l.column_name,
       l.segment_name lob_name
  from user_lobs l
       join user_objects o
         on( o.object_name = l.segment_name );

TABLE_NAME  COLUMN_NAME LOB_NAME                     
----------- ----------- ------------------------------
T42         MY_CLOB     SYS_LOB0000133310C00001$$      

drop table t42;

table T42 dropped.

Teraz zapytanie Justina niczego nie znajduje:

select l.table_name,
       l.column_name,
       l.segment_name lob_name
  from user_lobs l
       join user_objects o
         on( o.object_name = l.segment_name );

no rows selected

Ale nadal jest w user_objects :

select object_name, object_type, status from user_objects
where object_type like 'LOB%';

OBJECT_NAME                    OBJECT_TYPE         STATUS
------------------------------ ------------------- -------
SYS_LOB0000133328C00001$$      LOB                 VALID   

Możesz to zobaczyć w koszu:

select * from user_recyclebin;

OBJECT_NAME                    ORIGINAL_NAME                    OPERATION TYPE                      TS_NAME                        CREATETIME          DROPTIME               DROPSCN PARTITION_NAME                   CAN_UNDROP CAN_PURGE    RELATED BASE_OBJECT PURGE_OBJECT      SPACE
------------------------------ -------------------------------- --------- ------------------------- ------------------------------ ------------------- ------------------- ---------- -------------------------------- ---------- --------- ---------- ----------- ------------ ----------
SYS_IL0000133310C00001$$       SYS_IL0000133310C00001$$         DROP      LOB INDEX                 USERS                          2013-08-22:08:33:21 2013-08-22:08:33:21    1.0E+13                                  NO         NO            133310      133310       133310          0 
SYS_LOB0000133310C00001$$      SYS_LOB0000133310C00001$$        DROP      LOB                       USERS                          2013-08-22:08:33:21 2013-08-22:08:33:21    1.0E+13                                  NO         NO            133310      133310       133310          0 
BIN$5IUNXtWkUXLgQwEAAH9TlQ==$0 T42                              DROP      TABLE                     USERS                          2013-08-22:08:33:21 2013-08-22:08:33:21    1.0E+13                                  YES        YES           133310      133310       133310          0 

LOB nadal istnieje na dysku i wykorzystuje pamięć masową, co, jak sądzę, jest tym, o co się martwisz. Aby odpowiedzieć na twoje pytanie, aby naprawdę porzucić LOB i zwolnić jego pamięć, musisz wyczyścić całą tabelę:

purge table t42;

table purged.

select object_name, object_type, status from user_objects
where object_type like 'LOB%';

no rows selected

Co ciekawe, nie widzisz tego efektu, jeśli nazwiesz segment LOB:

create table t42 (my_clob clob)
lob (my_clob) store as my_clob_segment;

Powtarzając powyższe kroki, wpis przeszedł z user_objects po drop .

drop table t42;

table T42 dropped.

select object_name, object_type, status from user_objects
where object_type like 'LOB%';

no rows selected

select * from user_recyclebin;

OBJECT_NAME                    ORIGINAL_NAME                    OPERATION TYPE                      TS_NAME                        CREATETIME          DROPTIME               DROPSCN PARTITION_NAME                   CAN_UNDROP CAN_PURGE    RELATED BASE_OBJECT PURGE_OBJECT      SPACE
------------------------------ -------------------------------- --------- ------------------------- ------------------------------ ------------------- ------------------- ---------- -------------------------------- ---------- --------- ---------- ----------- ------------ ----------
BIN$5IUNXtWnUXLgQwEAAH9TlQ==$0 MY_CLOB_SEGMENT                  DROP      LOB                       USERS                          2013-08-22:08:36:41 2013-08-22:08:36:41    1.0E+13                                  NO         NO            133316      133316       133316          0 
BIN$5IUNXtWoUXLgQwEAAH9TlQ==$0 T42                              DROP      TABLE                     USERS                          2013-08-22:08:36:41 2013-08-22:08:36:41    1.0E+13                                  YES        YES           133316      133316       133316          0 
SYS_IL0000133316C00001$$       SYS_IL0000133316C00001$$         DROP      LOB INDEX                 USERS                          2013-08-22:08:36:41 2013-08-22:08:36:41    1.0E+13                                  NO         NO            133316      133316       133316          0 

Pamięć jest oczywiście nadal używana i nadal musisz ją wyczyścić, aby ją zwolnić, po prostu wygląda nieco bardziej spójnie w słowniku danych. Może to wygląda na (bardzo drobny) błąd. Może to być związane z zachowaniem, o którym mowa w nocie pomocy technicznej 394442.1.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć maszynę wirtualną z VirtualBox?

  2. Jak wyświetlić plan wyjaśniania w programie Oracle SQL Developer?

  3. Konwersja kolumn na wiersze w Oracle

  4. Wyrocznia. Brak słowa kluczowego podczas korzystania z instrukcji case. Błąd 00905

  5. Oracle Concurrent Manager — CP Analyzer dla pakietu E-Business Suite