ORA-30926: উত্স টেবিলগুলিতে সারিগুলির একটি স্থিতিশীল সেট পেতে অক্ষম


129

আমি পাচ্ছি

ORA-30926: উত্স টেবিলগুলিতে সারিগুলির একটি স্থিতিশীল সেট পেতে অক্ষম

নিম্নলিখিত প্রশ্নের মধ্যে:

  MERGE INTO table_1 a
      USING 
      (SELECT a.ROWID row_id, 'Y'
              FROM table_1 a ,table_2 b ,table_3 c
              WHERE a.mbr = c.mbr
              AND b.head = c.head
              AND b.type_of_action <> '6') src
              ON ( a.ROWID = src.row_id )
  WHEN MATCHED THEN UPDATE SET in_correct = 'Y';

আমি দৌড়েছি table_1এটিতে ডেটা রয়েছে এবং আমি অভ্যন্তরীণ কোয়েরিও চালিয়েছি ( src) যাতেও ডেটা রয়েছে।

কেন এই ত্রুটি আসবে এবং কীভাবে সমাধান করা যায়?

উত্তর:


202

এটি সাধারণত মার্কিন যুক্তরাষ্ট্রে নির্দিষ্ট করা ক্যোয়ারীতে নকলের কারণে ঘটে is সম্ভবত এটির অর্থ হ'ল TABLE_A একটি প্যারেন্ট সারণী এবং একই ROWID বেশ কয়েকবার ফিরে আসে।

আপনি আপনার ক্যোয়ারিতে একটি DISTINCT ব্যবহার করে দ্রুত সমস্যার সমাধান করতে পারেন (আসলে, যদি 'Y' একটি ধ্রুবক মান হয় তবে আপনাকে এটিকে কোয়েরিতে রাখার প্রয়োজন নেই)।

আপনার জিজ্ঞাসাটি সঠিক বলে ধরে নেওয়া (আপনার টেবিলগুলি জানেন না) আপনি এরকম কিছু করতে পারেন:

  MERGE INTO table_1 a
      USING 
      (SELECT distinct ta.ROWID row_id
              FROM table_1 a ,table_2 b ,table_3 c
              WHERE a.mbr = c.mbr
              AND b.head = c.head
              AND b.type_of_action <> '6') src
              ON ( a.ROWID = src.row_id )
  WHEN MATCHED THEN UPDATE SET in_correct = 'Y';

1
সম্ভবত এই কারণেই অন্যান্য পদ্ধতির (আমার জন্য) আমার জন্য অন্যান্য ত্রুটিগুলিও ফিরে পেয়েছিল (যেমন 'পদ্ধতি, ফাংশন, প্যাকেজ বা প্রকারের অনুমতি নেই এখানে' এবং 'একটি কলামটি সংশোধন করতে পারে না যা কোনও কী-সংরক্ষিত টেবিল ত্রুটির মানচিত্র রাখার চেষ্টা করছে) একটি ভিউ )োকান ')। It যদি এটি অন্য কাউকে সহায়তা করে তবে আমি আমার অভ্যন্তরীণ ক্যোয়ারির সাথে যোগ না দেওয়ার আগ পর্যন্ত স্বতন্ত্র যোগ করার পরেও একই ত্রুটি পেয়েছি তাই আমি এক সারণির চেয়ে আরও বেশি সারণী টেবিলটি দিয়ে শুরু করেছিলাম এবং সেখান থেকে অভ্যন্তরীণভাবে যোগ দিয়েছি ... যদি তা হয় জ্ঞান করে তোলে।
জিঙ্গলেস্তুলা

40

আপনি সম্ভবত লক্ষ্য সারণির একই সারিটি একাধিকবার আপডেট করার চেষ্টা করছেন। আমি বিকাশিত একত্রীকরণ বিবৃতিতে সবেমাত্র একই সমস্যার মুখোমুখি হয়েছি। আপনার আপডেটটি মার্জটি কার্যকর করার সময় একই রেকর্ডটিকে একাধিকবার স্পর্শ না করে তা নিশ্চিত করুন।


1
+1, ধন্যবাদ, এটি কেবলমাত্র একটি সংখ্যক নকল (কমপক্ষে সংশ্লেষে ব্যবহৃত কীগুলির উপর ভিত্তি করে) একটি লক্ষ্য টেবিলে আমার সাথে ঘটেছিল।
টিউন

6

কীভাবে ORA-30926 ত্রুটিগুলি সমাধান করবেন? (ডক আইডি 471956.1)

1) ব্যর্থতা বিবৃতি সনাক্ত করুন

সেশন সেট ইভেন্টগুলি পরিবর্তন করুন '30926 ট্রেস নেম এররোস্ট্যাক স্তর 3';

অথবা

সিস্টেম সেট ইভেন্টগুলিকে পরিবর্তন করুন '30926 ট্রেস নেম এররোস্ট্যাক বন্ধ';

এবং UDUMP এ .trc ফাইলগুলির জন্য দেখুন।

2) এসকিউএল বিবৃতিটি সন্ধানের পরে, এটি সঠিক কিনা তা পরীক্ষা করে দেখুন (সম্ভবত ক্যোয়ারি এক্সিকিউশন প্ল্যানটি পরীক্ষা করার জন্য প্ল্যান বা টেকপ্রফ ব্যবহার করুন) এবং বিশ্লেষণ বা সারণীগুলির পরিসংখ্যান বিশ্লেষণ বা সাম্প্রতিককালে এটি করা না থাকলে। পুনর্নির্মাণ (বা বাদ দেওয়া / পুনরুদ্ধার) সূচীগুলিও সহায়তা করতে পারে।

৩.১) এসকিউএল স্টেটমেন্টটি কি মার্জ? যোগদানের কোনও সদৃশ মান নেই তা নিশ্চিত করার জন্য মার্কিন যুক্তরাষ্ট্রে ফিরে আসা ডেটাগুলি মূল্যায়ন করুন। সংজ্ঞা যেখানে শৃঙ্খলা যুক্ত করার জন্য মার্জ স্টেটমেন্টটি সংশোধন করুন

৩.২) এটি কোনও ভিউয়ের মাধ্যমে কোনও আপডেট আপডেট? যদি তা হয় তবে দৃশ্যের ফলাফলটিকে একটি টেবিলের মধ্যে স্থাপনের চেষ্টা করুন এবং টেবিলটি সরাসরি আপডেট করার চেষ্টা করুন।

৩.৩) টেবিলে কি ট্রিগার আছে? এটি এখনও ব্যর্থ হয় কিনা তা দেখতে এটি অক্ষম করার চেষ্টা করুন।

৩.৪) বিবৃতিতে কোনও 'আইএন-সাবকোয়ারি' -তে কোনও অ-মার্জযোগ্য দৃশ্য রয়েছে? এর ফলে ডুপ্লিকেট সারিগুলি ফিরে আসতে পারে যদি ক্যোয়ারিতে "ফর আপডেটের জন্য" ধারা থাকে। বাগ 2681037 দেখুন

3.5) টেবিলটিতে অব্যবহৃত কলাম রয়েছে? এগুলি বাদ দেওয়া ত্রুটিটিকে রোধ করতে পারে।

4) যদি এসকিউএল সংশোধন করা ত্রুটি নিরাময় করে না, সমস্যাটি টেবিলের সাথে থাকতে পারে, বিশেষত যদি সেখানে শিকলযুক্ত সারি থাকে are ৪.১) এসকিউএলে ব্যবহৃত সমস্ত টেবিলগুলিতে সারণী বা এর সূচকগুলিতে কোনও দুর্নীতি রয়েছে কিনা তা দেখতে 'অ্যানালাইজ টেবিল ভ্যালিডেট স্ট্রাকচার ক্যাসকেড' বিবৃতিটি চালান। ৪.২) টেবিলে যে কোনও CHAINED বা মাইগ্রেটেড ROWS রয়েছে তা পরীক্ষা করুন এবং নির্মূল করুন। এটি হ্রাস করার বিভিন্ন উপায় রয়েছে যেমন পিসিটিএফফির সঠিক সেটিং। নোট 122020.1 ব্যবহার করুন - সারি চেইনিং এবং মাইগ্রেশন 4.3) টেবিলটি অতিরিক্ত সূচকগুলি সংগঠিত করা থাকলে দেখুন: নোট 102932.1 - আইওটিগুলিতে শৃঙ্খলাবদ্ধ সারি নিরীক্ষণ করুন


5

আজ একটি 12 সি তে ত্রুটি থাকলে এবং বিদ্যমান উত্তরগুলির মধ্যে কোনওটিই ফিট করে না (কোনও নকল, WHERE ধারাটিতে কোনও অ-নিরস্তাত্মক অভিব্যক্তি নয়)। আমার মামলাটি ত্রুটির অন্যান্য সম্ভাব্য কারণের সাথে সম্পর্কিত ছিল, ওরাকলের বার্তার পাঠ্য অনুসারে (নীচে জোর দেওয়া):

ORA-30926: উত্স টেবিলগুলিতে সারিগুলির একটি স্থিতিশীল সেট পেতে অক্ষম
কারণ: বড় ডিএমএল ক্রিয়াকলাপ বা অ- নিরোধক যেখানে ক্লজ থাকায় সারিগুলির একটি স্থিতিশীল সেট পাওয়া যায়নি ।

মার্জটি একটি বৃহত্তর ব্যাচের অংশ ছিল, এবং অনেক সহবর্তী ব্যবহারকারীদের সাথে একটি লাইভ ডাটাবেসে কার্যকর করা হয়েছিল। বিবৃতি পরিবর্তন করার দরকার পড়েনি। আমি মার্জ হওয়ার আগেই লেনদেনটি প্রতিশ্রুতিবদ্ধ করেছি, তারপর আলাদাভাবে মার্জটি চালিয়েছি এবং আবার প্রতিশ্রুতিবদ্ধ। সুতরাং সমাধানটি বার্তার প্রস্তাবিত ক্রিয়ায় পাওয়া গেল:

ক্রিয়া: যে কোনও অ- নিরোধককে সরিয়ে ফেলুন যেখানে ক্লজ করে এবং ডিএমএল পুনরায় প্রকাশ করুন


আমি NETWORK_LINKপরিসংখ্যান সংগ্রহের পর্যায়ে নেটওয়ার্কের মাধ্যমে ডেটা পাম্প আমদানি করে এমন ত্রুটি বার্তাটি পেয়েছিলাম ( প্যারামিটার যা সোর্স ডাটাবেসের সাথে সরাসরি সংযোগ করে) এবং আপনার হাইলাইটেড নোটটি সম্ভবত এটি ব্যাখ্যা করে। ভাগ্যক্রমে কেবল পরিসংখ্যানগুলি প্রভাবিত হয়েছিল।
মার্ক স্টিয়ার্ট

1
SQL Error: ORA-30926: unable to get a stable set of rows in the source tables
30926. 00000 -  "unable to get a stable set of rows in the source tables"
*Cause:    A stable set of rows could not be got because of large dml
           activity or a non-deterministic where clause.
*Action:   Remove any non-deterministic where clauses and reissue the dml.

সদৃশ রেকর্ডগুলির (16 কে) কারণে আমার জন্য এই ত্রুটি ঘটেছে

আমি এটি কাজ করে অনন্য সঙ্গে চেষ্টা করেছি ।

তবে আবার যখন আমি অনন্য একই সমস্যা ছাড়াই একত্রীকরণের চেষ্টা করেছি দ্বিতীয়বার এটি প্রতিশ্রুতিবদ্ধ হওয়ার কারণে হয়েছিল

মার্জ হওয়ার পরে যদি কমিট না করা হয় তবে একই ত্রুটি দেখানো হবে।

অনন্য ছাড়া, প্রতিটি মার্জ অপারেশনের পরে প্রতিশ্রুতি দেওয়া হলে ক্যোরি কাজ করবে।


-1

সাধারণ ক্ষেত্রে ত্রুটি ORA-30926 সমাধানের জন্য DISTINCT ব্যবহারের আরও একটি ব্যাখ্যা:

আপনাকে নিশ্চিত করতে হবে যে ইউএসিং () দফা দ্বারা সুনির্দিষ্ট ডেটা সেটটিতে যুক্ত হওয়া কলামগুলির অনুলিপি , যেমন ওএন () ধারাটিতে থাকা কলামগুলির কোনও সদৃশ মান নেই ।

ও.পি.-এর উদাহরণে যেখানে ইউএসিং ক্লজটি কেবল একটি কী নির্বাচন করে, এটি ব্যবহারের দফায় DISTINCT যুক্ত করার পক্ষে যথেষ্ট ছিল। যাইহোক, সাধারণ ক্ষেত্রে ইউএসিং ক্লজটি আপডেট করার জন্য ব্যবহৃত কলামগুলির সাথে মিলের জন্য এবং কলামগুলিকে আপডেট করতে ... সেটের ধারাটিতে নির্বাচন করতে পারে ... সুতরাং সাধারণ ক্ষেত্রে, ডিভাইসটি ব্যবহারের শর্তে যুক্ত করা এখনও একই কীগুলির জন্য বিভিন্ন আপডেট সারিগুলিকে মঞ্জুরি দেয়, সেক্ষেত্রে আপনি এখনও ORA-30926 ত্রুটি পাবেন।

এটি ডিসির জবাব এবং তাগরের উত্তরের ৩.১ পয়েন্টের একটি ব্যাখ্যা যা আমার অভিজ্ঞতা থেকে অবিলম্বে সুস্পষ্ট নাও হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.