ওরাকল - কোনও নির্দিষ্ট টেবিলে আপত্তিহীন পরিবর্তনগুলি দেখার কোনও উপায়?


24

আমি বর্তমানে একটি ব্যাচ প্রক্রিয়াটি ডিবাগ করছি যা ডিএমএল প্রচুর বিবৃতি দেয়, তবে এখনই কোন প্রতিশ্রুতি দেয় না। লেনদেনটি প্রতিশ্রুতিবদ্ধ না হওয়াতে অন্য সেশন থেকে "মুলতুবি" পরিবর্তনগুলি দেখতে সক্ষম হয়ে ভালো লাগবে। এটা কি সম্ভব?

উদাহরণ:

Insert into table myTable (col1, col2) values ("col1", "col2");

--Somehow view the pending transaction maybe by system view?....

...other DML statements....

commit;

এটি করার একাধিক উপায় রয়েছে। উদাহরণস্বরূপ, এখানে এসকিউএল বিবৃতি সমাধান করতে পারে: ducquoc.wordpress.com/2012/07/14/oracle- uncommited- পরিবর্তন ভাগ্যবান,

উত্তর:


18

আপনার ব্যাচ প্রক্রিয়া সম্পর্কিত বিবরণ এবং কেন আপনি অনির্ধারিত পরিবর্তনগুলি দেখার চেষ্টা করছেন তার উপর নির্ভর করে কিছু আলাদা পদ্ধতির রয়েছে।

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

২) ডিবিএমএস_এক্সএ প্যাকেজটি আপনাকে একটি সেশন থেকে অন্য সেশনে একটি লেনদেন "হ্যান্ড অফ" করার জন্য এবং একটি সেশনকে অন্য সেশন দ্বারা শুরু হওয়া কোনও লেনদেনে সংযোগ করার অনুমতি দেওয়ার জন্য ব্যবহার করা যেতে পারে। এটি ব্যবহার করার জন্য এটি একটি অস্পষ্ট প্যাকেজ, তবে এটি পিএল / এসকিউএল চ্যালেঞ্জ (এটি অ্যাক্সেস করার জন্য আপনার একটি নিখরচায় অ্যাকাউন্টের প্রয়োজন হতে পারে) ব্যবহার করার একটি দুর্দান্ত উদাহরণ ছিল ।

৩) আপনি যদি আসল ডেটা দেখার চেয়ে ব্যাচ প্রক্রিয়াটির স্থিতি দেখার চেষ্টা করছেন তবে ব্যাচ প্রক্রিয়া স্বায়ত্তশাসিত লেনদেন ব্যবহার করে লগিংয়ের তথ্য লিখতে পারে যা আপনি অন্য সেশন থেকে জিজ্ঞাসা করতে পারবেন। অথবা আপনি আপনার অ্যাপ্লিকেশনটি ভি $ সেশন এবং / অথবা ভি $ এসেসিওন_লংওপিএসে বিভিন্ন বৈশিষ্ট্য আপডেট করার জন্য DBMS_APPLICATION_INFO প্যাকেজটি ব্যবহার করতে পারেন যাতে আপনি অন্য সেশন থেকে লোডের অবস্থান নিরীক্ষণ করতে পারেন।


10

সম্পাদনা: প্রশ্নটি স্পষ্ট হওয়ার আগে এটি লেখা হয়েছিল

আপনি নিজের অনির্কিত ডেটা ছাড়াই টেবিলটি দেখতে ফ্ল্যাশব্যাক ক্যোয়ারী ব্যবহার করতে পারেন ।

বিবেচনা:

SQL> CREATE TABLE my_table
  2  AS SELECT ROWNUM ID FROM dual CONNECT BY LEVEL <= 5;

Table created

SQL> INSERT INTO my_table VALUES (6);

1 row inserted

আমার লেনদেনের সাথে টেবিলের মধ্যে পার্থক্যটি দেখতে এবং অন্য যেভাবে আমি ইস্যু করতে পারি তা দেখতে টেবিলের মধ্যে:

SQL> SELECT * FROM my_table
  2  MINUS
  3  SELECT * FROM my_table AS OF TIMESTAMP (systimestamp);

        ID
----------
         6

2
@ জ্যাক: এটি যদি স্পষ্ট হয় না যে ওপি তার অধিবেশনটির বাইরে নিরঙ্কুশিত ডেটা দেখতে চায় (সিউডো-স্ক্রিপ্ট কোনও এক অধিবেশনে থাকতে পারে)। আমার উত্তরটি কেবল নিজের টেবিলে থাকা নিজস্ব মুলতুবি পরিবর্তনগুলি দেখার জন্য কাজ করবে।
ভিনসেন্ট ম্যালগ্র্যাট

আপনি ঠিক বলেছেন, দুঃখিত। দুর্দান্ত উত্তর।
জ্যাক ডগলাস

8

হ্যাঁ - লগমিনার এটি করতে পারে। আসলে, আপনি যদি কেবল প্রতিশ্রুতিবদ্ধ লেনদেন চান তবে আপনাকে নির্দিষ্টভাবে আউটপুট ফিল্টার করতে হবে! এবং সেখানে TABLE_NAMEআছে V$LOGMINER_CONTENTS, আপনি কিভাবে একক টেবিল তাকান।


8

ওরাকলের কাছে যা নেই তা হ'ল পঠনহীন বিচ্ছিন্নতা মোড । অন্য কথায় আপনি অন্য লেনদেনে অনির্দিষ্ট ডেটা জিজ্ঞাসা করতে পারবেন না।

দীর্ঘদিন চলমান লেনদেনের বাইরে তথ্য পাওয়ার উপায় রয়েছে - এটি এখন পর্যন্ত উল্লেখ করা হয়নি হ'ল স্বায়ত্তশাসিত লেনদেন (যা সতর্কতার সাথে ব্যবহার করা উচিত)


5

সরাসরি কোন পদ্ধতি নেই; হয় আপনি লগগুলি পার্স করতে হবে (অন্য উত্তরে উল্লিখিত হিসাবে), বা দীর্ঘমেয়াদী প্রক্রিয়াতে কী ঘটছে তা দেখতে বিকল্প পদ্ধতিগুলি ব্যবহার করতে হবে।

ব্যক্তিগতভাবে, আমি এই বৈশিষ্ট্যটি সক্ষম করতে স্বায়ত্তশাসিত লেনদেনগুলি ব্যবহার করার পরামর্শ দিচ্ছি - লেনদেনে নিজেই নয়, লগিং মেকানিজম হিসাবে আপনাকে কী চলছে তা আপনাকে জানাতে। উদাহরণস্বরূপ, আপনার কাছে PROCEDURE LONG_ACTION কল করা যেতে পারে PROCEDURE WRITE_LOG_ENTRY (একটি স্বায়ত্তশাসিত লেনদেন হিসাবে সংজ্ঞায়িত) যা অন্য কোনও টেবিলে VARCHAR2 লিখতে পারে। স্বায়ত্তশাসিত লেনদেনগুলি আপনার বর্তমান লেনদেনের সাথে হস্তক্ষেপ করবে না (একটি যৌক্তিক দৃষ্টিকোণ থেকে; পারফরম্যান্সের সম্ভাব্য প্রভাবগুলি থেকে সাবধান থাকুন) এবং যাতে আপনি দেখতে পারেন আপনার বর্তমান লেনদেনে কোনও কমিট বা রোলব্যাক নির্বিশেষে আপনার লগিং এন্ট্রিগুলির মাধ্যমে কী চলছে। এটি বলেছিল, একটি বিশাল ডিএমএল বিবৃতি দিয়ে আপনি এটি করতে পারবেন; আপনাকে একটি লুপ ব্যবহার করতে হবে

বিবেচনা:

TABLE LOG_ENTRIES defined as
    activity_date  date,
    log_entry varchar2(2000)

TABLE BIG_JOB (definition doesn't really matter)

PROCEDURE WRITE_LOG_ENTRY
                        ( str VARCHAR2 )
IS
    PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    INSERT INTO LOG_ENTRIES VALUES ( SYSDATE, str );
    COMMIT;
END;

PROCEDURE LONG_ACTION IS
    c NUMBER;
BEGIN
    FOR r IN ( SELECT * FROM BIG_JOB )
    LOOP
       c := c + 1;
       UPDATE BIG_JOB z
          SET fld = hairy_calculation
        WHERE z.rowid = r.rowid;
       IF MOD(c,500) = 0 THEN
           WRITE_LOG_ENTRY ( c || ' rows processed.' );
       END IF;
    END LOOP;
    COMMIT;
END;

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

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

(অবশেষে, কারণ আমি এর আগে এটি উল্লেখ করা অবহেলা করেছি: স্বায়ত্তশাসিত লেনদেন থেকে সাবধান থাকুন implementing প্রয়োগের পূর্বে সেগুলি পুরোপুরি বুঝুন এবং তাদের "ঠিক কারণ" ব্যবহার করবেন না They এগুলি মিলিয়ন উপায়ে ভুলভাবে ব্যবহার করা যেতে পারে (উদাহরণস্বরূপ, এটিএমটিএমটি থেকে ট্রিগারটিতে কোনও মিউটর ত্রুটি এড়ান), তাই সম্ভব হলে বিকল্পগুলি সন্ধান করা সর্বদা সেরা you যদি আপনি না পারেন তবে সাবধানতার সাথে এগিয়ে যান long দীর্ঘকালীন অপ্সের সময় লগইন করা সর্বদা এমন একটি ক্ষেত্রে রয়েছে যেখানে এটি মোটামুটি নিরাপদ (উপেক্ষা করা) পারফরম্যান্স সমস্যা), তবে ফলাফলগুলি না জেনে এটি অন্য ব্যবহারগুলিতে প্রয়োগ করতে তাড়াহুড়া করবেন না))


1
এই পরামর্শের শেষে থাকা ক্যাভেটগুলি আমার দীর্ঘ প্রতিক্রিয়াতে (কোড সহ) আরও orawin.info/blog/2011/09/06/advice-from-the-internetঅন্বেষণ করা হয়েছে । সংক্ষেপে এই পদ্ধতির অবলম্বন গুরুতর এবং বিরূপভাবে কোডটিকে ইতিমধ্যে ধীর গতিতে প্রভাবিত করতে পারে।
নিলাল লিচফিল্ড

1
@ নিলাল লিচফিল্ড, বরাবরের মতো, ইন্টারনেটের পরামর্শ নেওয়ার সময়, সর্বদা পরীক্ষা করা, পরীক্ষা করা, পরীক্ষা করা উচিত। যখন উল্লেখ করা হয়েছিল যে স্বায়ত্তশাসিত লেনদেন লেনদেনকে প্রভাবিত করে না, আমি এই বিষয়টি উল্লেখ করছি যে এটি আপনার বর্তমান লেনদেনকে কমিট বা রোলব্যাক করে না; সুতরাং একটি যুক্তিযুক্ত অর্থে, এটি আপনার বর্তমান লেনদেনের কিছুই করে না। হ্যাঁ, অবশ্যই, ওরাকল জিনিসগুলিকে কাজ করতে পর্দার আড়ালে কিছু করেছে, যার অর্থ পারফরম্যান্সের সমস্যা হতে পারে, কেবলমাত্র একটি লেনদেনের দৃষ্টিকোণ থেকে, স্বায়ত্তশাসিত লেনদেনটি আমার বর্তমান লেনদেনের রাজ্যের পথে পায় না।
কেরি শটস

@ নিলাল লিচফিল্ড, যা কিছু বলেছে, স্বায়ত্তশাসিত লেনদেনগুলির সমস্যাগুলির নিজস্ব ন্যায্য অংশ রয়েছে (যার মধ্যে একটি হ'ল লোকেরা পরিবর্তনের টেবিলটি পেতে তাদের ব্যবহার করার চেষ্টা করে) এবং তাই আমি এগুলি অল্প পরিমাণে এবং সাবধানতার সাথে সুপারিশ করি এবং কেবলমাত্র কী হচ্ছে তা বোঝার সাথে।
কেরি শটস

3

10 জি তে উপলভ্য নয় তবে ডিবিএমএস_এক্সএ লেনদেনকে একাধিক সেশন অতিক্রম করার অনুমতি দিতে পারে। এটি ব্যবহার করে দ্বিতীয় সেশনটি লেনদেনে কী খুশি তা দেখতে পাবে


3

এখানে অন্যান্য তথ্য ছাড়াও, অনির্বাচিত লেনদেন সম্পর্কিত তথ্য প্রেরণের অতিরিক্ত কিছু উপায় হ'ল একটি ইমেল প্রেরণ করা বা কোনও পাঠ্য ফাইলে লিখিত।

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