2013-08-21 5 views
7

ड्रॉप करने के बाद क्वेरी उपयोगकर्ता के डाटाबेस वस्तुओं को सूचीबद्ध करने के लिए इस्तेमाल किया जा सकता:कैसे Oracle LOB

select object_name, object_type from user_objects; 

प्रविष्टियों की जोड़ी जहां object_type LOB है कर रहे हैं।

ओरेकल में इन LOB ऑब्जेक्ट्स को कैसे छोड़ा जा सकता है?

उत्तर

16

एक परिदृश्य जहां आप user_objects में LOB देख सकते हैं लेकिन user_lobs में शामिल होने से कुछ भी नहीं मिलता है यदि तालिका पहले ही गिरा दी गई है, लेकिन is in the recycle bin

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. 

अब जस्टिन क्वेरी नहीं मिल रहा है कुछ भी:

create table t42 (my_clob clob); 

table T42 created. 

जैसी उम्मीद थी, जस्टिन क्वेरी आप स्तंभ दिखाता है

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 

लेकिन यह अभी भी 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 

ए nd आप रीसायकल बिन में देख सकते हैं:

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 अभी भी डिस्क पर मौजूद है और, भंडारण का उपयोग कर जो मुझे लगता है कि तुम क्या बारे में चिंतित हैं है। तो एक तरह से अपने सवाल का जवाब देने, वास्तव में LOB ड्रॉप और इसके भंडारण जारी करने के लिए आप पूरी तालिका शुद्ध करने के लिए की जरूरत है:

purge table t42; 

table purged. 

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

no rows selected 

दिलचस्प बात यह है कि आप इस आशय यदि आप LOB सेगमेंट का नाम नहीं दिख रहा है:

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

उपरोक्त चरण दोहराते, प्रवेश drop के बाद user_objects से चला गया है।

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 

भंडारण अभी भी निश्चित रूप से किया जा रहा है और आप अभी भी इसे खाली करने के लिए शुद्ध करने के लिए की जरूरत है, यह सिर्फ डाटा डिक्शनरी में थोड़ा और अधिक सुसंगत लग रहा है। तो यह सबसे अधिक (बहुत मामूली) बग की तरह दिखता है। यह समर्थन नोट 394442.1 में निर्दिष्ट व्यवहार से संबंधित हो सकता है।

+0

विस्तृत व्याख्या और नमूना प्रश्न – byneri

+1

+1 के लिए धन्यवाद। बहुत अच्छा। संक्षिप्त (और पठनीय) उत्तर के लिए धन्यवाद! – spencer7593

3

LOB ऑब्जेक्ट को हटा दिया जाएगा यदि आप उस तालिका को छोड़ते हैं जिसमें संबंधित LOB कॉलम होता है या उस तालिका से LOB कॉलम ड्रॉप करता है। आप देख सकते हैं कि आपके विशेषाधिकारों के आधार पर DBA_LOBS, ALL_LOBS, या USER_LOBS से पूछताछ करके कोई विशेष LOB ऑब्जेक्ट किस कॉलम का समर्थन करता है।

उदाहरण

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) 

के लिए आप क्या मेज और क्या स्तंभ अपने स्कीमा का समर्थन करता है में LOB वस्तुओं में से प्रत्येक को दिखायेगी।

+1

उपरोक्त क्वेरी मेरे उपयोगकर्ता के लिए 0 पंक्तियां लौटा दी। – byneri

+1

all_lobs (user_lobs के बजाय) पूछताछ करते समय भी 0 पंक्तियां। Dba_lobs से पूछताछ नहीं कर सकता: "ORA-00942: तालिका या दृश्य मौजूद नहीं है" – byneri

संबंधित मुद्दे