Một trường hợp mà bạn có thể thấy LOB trong user_objects
nhưng việc tham gia user_lobs
không tìm thấy bất kỳ điều gì là nếu bảng đã bị xóa, nhưng is in the recycle bin.
create table t42 (my_clob clob);
table T42 created.
Đúng như dự đoán, truy vấn của Justin cho bạn thấy những 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 bất cứ điều gì:
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 còn 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
A thứ bạn có thể nhìn 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
Các LOB vẫn còn tồn tại trên đĩa và sử dụng lưu trữ, mà tôi đoán là những gì bạn đang quan tâm. Vì vậy, để loại trả lời câu hỏi của bạn, để thực sự thả LOB và phát hành lưu trữ của nó, bạn cần phải thanh lọc 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 nhìn thấy hiệu ứng này nếu bạn đặt tên cho phân khúc 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 đã đi từ user_objects
sau 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
Bộ nhớ vẫn đang được sử dụng và bạn vẫn cần phải thanh lọc để giải phóng nó, nó có vẻ đồng nhất 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 nhắc đến trong chú thích hỗ trợ 394442.1.
Cảm ơn bạn đã giải thích chi tiết và truy vấn mẫu – byneri
+1. Rất đẹp. Cảm ơn bạn vì câu trả lời ngắn gọn (và có thể đọc được)! – spencer7593