sql >> Database teknologi >  >> RDS >> Oracle

Sådan dropper du Oracle LOB

Et scenarie, hvor du kan se en LOB i user_objects men joinforbindelsen til user_lobs finder ikke noget, er hvis tabellen allerede er blevet slettet, men er i papirkurven .

create table t42 (my_clob clob);

table T42 created.

Som forventet viser Justins forespørgsel dig kolonnen:

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.

Nu finder Justins forespørgsel ikke noget:

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

Men det er stadig i 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   

Og du kan se det i papirkurven:

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'en eksisterer stadig på disken og bruger lagerplads, hvilket jeg formoder er det, du er bekymret over. Så for at svare på dit spørgsmål, for virkelig at slippe LOB og frigive dets lager, skal du rense hele bordet:

purge table t42;

table purged.

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

no rows selected

Interessant nok ser du ikke denne effekt, hvis du navngiver LOB-segmentet:

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

Ved at gentage ovenstående trin er indgangen gået fra user_objects efter 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 

Lageret bliver selvfølgelig stadig brugt, og du skal stadig rense for at frigøre det, det ser bare lidt mere konsekvent ud i dataordbogen. Så det ligner en (meget mindre) fejl, måske højst. Det kan være relateret til den adfærd, der henvises til i supportnote 394442.1.



  1. Indsættelse af SQL Server-data i Salesforce med en markør

  2. mysql - søg tidsstempel efter time på dagen

  3. PostgreSQL kan ikke begynde/afslutte transaktioner i PL/pgSQL

  4. JSON_OBJECTAGG() – Opret et JSON-objekt fra forespørgselsresultater i MySQL