ব্যর্থ বা কখনও প্রতিশ্রুতিবদ্ধ ছিল না এমন লেনদেন পান


10

এসকিউএল সার্ভার ২০১২-এ ব্যর্থ লেনদেনের সন্ধান করতে আমি কোথাও থাকতে পারি?

উত্তর:


5

না, এসকিউএল সার্ভার কোনও লেনদেন সম্পর্কে কোনও ইতিহাস বজায় রাখে না যেগুলি বাতিল করা হয়েছিল / ঘূর্ণিত হয়েছিল যা তুচ্ছ এবং অতিরিক্ত সম্ভাব্য সমস্যাগুলি প্রবর্তন করে না (যেমন @ আউটওয়্যারের উত্তরে বর্ণিত )। বা এমনকি লেনদেন যে প্রতিশ্রুতিবদ্ধ হয়েছে।

আপনার ত্রুটি পরিচালনার মধ্যে আপনার নিজের লগিং সম্পাদন করতে হবে, বা সার্ভার-সাইড ট্রেস বা বর্ধিত ইভেন্টগুলি ব্যবহার করে নির্দিষ্ট লেনদেন-সম্পর্কিত ইভেন্টগুলি ক্যাপচার করতে হবে।

ট্রেস:

এখানে চিত্র বর্ণনা লিখুন

বর্ধিত ইভেন্ট:

এখানে চিত্র বর্ণনা লিখুন


নিশ্চিত যে এটি রয়েছে, তারা লগ ফাইল এবং লগ ব্যাকআপ ফাইলগুলিতে রয়েছে।
14:30 এ আউটওয়্যার

1
@ আউটওয়্যার এবং কীভাবে আপনি সহজে তাদের কাছে পাবেন? এবং যদি তারা আর লগ না করে থাকে তবে কীভাবে আপনি তাদের কাছে পাবেন? এই লগ রেকর্ডগুলি সেরা ক্ষণস্থায়ী হয়।
অ্যারন বার্ট্র্যান্ড

আমার উত্তর দেখুন। ঘন ঘন লগ ব্যাকআপ তৈরি করা সবচেয়ে ভাল উপায়। আমি একমত যে এই জাতীয় সমাধান আদর্শ নয়; তবে আমি বাতিল হওয়া লেনদেনের জন্য কেন সর্বদা প্রোডে অনুসন্ধান করে চলেছি তার কোনও কারণ দেখছি না। যদি ইচ্ছা হয় তবে ট্রেস বা এক্সএভেন্টের চেয়ে বুদ্ধিমান সমাধান মনে হবে।
আউটওয়্যার

2
আমি অবশ্যই আপনার উত্তর দেখেছি। আমি সহজেই বলেছি এবং নির্ভরযোগ্যভাবেও বলা উচিত ছিল । :-)
অ্যারন বারট্র্যান্ড

6
আমি এইটিতে @ অ্যারোনবার্ট্র্যান্ডের সাথে আছি। সমস্যার সাথে লেনদেনের লগগুলিতে ঝাঁকুনি নিতে হবে ( দ্রষ্টব্য: তারা কী উদ্দেশ্যে রইল না ) পাশাপাশি আপনি এই সমস্যা সমাধানের জন্য কেবল একটি হালকা এক্সই অধিবেশন তৈরি করতে পারেন।
থমাস স্ট্রিংগার

4

আপনি যখন "ব্যর্থ" লেনদেন বলবেন, ঠিক আপনার অর্থ কী?

আপনি যদি এই উদাহরণে বর্তমান লেনদেন দেখতে চান তবে আপনি sys.dm_tran_active_transactionsডিএমভি ব্যবহার করতে পারেন ।

এছাড়াও, sys.dm_exec_sessionsএটি open_transaction_countআপনাকে সেশন দ্বারা এই তথ্য দিতে পারে। নীচে খোলা লেনদেন রয়েছে এমন সমস্ত ব্যবহারকারীর প্রক্রিয়া টানতে ডায়াগনস্টিক ক্যোয়ারী দেওয়া হল:

select 
    s.session_id,
    s.login_name,
    s.open_transaction_count,
    st.text as most_recent_sql_text
from sys.dm_exec_sessions s
inner join sys.dm_exec_connections c
on s.session_id = c.session_id
outer apply sys.dm_exec_sql_text(c.most_recent_sql_handle) st
where s.is_user_process = 1
and s.open_transaction_count > 0;

এই তথ্য থেকে এড়াতে পারেন sys.dm_tran_session_transactions:

select
    session_id,
    is_user_transaction,
    open_transaction_count
from sys.dm_tran_session_transactions;

যদি লেনদেনগুলি ফিরিয়ে দেওয়া হয় তখন আপনি ক্যাপচার করতে চান ("ব্যর্থ" লেনদেনের জন্য আপনার ইচ্ছা দ্বারা এতটুকু ধরে নেওয়া) আপনি বর্ধিত ইভেন্ট rollback_tran_completedইভেন্ট ক্যাপচার করতে পারেন । আপনি যদি লেনদেনের জন্য "সবকিছু" দেখার সন্ধান করেন তবে আপনি sql_transactionইভেন্টটি ক্যাপচার করতে পারেন যা এসকিউএল সার্ভারের দ্বারা সংজ্ঞায়িত is

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


4

আপনি fn_dblog () ব্যবহার করতে পারেন এবং অব্যাহত লেনদেনের জন্য লেনদেনের আইডি পাশাপাশি অন্যান্য দরকারী তথ্যের হোস্ট পেতে পারেন।

নির্বাচন করুন * 
FN_dblog থেকে (NULL, NULL)
WHERE অপারেশন = 'LOP_ABORT_XACT';
যাওয়া

এটি লগের সক্রিয় অংশে সমস্ত লেনদেন লগ স্ক্যান করে। এটি ট্রেস পতাকা 2537 ব্যবহার করে ওভার-রাইডেড হতে পারে, যা আপনাকে সবচেয়ে প্রাচীন "অন-পুনঃব্যবহৃত" ভিএলএফ শুরু করতে যতদূর সম্ভব ফিরে যেতে দেয়। এই ফাংশনটি ব্যবহার করার সময় সাবধানতা অবলম্বন করুন, যেহেতু এটি লগটি এলোমেলোভাবে স্ক্যান করে এবং স্ক্যানটি যখন ঘটে তখন লগ পরিবর্তন করতে পারে না; সুতরাং, আপনি লগ বৃদ্ধি দেখতে পারেন।

লগ ব্যাকআপ ফাইলের বিরুদ্ধে আপনি fn_dump_dblog ব্যবহার করতে পারেন।

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