2014-07-24 4 views
5

मेरे पास एक ब्लॉब कॉलम वाला विभाजन तालिका है। जब एकाधिक उपयोगकर्ताओं द्वारा इस तालिका से प्रति पंक्ति एकाधिक पंक्तियां हटा दी जाती हैं, तो हम अक्सर ओआरए-00060 डेडलॉक-एस में भाग लेते हैं, जो कि टीआरसी फाइलों के अनुसार LOB इंडेक्स विभाजन में आईटीएल डेडलॉक्स के कारण होते हैं। तो मैं डिफ़ॉल्ट LO2 इंडेक्स INITRANS के साथ तालिका को फिर से बनाना चाहता हूं। मैं create table ... (... lob (...) store as ... (... index ... (... initrans 10 ...))) के साथ गैर-विभाजित तालिका के लिए ऐसा कर सकता हूं, लेकिन विभाजित तालिका के लिए ओरेकल कहते हैं "ओआरए -22879: LOB INDEX क्लॉज का उपयोग नहीं कर सकता विभाजित टेबल "। क्या कोई अन्य तरीका है जिसे मैं विभाजित LOB इंडेक्स के लिए INITRANS सेट कर सकता हूं?विभाजित LOB अनुक्रमणिका के लिए INITRANS निर्दिष्ट कैसे करें?

(अपडेट: ध्यान दें कि मैं मौजूदा तालिका में परिवर्तन करने की जरूरत नहीं है, मैं इसे सिरे से पुन: कर सकते हैं यही कारण है कि आम तौर पर आसान है।।)

jonearles के संपादन इस प्रकार है:

यहाँ का एक उदाहरण है सामान्य विधि कैसे काम नहीं करती है:

create table test1(a number, b clob) 
partition by range (a) (partition p1 values less than (1)); 

select * from dba_indexes where owner = user and table_name = 'TEST1'; 

--ORA-22864: cannot ALTER or DROP LOB indexes 
alter index SYS_IL0000111806C00002$$ initrans 3; 

यह ध्यान रखना दिलचस्प है कि सूचकांक डीडीएल वास्तव में अजीब दिखता है। नीचे दिया गया कोड नहीं चलाएगा - इंडेक्स में कोई अभिव्यक्ति नहीं है और ब्रांडेसिस भी बंद नहीं है।

select dbms_metadata.get_ddl('INDEX', 'SYS_IL0000111806C00002$$') from dual; 

    CREATE UNIQUE INDEX "JHELLER"."SYS_IL0000111806C00002$$" ON "JHELLER"."TEST1" (
    PCTFREE 10 INITRANS 1 MAXTRANS 255 
    STORAGE(
    BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) LOCAL 
(PARTITION "SYS_IL_P19289" 
    PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING 
    STORAGE(INITIAL 65536 NEXT 1048576 MAXEXTENTS 2147483645 
    BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) 
    TABLESPACE "USERS" , 
PARTITION "SYS_IL_P19290" 
    PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING 
    STORAGE(INITIAL 65536 NEXT 1048576 MAXEXTENTS 2147483645 
    BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) 
    TABLESPACE "USERS") 
    PARALLEL (DEGREE 0 INSTANCES 0) 
+0

http://dba.stackexchange.com/ –

उत्तर

-1

यह त्रुटि के पीछे तर्क की तरह लग रहा है कि LOB भी विभाजित है ताकि आप प्रत्येक विभाजन को बदलने की जरूरत होगी। मैं Oracle से एक नोट में पाया गया कि वे जिस तरह से स्थानांतरित करने के लिए एक कार्य विभाजन है:

alter table <table name> move partition <table partition name> 
lob (<lob column name>) store as (tablespace <lob tablespace name>) 

तो मुझे आश्चर्य है अगर आप भी इस का उपयोग कर सकते इसके भंडारण मानकों, जैसे बदलने के लिए:

alter table <table name> move partition <table partition name> 
lob (<lob column name>) store as (... index ... (... initrans 10 ...))) 

मैं डॉन ' t विभाजन सक्षम है इसलिए इसे आज़माएं नहीं।

+0

पर बेहतर प्रतिक्रिया मिल सकता है जब मैं काम पर वापस आऊंगा (अगले सप्ताह) मैं इसे आजमाऊंगा। हालांकि, यह तालिका "अंतराल विभाजित" भी है, इसलिए नए विभाजन ओरेकल द्वारा स्वचालित रूप से बनाए जाते हैं। – ddekany

+0

इस तरह की एक विधि सामान्य रूप से यहां काम नहीं करेगी, प्रश्न में जोड़े गए उदाहरण को देखें। –

+0

@jonearles क्षमा करें, लेकिन मुझे आपके द्वारा प्रश्न में जोड़े गए उदाहरण (जो ALTER INDEX का उपयोग करता है) और मेरे उत्तर में सुझाव के बीच कनेक्शन नहीं दिख रहा है। आप सही हो सकते हैं कि यह काम नहीं करेगा; मेरे पास इसका परीक्षण करने का कोई तरीका नहीं है; लेकिन आपका उदाहरण यह नहीं दिखाता है कि जहां तक ​​मैं कह सकता हूं। –

2

ओरेकल तकनीकी समर्थन ने कहा कि मैं विभाजित LOB इंडेक्स के लिए INITRANS निर्दिष्ट नहीं कर सकता। हालांकि, उन्होंने यह भी देखा है कि SECUREFILE विकल्प DEDUPLICATE LOB विकल्प (जो हमने किया) के साथ समस्या का कारण हो सकता है। तो मैंने DEDUPLICATE LOB छोड़ दिया है (बस सुनिश्चित करने के लिए, इसे KEEP_DUPLICATES के साथ प्रतिस्थापित किया गया है) और अब LOB अनुक्रमणिका deadlocks चले गए हैं! (मैं KEEP_DUPLICATES साथ एक छोटी सी तनाव परीक्षण लिखा है, और उस के साथ आप DEDUPLICATE LOB साथ मिनट में मृत ताला त्रुटियों के दर्जनों पैदा कर सकता है, लेकिन कोई भी।)

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