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.