Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách bỏ Oracle LOB

Một tình huống mà bạn có thể thấy LOB trong user_objects nhưng tham gia vào user_lobs không tìm thấy gì là nếu bảng đã bị xóa, nhưng đang ở trong thùng rác .

create table t42 (my_clob clob);

table T42 created.

Như mong đợi, truy vấn của Justin hiển thị cho bạn cột:

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.

Bây giờ truy vấn của Justin không tìm thấy gì cả:

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

Nhưng nó vẫn nằm trong 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   

Và bạn có thể thấy nó trong thùng rác:

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 vẫn tồn tại trên đĩa và đang sử dụng bộ nhớ, điều mà tôi đoán là bạn đang lo lắng. Vì vậy, để trả lời câu hỏi của bạn, để thực sự loại bỏ LOB và giải phóng bộ nhớ của nó, bạn cần phải xóa toàn bộ bảng:

purge table t42;

table purged.

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

no rows selected

Điều thú vị là bạn không thấy hiệu ứng này nếu bạn đặt tên cho đoạn LOB:

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

Lặp lại các bước ở trên, mục nhập đã chuyển từ user_objects sau khi thả 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 

Tất nhiên, bộ nhớ vẫn đang được sử dụng và bạn vẫn cần phải dọn dẹp để giải phóng nó, nó chỉ có vẻ nhất quán hơn một chút trong từ điển dữ liệu. Vì vậy, điều này trông giống như một lỗi (rất nhỏ), có thể, nhiều nhất. Nó có thể liên quan đến hành vi được đề cập trong ghi chú hỗ trợ 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. 12c cột IDENTITY

  2. Tổng hợp các giá trị riêng biệt trong các tập hợp trong SQL GROUP BY

  3. Hàm TO_CHAR (số) trong Oracle

  4. POSTMAN đang trả về các trường ngày với các giá trị đã thay đổi

  5. Cập nhật biểu mẫu Apex Tabular với PLSQL