আমি কীভাবে ডাটাবেস নির্ভরতা ট্র্যাক করতে পারি?


37

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

আমি এমন জায়গাগুলি নিয়ে কাজ করেছি যেখানে মোটামুটি নৃশংস বিকল্প নেওয়া হয়েছে:

  • প্রথমে ছাড়ুন, পরে প্রশ্ন জিজ্ঞাসা করুন (কোনও ডেটা গুদাম বিল্ডটিকে হত্যা করতে পারে যদি এটি কোনও টেবিলটি বের করার চেষ্টা করে যা আর বিদ্যমান না থাকে)
  • প্রথমে অনুমতিগুলি সরান, এবং ত্রুটিগুলি প্রতিবেদন করার জন্য অপেক্ষা করুন (ব্যর্থতা সঠিকভাবে পরিচালনা না করা হলে নীরব বাগ তৈরি করতে পারে)

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

উত্তর:


14

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


7
  1. Sys.sql_modules.de সংজ্ঞা সহ ব্যবহারের জন্য অনুসন্ধান কোড: এটি রেফারেন্স হয়? তারপর ...
  2. অনুমতি চেক করুন: ক্লায়েন্ট কোড এটি কল করতে পারে? তারপর ...
  3. প্রোফাইলার

এভাবে:

  • কোনও রেফারেন্স এবং অনুমতিবিহীন কোনও টেবিলের জন্য, এটি ব্যবহার করা হচ্ছে না।
  • কোনও রেফারেন্স এবং কিছু অনুমতি ছাড়াই ব্যবহার দেখতে প্রোফাইলার চালান
  • কোনও অনুমতি এবং রেফারেন্স ছাড়াই ব্যবহারের লগিং যোগ করুন

আমি এর আগে যা করেছি তা হ'ল টেবিলটিকে একটি টেবিলটি মাস্কিং করে ভিউটিকে খারাপভাবে সম্পাদন করা: (ক্রস নিজেই যোগদান করুন, স্বতন্ত্র)। আপনি আসলে এটি সরাবেন না তবে আপনি ক্লায়েন্টের সময়সীমা বা অভিযোগ উত্পন্ন করেন ...


6

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

ডেটাবেস হিট হতে পারে এমন সমস্ত কোড যখন ডাটাবেজে নয় এমন এলোমেলো ক্লায়েন্টদের ডাটাবেসে জিজ্ঞাসা করা হয় তখন নির্ভরতাগুলি ট্র্যাক করা খুব কঠিন।

সম্পাদনা: একটি টেবিলের SELECT ট্রিগার থাকতে পারে না এমন পয়েন্টটি সম্বোধন করার জন্য, এখানে অন্য বিকল্প যা আপনার টেবিলগুলিতে সূচী রয়েছে (ধরে রেখেছেন কেবলমাত্র ২০০৮ সালে পরীক্ষা করা হয়েছে) ধরে নেওয়া উচিত।

SELECT          
    last_user_seek,
    last_user_scan,
    last_user_lookup,
    last_user_update
FROM
    sys.dm_db_index_usage_stats AS usage_stats
INNER JOIN
sys.tables AS tables ON tables.object_id = usage_stats.object_id
WHERE
    database_id = DB_ID() AND
    tables.name = 'mytable' 

তবে নোট করুন যে সার্ভারটি পুনরায় চালু করা, বিচ্ছিন্ন হয়ে যাওয়ার পরে ব্যবহারের পরিসংখ্যান সারণী সাফ হয়ে যায় তাই ডেটা সংগ্রহ করার জন্য আপনাকে একটি কাজ সেট আপ করতে হবে। আমি জানি একটি হ্যাক বিট।


4

আমি অতীতে যেভাবে ব্যবহার করেছি তা হ'ল প্রার্থীদের তালিকা সরিয়ে টেবিলের তালিকা স্থাপন এবং তার নাম পরিবর্তন করে ব্যর্থতা সন্ধান করা।

আমি কীভাবে তালিকাটি স্থাপন করেছি:

  1. বর্তমান সঞ্চিত পদ্ধতি, ট্রিগার এবং ফাংশনগুলিতে কোন সারণীগুলি ব্যবহার হচ্ছে না তা দেখুন

  2. খালি সারণী (শূন্য রেকর্ড);

  3. অ রেফারেন্সেড টেবিল (যে সারণীগুলির কোনও সম্পর্ক নেই);

  4. ডিবি সার্ভার চালু হওয়ার পরে (ডিএমভি) কোন টেবিলগুলি ব্যবহার করা হয়নি তা দেখুন

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

সুতরাং, সংক্ষেপে, পূর্বের ছেলেরা ঠিক আছে, সিলভার বুলেট নেই।


3

আমি আমার কোম্পানিতে যে নীতিটি প্রয়োগ করছি তা হ'ল এসকিউএল সার্ভারের স্পর্শ করা সমস্ত কিছু উত্স নিয়ন্ত্রণের অধীনে, একটি কেন্দ্রীয় অবস্থানে রাখা।

  • asp.net প্রকল্প
  • এসএসআরএস প্রকল্পসমূহ
  • এসএসআইএস প্রকল্পসমূহ
  • এমনকি আমি সমস্ত ডাটাবেস অবজেক্টগুলিকে এক ধরণের সংগ্রহস্থলের মধ্যে আউট স্ক্রিপ্ট করি।

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

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


3

জড়িত ট্র্যাকিং নির্ভরতা ব্যবহার করার জন্য বিভিন্ন ধরণের সরঞ্জাম এবং কৌশল রয়েছে:

আমার জানা সরঞ্জামগুলি:

  • এসকিউএল সার্ভার নির্ভরতা ভিউয়ার (তবে এসপি ব্যবহার করে টেবিল তৈরি হওয়ার আগে টেবিল তৈরি করা থাকলে সমস্যা থাকতে পারে)
  • রেডগেট এসকিউএল নির্ভরতা ট্র্যাকার (@ এরিক হামফ্রির উত্তরের মাধ্যমে)
  • পুনরায় ভাগ করা (। নেট সরঞ্জাম যা কলিং পাথগুলি দেখার জন্য ব্যবহৃত হতে পারে, আমি মনে করি এটি কী এসকিউএল কলগুলি ব্যবহৃত হয় তা ট্র্যাক করতে ব্যবহার করা যেতে পারে)

পদ্ধতি

  • কোড এসকিউএল অবজেক্টের ব্যবহারের জন্য অনুসন্ধান করে (উপরের কয়েকটি সরঞ্জামের প্রতিলিপি দেয়)
  • ব্যবহারের পরিসংখ্যানগুলি দেখুন (যেমন: কখন একটি এসকিউএল অবজেক্টটি সর্বশেষ বলা হয়েছিল), আমি নীচের এসকিউএল ব্যবহার করি:

    SELECT 
        last_execution_time,   
        (SELECT TOP 1 
            SUBSTRING(s2.text,statement_start_offset / 2+1 , 
                ((CASE WHEN statement_end_offset = -1 THEN 
                    (LEN(CONVERT(nvarchar(max),s2.text)) * 2) 
                ELSE statement_end_offset END) - statement_start_offset) / 2+1)
        )  AS sql_statement,
        execution_count
    FROM sys.dm_exec_query_stats AS s1 
    CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2  
    WHERE 
        s2.text like '%[OBJECT NAME]%' 
        and last_execution_time > [DATE YOU CARE ABOUT]
    ORDER BY last_execution_time desc

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

প্রযুক্তি

  • শেষ ব্যবহারের জন্য অনুসন্ধান করুন (উপরের ব্যবহারের পরিসংখ্যান দেখুন)
  • এটি কোথায় ব্যবহৃত হয়েছে তা অনুসন্ধান করুন (সরঞ্জামগুলি দেখুন)
  • বিকাশকারীদের সাথে কোড ব্যবহারের পর্যালোচনা করুন (@ এমডিডেনি দ্বারা)
  • অবজেক্টটির নাম পরিবর্তন করুন (যেমন: _toBeDropped সহ পোস্ট / উপসর্গ) এবং ত্রুটিগুলি দেখুন
  • অনুমতি পরিবর্তন করুন এবং ত্রুটিগুলি দেখুন
  • বস্তু ফেলে দিন এবং প্রার্থনা করুন

2

বেশ কয়েক বছর আগে, আমি অনুরূপ স্টাফগুলি যাচাই করার জন্য একটি সরঞ্জাম তৈরি করার চেষ্টা করেছি। টিএল; ডিআর উত্তরটি হ'ল আমি উপলভ্য সংস্থানগুলির সাথে তখনকার সময়ে এটি করা সম্ভব হয়নি।

এই কলামটি কোথায় ব্যবহৃত হয়?

এই প্রশ্নটি আরও জটিল select *হয়ে ওঠে যখন আপনি বুঝতে পারবেন যে কলামটিতে বাস করা টেবিল থেকে বেশ কয়েকটি প্রশ্ন, ভিউ এবং সঞ্চিত পদ্ধতি ব্যবহার করা হয়েছে Then তারপরে আপনাকে সেই প্রোগ্রামগুলি ব্যবহার করা উচিত যা সেই ফলাফলগুলি ব্যবহার করে - সুতরাং আপনার কিছু স্ক্যানার / সূচক / পার্সার প্রয়োজন সেই কলামের প্রতিটি রেফারেন্স সন্ধান করার চেষ্টা করার জন্য সি #, ডেলফি, জাভা, ভিবি, এএসপি (ক্লাসিক) এবং এমন সোর্স কোড পড়তে সক্ষম। তারপরে আপনাকে সেই কোডগুলি আরও কিছু বলা হচ্ছে না কিনা তা চেষ্টা করে সনাক্ত করার জন্য আপনাকে সেই প্রোগ্রামগুলি বিশ্লেষণ করতে হবে।


2

এসকিউএল রেফারেন্সগুলি পরিচালনা করবে না, তবে আপনি রেডগেটের এসকিউএল নির্ভরতা ট্র্যাকারটি পরীক্ষা করে দেখতে চাইতে পারেন । এটি একটি দুর্দান্ত চাক্ষুষ সরঞ্জাম।


2

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

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


0

নিম্নলিখিত টিএসকিউএল sys.dm_sql_referencescing_entities বা sys.sql_expression_d dependferences ব্যবহার করা যেতে পারে

বিকল্পভাবে যেমন এসকিউএল নেগোটিএটার প্রো, রেডগেট ইত্যাদি সরঞ্জামগুলি আপনার জন্য জিইউআই ব্যবহার করে এটি দৃশ্যত তৈরি করতে পারে

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