একটি এসকিউএল সার্ভার ডাটাবেস এখনও ব্যবহৃত হচ্ছে কিনা আমি কীভাবে বলতে পারি?


33

আমরা একটি এসকিউএল সার্ভার উদাহরণটি বাতিল করতে চাইছি যেখানে এর মধ্যে বেশ কয়েকটি ডাটাবেস রয়েছে।

তারা কীভাবে এখনও ব্যবহারকারী বা কোনও ওয়েব অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হচ্ছে তা আমি কীভাবে বলতে পারি?

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

আপনার যদি বিকল্প পদ্ধতি থাকে তবে এটি সহায়তা করবে।


1
নীচে প্রচুর আলোচনা কিন্তু এই ব্লগ পোস্টটি দেখুন
অ্যারন বারট্র্যান্ড

উত্তর:


29

আপনাকে ক্যাচ থেকে মুছে ফেলা এবং আপনি মিস করেছেন এমন আইটেমগুলির সাথে, বা অবিচ্ছিন্ন ব্যবহারের উপাত্তের জন্য উদ্বিগ্ন হতে হবে।

হাতছাড়া করে ডাটাবেসগুলি ফেলে দেওয়ার পরিবর্তে অ্যাক্সেস প্রতিরোধের জন্য সেগুলিকে অফलाइन রাখুন বা অ্যাক্সেস সীমাবদ্ধ করতে RESTRICTED_USER মোডে। এটি করার মাধ্যমে আপনি এগুলি তাদের এক মাস বা দুই মাস ধরে রেখে যেতে পারেন এবং পরীক্ষা করতে এবং মাঝে মধ্যে ব্যবহার আছে কিনা তা দেখতে পারেন।

আপনি সেই ডাটাবেসে কোনও সার্ভার সাইড প্রোফাইলার ট্রেস ফিল্টারিং ব্যবহার করতে পারেন।


24
ডিবিএ হওয়ার নিয়ম # 1: আপনার কোনও দরকার নেই তাড়াতাড়ি পিছিয়ে আসতে পারবেন না এমন কোনও পরিবর্তন কখনই করবেন না।
গাইস

14

আমি অতীতে এই পদ্ধতিগুলি ব্যবহার করেছি:

  1. অফলাইনে / বিচ্ছিন্ন ডাটাবেস নিন
  2. DENY ব্যবহারকারী / লগইন অ্যাক্সেস
  3. প্রোফাইলার ট্রেস

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

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


আমি সে সম্পর্কে ভেবেছিলাম, ডাটাবেসের ব্যবহারের জন্য আমি যে পরিমাণ সময় নিরীক্ষণ করি তা যথেষ্ট ছিল কিনা। আপনি কি কেবল এসকিউএল সার্ভারের প্রকৃতি গ্রহণ করেন এবং সেই রায়টি কল করেন?
জাসৌনি

হ্যাঁ, এক পর্যায়ে আপনি সবাইকে প্লাগটি টানতে সম্মত হন এবং এটি বোঝার জন্য যদি কিছু দুর্বৃত্ত প্রক্রিয়া ব্যর্থ হয় তবে আপনাকে জিনিসগুলি দ্রুত ফিরিয়ে আনতে হবে। যতক্ষণ না তারা আউটেজের সাথে ঠিক আছে, এবং আপনি অনলাইনে জিনিসগুলি দ্রুত ফিরিয়ে আনেন, আপনার ভাল হওয়া উচিত you তবে সবার পক্ষে একমত হওয়া সহজ নয়!
এসকিউএলরকস্টার

13

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

ওএস ফাইল স্তরে কোনও পাঠ্য বা লেখার ঘটনা ঘটছে কি না তা দেখতে আমি সাধারণত ভার্চুয়াল ফাইলের পরিসংখ্যানের তথ্য যাচাই করতাম। এমনকি ডাটাবেস সক্রিয় না থাকলেও আপনি লগ ব্যাকআপ, পুরো ব্যাকআপ ইত্যাদি গ্রহণ করলে একটি ছোট পড়া / লেখার বিষয়টি দেখতে পাবেন ... তবে এটি আপনাকে সেই ডাটাবেজে পড়া / লেখার ক্রিয়াকলাপের ধারণা দেবে।

যে কোনও ডাটাবেস ড্রপ করার আগে, আমি নিশ্চিত করব যে আপনার পৃথক স্থানে কমপক্ষে 2 বা 3 পঠনযোগ্য ব্যাকআপ রয়েছে (তাদের পরীক্ষা করুন)। আপনার কখন প্রয়োজন হবে তা আপনি কখনই জানেন না।


8

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

এই কথাটি বলার পরেও, এখনও সম্মত হন যে এই কোয়েরিতে যদি নিশ্চিত হয়ে যায় যে কোনও ডিবি বাদ পড়তে পারে তবে অবশ্যই কিছুক্ষণের জন্য অফलाइन / ব্যবহারকারীর অ্যাক্সেসকে বিচ্ছিন্ন করুন বা অস্বীকার করুন, এরপরে প্রকৃতপক্ষে ড্রপ করার আগে জিজ্ঞাসা করার কোনও যথাযথ অধ্যবসায়!

select [name] from sys.databases 
where database_id > 4
AND [name] NOT IN 
(select DB_NAME(database_id) 
from sys.dm_db_index_usage_stats
where coalesce(last_user_seek, last_user_scan, last_user_lookup,'1/1/1970') > 
(select login_time from sys.sysprocesses where spid = 1))

এটি বেশ ভাল যদি এটি কার্যকরভাবে কাজ করে। আমি জিজ্ঞাসা করতে পারি যে আপনি কেন কোলেস নিচ্ছেন এবং লগইন_টাইমের সাথে তুলনা করছেন? এবং কেন আপনি সর্বশেষ_ ব্যবহারকারী_আপডেট অন্তর্ভুক্ত করেন নি? এটি কি কোনও চতুর প্রচেষ্টা যা কোনও ডাটাবেস INSERTS পাচ্ছে কিন্তু কেউ কখনও এটি জিজ্ঞাসা করছে না? অথবা এই ডিএমভির পক্ষে সমস্ত নূতন টাইমস্ট্যাম্প অন্তর্ভুক্ত করা সম্ভব?
জেসন

2

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

যা করা হয়েছিল তার সংমিশ্রণে:
* প্রতিটি বিকাশকারীকে জিজ্ঞাসা করুন যে তারা কিছু ডেটাবেস বা অন্য ব্যবহার করছেন (এই ইমেলগুলি মাসিক বা যখনই ব্যাকআপগুলি খুব বেশি সময় নিচ্ছিল) out
* অফলাইনে ডাটাবেস নিন এবং দেখুন কে অভিযোগ করে।
* কে অভিযোগ করে তা দেখতে সার্ভারটির নাম পরিবর্তন করুন।

যেহেতু মূল কেশিক বস কেবল "সম্পূর্ণ এবং সম্পূর্ণ" ডকুমেন্টেশনের অনুমতি দিতে ইচ্ছুক ছিলেন, তাই একটি উইকি স্পষ্টভাবে নিষিদ্ধ ছিল, এবং কর্মীদের হ্রাস ডকুমেন্টেশনে নাটকীয়ভাবে হ্রাস পাবে যা মানদণ্ডের সাথে মিলিত হয়েছিল।

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

আমাদের কাছে একটি বড় আর্থিক ক্লায়েন্ট ছিল যা ২০০৯ সালের শেষের দিকে এসকিউএল সার্ভার 2000 ব্যবহার করে চলেছিল, সুতরাং ক্লায়েন্টটি এসকিউএল সার্ভার 2005 এ সরিয়ে না আসা পর্যন্ত আমাদের একটি এসকিউএল সার্ভার 2000 ইনস্ট্যান্স চালিয়ে যেতে হয়েছিল।


2

আরও দুটি বিকল্প হ'ল:

  1. ডিবিতে ট্রিগার তৈরি করুন যা আপনাকে যে কোনও ক্রিয়াকলাপের (বা টেবিলগুলিতে সঞ্চয় করে) অবহিত করবে।
  2. ডিবিগুলিতে নিরীক্ষণ সক্ষম করুন।

    • আপনার ডিবি সংস্করণে নির্ভর করে।

2

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

SELECT
    (CASE WHEN ([database_id] = 32767) THEN 'Resource Database' ELSE DB_NAME (database_id) END) AS 'Database Name',
    COUNT(*) *8/1024 AS [TotalPages in MB],
    SUM(CASE WHEN ([is_modified] = 1) THEN 0 ELSE 1 END) *8/1024 AS [CleanPages in MB],
    SUM(CASE WHEN ([is_modified] = 1) THEN 1 ELSE 0 END) *8/1024 AS [DirtyPages in MB]
FROM sys.dm_os_buffer_descriptors
GROUP BY database_id
ORDER BY DB_NAME(database_id)

অথবা

select value [DBid],attribute, last_execution_time ,text
from
sys.dm_exec_query_stats
cross apply
sys.dm_exec_plan_attributes(plan_handle)
cross apply
sys.dm_exec_sql_text(plan_handle)
where  attribute = 'dbid' 
order by last_execution_time desc

অথবা

select value [DBid],attribute, last_execution_time ,text
from
sys.dm_exec_query_stats
cross apply
sys.dm_exec_plan_attributes(plan_handle)
cross apply
sys.dm_exec_sql_text(plan_handle)
--where dbid=8
where 
      text like '%idAdministrator%' and
      attribute = 'dbid' 
      and value>= 5 -- dbid >=5 for user databases but include resource database which
                     --you can exclude by its numer I don't remember at the moment
order by last_execution_time desc

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