Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara menjatuhkan Oracle LOB

Satu skenario di mana Anda dapat melihat LOB di user_objects tapi gabungkan ke user_lobs tidak menemukan apa pun adalah jika tabel telah dijatuhkan, tetapi ada di recycle bin .

create table t42 (my_clob clob);

table T42 created.

Seperti yang diharapkan, kueri Justin menampilkan kolom kepada Anda:

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.

Sekarang kueri Justin tidak menemukan apa pun:

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

Tapi itu masih di 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   

Dan Anda dapat melihatnya di recycle bin:

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 masih ada di disk dan menggunakan penyimpanan, yang saya kira adalah yang Anda khawatirkan. Jadi untuk menjawab pertanyaan Anda, untuk benar-benar menjatuhkan LOB dan melepaskan penyimpanannya, Anda perlu membersihkan seluruh tabel:

purge table t42;

table purged.

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

no rows selected

Menariknya Anda tidak melihat efek ini jika Anda memberi nama segmen LOB:

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

Mengulangi langkah-langkah di atas, entri telah berubah dari user_objects setelah 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 

Penyimpanan masih digunakan tentu saja dan Anda masih perlu membersihkannya untuk membebaskannya, hanya saja terlihat sedikit lebih konsisten dalam kamus data. Jadi ini terlihat seperti bug (sangat kecil), mungkin, paling banyak. Ini mungkin terkait dengan perilaku yang dirujuk dalam catatan dukungan 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. DBD::Instalasi Oracle menyebabkan kesalahan

  2. Jalankan SCRIPT dari PL/SQL Block

  3. Mengambil data besar dari Oracle dengan Python

  4. mendapatkan daftar yang dipisahkan koma di dekat 'xx.yy' tidak valid dengan dbms_utility.comma_to_table

  5. Java terhubung ke beberapa database