একটি SQL সার্ভার টেবিলে পরিবর্তন চেক করুন?

কোনও টার্ম ব্যবহার করে বা ডাটাবেসের কাঠামো কোনও ভাবেই পরিবর্তন না করে আমি কিভাবে একটি SQL সার্ভার ডাটাবেস নিরীক্ষণ করতে পারি? আমার পছন্দের প্রোগ্রামিং পরিবেশ । NET এবং C #।

আমি কোনও SQL সার্ভার 2000 SP4 বা নতুন সমর্থন করতে চাই। আমার অ্যাপ্লিকেশন অন্য কোম্পানির পণ্য জন্য একটি বেল্ট-উপর তথ্য ভিজ্যুয়ালাইজেশন। আমাদের গ্রাহক বেস হাজার হাজার, তাই আমি প্রয়োজনীয়তা রাখা চাই না যে আমরা প্রতিটি ইনস্টলেশনের সময়ে তৃতীয় পক্ষের বিক্রেতা এর টেবিল পরিবর্তন।

"একটি সারণিতে পরিবর্তন" দ্বারা আমি সারণির তথ্য পরিবর্তন, সারণির কাঠামো পরিবর্তন না মানে।

পরিশেষে, আমি একটি অ্যাপ্লিকেশন ট্রিগার একটি পরিবর্তনের জন্য একটি ব্যবধান সময়ে পরিবর্তনের জন্য চেক করার পরিবর্তে একটি অনুষ্ঠান ট্রিগার চাই।


আমার প্রয়োজনীয়তা দেওয়া কোনও সঠিক পদক্ষেপ (কোন ট্রিগার বা স্কিমা সংশোধন, SQL সার্ভার 2000 এবং 2005) মনে হয় BINARY_CHECKSUM ফাংশন টি-এসকিউএল । যেভাবে আমি বাস্তবায়ন করতে চাই তা এই:

প্রতিটি X সেকেন্ড নিম্নলিখিত প্রশ্নটি চালায়:

SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);

এবং সঞ্চিত মূল্যের তুলনায় এটি তুলনা করুন মান পরিবর্তিত হলে, ক্যোয়ারী ব্যবহার করে সারণির সারির মাধ্যমে যান:

SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);

এবং সংরক্ষিত চেকসামের সাথে সংরক্ষিত মানগুলির তুলনা করুন।

0
যোগ সম্পাদিত
মতামত: 8
তারা তাদের সারি উপর একটি সর্বশেষ সংশোধিত টাইমস্ট্যাম্প করা হবে না, তারা কি?
যোগ লেখক zmbq, উৎস

8 উত্তর

কেন আপনি ট্রিগার ব্যবহার করতে চান না? আপনি সঠিকভাবে তাদের ব্যবহার করলে তারা একটি ভাল জিনিস। যদি আপনি তাদের থেকে যথাযথভাবে অখণ্ডতা প্রয়োগ করার উপায় হিসাবে তাদের ব্যবহার করেন যে যখন তারা ভাল থেকে খারাপ যান। কিন্তু যদি আপনি তাদের নজরদারির জন্য ব্যবহার করেন, তবে তারা আসলে নিঃশব্দ গণ্য হয় না।

0
যোগ

বন্য অনুভূতি এখানে: আপনি তৃতীয় পক্ষের টেবিল সংশোধন করতে না চান, আপনি একটি দৃশ্য তৈরি করতে পারেন এবং তারপর যে ভিউ একটি ট্রিগার করা?

0
যোগ

একটি ডি.টি.এস. চাকরী (বা একটি চাকরি যা একটি উইন্ডো পরিষেবা দ্বারা শুরু হয়) একটি নির্দিষ্ট ব্যবধানে চালায়। এটি চালানো প্রতিটি সময়, সিস্টেমটি INFORMATION_SCHEMA টেবিল, এবং ডেটা সংগ্রহস্থল এই তথ্য রেকর্ড। পূর্ববর্তী সময় ফিরে ডেটার সঙ্গে টেবিলের গঠন সম্পর্কিত তথ্য তুলনা করুন যদি এটি ভিন্ন হয় তবে আপনি জানেন যে কাঠামো পরিবর্তিত হয়েছে।

উদাহরণ ABC টেবিলের সমস্ত কলাম সম্পর্কে তথ্য ফেরত পেতে (যেমন আপনি চাইলে ** নির্বাচন করুন ** ব্যবহার করার পরিবর্তে আপনি চাইলে INFORMATION_SCHEMA সারণি থেকে কলামগুলি তালিকাভুক্ত করুন)।

select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'ABC'

আপনি "টেবিলের পরিবর্তনগুলি" কীভাবে নির্ধারণ করেন তা নির্ভর করে আপনি বিভিন্ন কলাম এবং INFORMATION_SCHEMA দর্শনগুলি মনিটর করবেন।

0
যোগ
প্রশ্ন টেবিলের তথ্য এবং information_schema এর পরিবর্তনের মধ্যে রয়েছে টেবিলের স্কিমা (কলামের সংজ্ঞা)।
যোগ লেখক too, উৎস

ডাটাবেসের মধ্যে কতগুলি পরিবর্তন প্রয়োজন এবং কিভাবে বড় (সারির আকারের ক্ষেত্রে) টেবিলের জন্য আপনার প্রয়োজন হয়? আপনি যদি CHECKSUM_AGG (BINARY_CHECKSUM (*)) পদ্ধতিটি ব্যবহার করেন তবে এটি নির্দিষ্ট টেবিলের প্রতিটি সারি স্ক্যান করবে। NOLOCK ইঙ্গিত সাহায্য করে, কিন্তু একটি বড় ডেটাবেসে, আপনি এখনও প্রতি সারিতে আঘাত করছেন। আপনি প্রতিটি সারির জন্য চেকসাম সঞ্চয় করতে হবে যাতে আপনি বলে যে কেউ পরিবর্তিত হয়েছে।

আপনি একটি ভিন্ন কোণ থেকে এ যাওয়া বিবেচনা করা হয়েছে? যদি আপনি ট্রিগার যোগ করতে স্কিমা পরিবর্তন করতে না চান, (যা একটি অর্থে তোলে, এটি আপনার ডাটাবেস নয়), আপনি ডাটাবেস তৈরি করে যে আবেদন বিক্রেতা সঙ্গে কাজ বিবেচনা করা আছে?

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

হার্ড বৈশিষ্ট্য এই বৈশিষ্ট্যটি বাস্তবায়ন করার জন্য অ্যাপ্লিকেশন বিক্রেতার বিশ্বাসযোগ্য হবে। যেহেতু এইগুলি ট্রিগারগুলির মাধ্যমে এসকিউএল এর মাধ্যমে সম্পূর্ণরূপে পরিচালিত হতে পারে, আপনি ট্রিগারগুলির লেখার এবং পরীক্ষা করে তাদের জন্য প্রচুর কাজ করতে পারেন এবং তারপর অ্যাপ্লিকেশন বিক্রেতার কোডটি আনতে পারেন। বিক্রেতার দ্বারা ট্রিগারগুলি সমর্থন করে, এটি এমন পরিস্থিতিটি প্রতিরোধ করে যেখানে আপনার ট্রিগারটি যোগ করা হয় অবিলম্বে বিক্রেতার সরবরাহকৃত ট্রিগারের পরিবর্তে পরিবর্তিত হয়।

0
যোগ

CHECKSUM কমান্ডটি দেখুন:

SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*)) FROM sample_table WITH (NOLOCK);

যে টেবিলের বিষয়বস্তু পরিবর্তিত না হওয়া পর্যন্ত এটি যতবার চলবে ততবার এটি একই সংখ্যাটি ফেরত দেবে। আরো তথ্যের জন্য এখানে আমার পোস্ট দেখুন:

CHECKSUM

Here's how I used it to rebuild cache dependencies when tables changed:
ASP.NET 1.1 database cache dependency (without triggers)

0
যোগ
চেকসামরা শেষ পর্যন্ত ব্যর্থ হতে পারে। আপনার সিস্টেম যদি দুটি ভিন্ন সেটের ডাটা গ্রহণ করে তবে একই চেকসামের ফলে আপনার জরিমানা হতে পারে। এই কারণে, আমাদের অধিকাংশ সিস্টেমে চেকসাম থেকে দূরে সরে যেতে হয়েছিল ...
যোগ লেখক LPains, উৎস

দুর্ভাগ্যবশত, আমি মনে করি না SQL2000 এ এটি করার একটি পরিষ্কার উপায় আছে। আপনি যদি SQL সার্ভার 2005 (এবং পরে) আপনার প্রয়োজনীয়তা সংকুচিত, তাহলে আপনি ব্যবসা হয়। আপনি SQLDependency শ্রেণীতে System.Data.SqlClient ব্যবহার করতে পারেন। SQL সার্ভারে বিজ্ঞাপনের বিজ্ঞপ্তিগুলি দেখুন (ADO.NET)

0
যোগ

শেষ commit তারিখ পরীক্ষা করুন প্রতিটি ডেটাবেস যখন প্রতিটি কমিটি করা হয় একটি ইতিহাস আছে। আমি এটি ACID সম্মতি একটি মান বিশ্বাস করি।

0
যোগ

Unfortunately CHECKSUM does not work always properly to detect changes. It is only a primitive checksum and no CRC calculation. Therefore you can't use it to detect all changes, e. g. symmetrical changes result in the same CHECKSUM!

ই। জি। <�কোড> CHECKSUM_AGG (BINARY_CHECKSUM (*)) এর সাথে সমাধান সবসময় বিভিন্ন সামগ্রী সহ 3 টি টেবিলের জন্য 0 বিতরণ করে!


SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*)) FROM 
(
  SELECT 1 as numA, 1 as numB
  UNION ALL
  SELECT 1 as numA, 1 as numB
)  q
-- delivers 0!


SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*)) FROM ( SELECT 1 as numA, 2 as numB UNION ALL SELECT 1 as numA, 2 as numB ) q -- delivers 0!


SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*)) FROM ( SELECT 0 as numA, 0 as numB UNION ALL SELECT 0 as numA, 0 as numB ) q -- delivers 0!
0
যোগ
যে আসলে একটি উত্তর না, এটি একটি "আপনার পরামর্শ কাজ করে না"
যোগ লেখক kristianp, উৎস
এটি BINARY_CHECKSUM এর আগে DISINCT কীওয়ার্ড ব্যবহার করে ডুপ্লিকেটেড ডেটার জন্য সংশোধিত হতে পারে। এখানে কিছু অপ্রয়োজনীয় দুর্ঘটনা আছে যা এখানে নিয়ে আলোচনা করা হয়নি কিন্তু একেবারে সাধারণ নয় পরিস্থিতিতে।
যোগ লেখক pblack, উৎস