it-swarm.asia

كيف يمكنني معرفة ما إذا كانت قاعدة بيانات SQL Server لا تزال قيد الاستخدام؟

نحن نتطلع إلى إيقاف تشغيل مثيل SQL Server الذي لا يزال يحتوي على قاعدتي بيانات.

كيف يمكنني معرفة ما إذا كانت لا تزال تستخدم من قبل المستخدمين أو تطبيق ويب؟

لقد وجدت موضوع المنتدى الذي يحتوي على استعلام T-SQL يمكنك تشغيله لاسترداد تاريخ الاستعلام الأخير. يبدو أنها تعمل ولكن أريد أن أعرف ما إذا كانت هذه المعلومات صالحة بما يكفي لإسقاط قواعد البيانات. فعلا؟

إذا كان لديك طرق بديلة من شأنها أن تساعد أيضًا.

34
jsauni

يجب أن تهتم بالعناصر التي تمت إزالتها من ذاكرة التخزين المؤقت والتي فاتتك ، أو لقواعد البيانات ذات الاستخدام المتكرر.

بدلاً من استبعاد قواعد البيانات ، ضعها إما في وضع عدم الاتصال لمنع الوصول إليها دون إسقاطها أو في وضع RESTRICTED_USER لتقييد الوصول. للقيام بذلك ، يمكنك تركهم في هذه الحالة لمدة شهر أو شهرين للتحقق ومعرفة ما إذا كان هناك استخدام عرضي.

يمكنك أيضًا البحث عن استخدام تصفية تتبع المحلل الجانبي من جانب الخادم في قاعدة البيانات هذه.

30
NicCain

هذه هي الطرق التي استخدمتها في الماضي:

  1. خذ قاعدة البيانات دون اتصال/فصل
  2. وصول المستخدم/تسجيل الدخول DENY
  3. تتبع ملف التعريف

المشكلة هي: إلى متى تنتظر قبل أن تتأكد من عدم وصول أي شخص إلى البيانات؟ بالنسبة للبيانات المالية ، لديك بعض العناصر التي يتم تشغيلها يوميًا ، أسبوعيًا ، شهريًا ، ربع سنوي ، نصف سنوي ، وسنوي. لكن هل السنة طويلة بما يكفي؟ لقد رأيت أيضًا طلبات الاحتفاظ بالبيانات متاحة لمدة 7 سنوات على الأقل ، وفي حالة واحدة قيل لي أن البيانات في نظام واحد يجب أن تبقى إلى الأبد ، على الرغم من عدم استخدام أي شخص لها.

أفضل نصيحة هي: أيًا كان ما تفعله لإيقاف الوصول ، تأكد من أنه يمكنك إعادة تشغيله على الفور. لقد وجدت أن التفصيل يعمل بشكل أفضل لهذا. أود ببساطة كتابة برنامج إعادة التوجيه وإرشاد فريقي "إذا طلب أي شخص مكانه ، قم بتشغيل هذا البرنامج النصي". أعطانا ذلك أفضل فرصة لإعادة الأمور بأسرع ما يمكن.

14
SQLRockstar

أتفق مع نيك بنصيحته. إذا كنت بحاجة إلى التأكد ، فسيتعين عليك الذهاب مع Profiler (التتبع الجانبي للخدمة) لأن بعض استعلامات SQL لن يتم تخزينها مؤقتًا أو لأي سبب قد يتم حذف ذاكرة التخزين المؤقت للإجراء.

عادة ما أتحقق من معلومات إحصائيات الملف الظاهري أيضًا لمعرفة ما إذا كانت هناك أي قراءات أو كتابة تحدث على مستوى ملف نظام التشغيل. حتى إذا لم تكن قاعدة البيانات نشطة ، فستظل ترى عمليات قراءة/كتابة صغيرة إذا كنت تأخذ نسخًا احتياطية للسجل ، أو نسخًا احتياطية كاملة ، وما إلى ذلك ... ولكن هذا سيعطيك أيضًا فكرة عن نشاط القراءة/الكتابة على قاعدة البيانات هذه.

قبل إسقاط أي قاعدة بيانات ، أتأكد من أن لديك ما لا يقل عن 2 أو 3 نسخ احتياطية قابلة للقراءة (اختبارها) في مواقع منفصلة. أنت لا تعرف أبدًا متى تحتاج إليها.

13
Sankar Reddy

يعرض الاستعلام التالي قواعد البيانات التي لم يكن لها أي استخدام منذ إعادة التشغيل الأخيرة ، دون الاعتماد على خطط الاستعلام المحتفظ بها في ذاكرة التخزين المؤقت ، حيث إنها تُظهر المستخدم IO مقابل الفهارس (والأكوام). نوعًا ما على غرار استخدام إحصائيات الملف الظاهري ، ولكن DMV المستخدم هنا يستثني IO نشاط من النسخ الاحتياطية. لا حاجة للحفاظ على تتبع المحلل قيد التشغيل ، ولا توجد عوامل تشغيل أو تدقيق مطلوب. بالطبع ، إذا تقوم بإعادة تشغيل خادم SQL بشكل متكرر (أو تقوم بإرفاق/إيقاف تشغيل قواعد البيانات في كثير من الأحيان) قد لا تكون هذه هي الطريقة للذهاب :-)

بعد قولي هذا ، ما زلت توافق على أنه حتى إذا بدا أن هذا الاستعلام يؤكد أنه يمكن إسقاط قاعدة بيانات ، بالتأكيد قم بفصل أو منع وصول المستخدم لبعض الوقت ، بالإضافة إلى أي العناية الواجبة للسؤال من قبل يسقط فعلا!

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))
8
FloorDivision

لقد عملت في مكان يحتوي على عدد كبير من قواعد البيانات اليتيمة وشبه اليتيمة. كان من الصعب معرفة ما إذا كانوا يتامى حقًا لأن العديد من المهام كانت موسمية أو سنوية - بحيث يتم تشغيل موقع الويب لمدة 3-4 أشهر في السنة فقط (على سبيل المثال ، يجب تقديم نماذج W2 إلكترونيًا 1/31 ، لذا فإن معالجة موقع الويب هذه ركض فقط من منتصف يناير إلى نهاية أبريل).

ما تم القيام به كان مزيجًا من:
* اسأل كل مطور عما إذا كانوا يستخدمون بعض قواعد البيانات أو غيرها (ستنشر رسائل البريد الإلكتروني هذه شهريًا أو كلما كانت النسخ الاحتياطية تستغرق وقتًا طويلاً جدًا).
* جعل قاعدة البيانات دون اتصال ومعرفة من يشكو.
* إعادة تسمية الخادم لمعرفة من يشكو.

نظرًا لأن الرئيس ذو الشعر المدبب كان على استعداد فقط للسماح بوثائق "كاملة وكاملة" ، فقد تم حظر ويكي بشكل صريح ، وأدت تخفيضات الموظفين إلى انخفاض كبير في الوثائق التي تلبي المعيار.

إذا كان الأمر متروكًا لي ، فستكون هناك صفحة wiki لكل خادم تحتوي على أسماء جهات اتصال لكل قاعدة بيانات (وربما وصفًا موجزًا ​​عن الغرض من قاعدة البيانات). أي قاعدة بيانات غير موثقة على ويكي ستكون لعبة عادلة للحذف.

كان لدينا عميل مالي كبير كان لا يزال يستخدم SQL Server 2000 في وقت متأخر من عام 2009 ، لذلك كان علينا إبقاء مثيل SQL Server 2000 قيد التشغيل حتى تم نقل هذا العميل أخيرًا إلى SQL Server 2005.

3
Tangurena

يعرض الحل التالي صفحات مؤقتة ونظيفة وقذرة بالميغابايت لقواعد بيانات معينة تحت مثلك (موجود على الإنترنت ومعدل قليلاً):

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
SQL Server Frant

بديلان آخران هما:

  1. قم بإنشاء مشغلات على قاعدة البيانات التي ستعلمك (أو تخزنها على الجداول) بأي نشاط.
  2. تمكين التدقيق في قواعد البيانات.

    • يعتمد على إصدار قاعدة البيانات الخاصة بك.
2
StanleyJohns