2009-06-25 10 views
5

मेरे पास एक SQL Server 2005 डेटाबेस है जिसे हटा दिया गया है, और मुझे यह पता लगाने की आवश्यकता है कि इसे किसने हटा दिया है। क्या इस उपयोगकर्ता नाम को प्राप्त करने का कोई तरीका है?निर्धारित करें कि उपयोगकर्ता ने SQL सर्वर डेटाबेस को हटा दिया है?

धन्यवाद, MagicAndi।

उत्तर

10

यदि हटाए जाने के बाद से बहुत कम या कोई गतिविधि नहीं हुई है, तो आउट-ऑफ-द-बॉक्स ट्रेस सहायता का हो सकता है। चलाने की कोशिश करें:

DECLARE @path varchar(256) 

SELECT @path = path 
FROM sys.traces 
where id = 1 

SELECT * 
FROM fn_trace_gettable(@path, 1) 

[आउट-ऑफ-द-बॉक्स का पता लगाने के अलावा, वहाँ भी कम प्रसिद्ध 'ब्लैक बॉक्स' का पता लगाने, जो रुक-रुक कर सर्वर दुर्घटनाओं के निदान के लिए उपयोगी है। यह पोस्ट, SQL Server’s Built-in Traces, आपको यह कॉन्फ़िगर करने का तरीका दिखाता है।]

+1

+1 - धन्यवाद, यह बहुत उपयोगी है। मैंने बस इसे चलाया और यह मुझे लगभग 2 दिन के बैकअप देता है। क्या अधिक पाने का कोई तरीका है? कौन से विकल्प उन ट्रेस सेटिंग्स को नियंत्रित करने का ख्याल रखते हैं? –

+0

@ मिच: यह एक शानदार टिप है। हालांकि, यह एक बहुत छोटा निशान है। क्या कोई तरीका है कि मैं इसे एक बड़ा निशान बनाने के लिए सेट कर सकता हूं? –

+0

@ टापोरी: मैंने यहां SQL सर्वर के अंतर्निहित निशानों के बारे में ब्लॉग किया है: http://mitch-wheat.blogspot.com/2009/01/sql-servers-built-in-traces.html: आकार बदलने के लिए संभव है ब्लैक बॉक्स ट्रेस ... –

3

जानकारी पुनर्प्राप्त करने का सबसे अच्छा तरीका नवीनतम बैकअप को पुनर्स्थापित करना है।

अब चर्चा करें कि भविष्य में ऐसी समस्याओं से कैसे बचें।

पहले सुनिश्चित करें कि आपकी बैकअप प्रक्रिया सही ढंग से और अक्सर चल रही है। लेनदेन लॉग baclup evey 15 mintues या आधा घंटा करें यदि यह एक higly लेनदेन डेटाबेस है। तब आप जितना अधिक खो देते हैं वह काम का आधे घंटे का ख्याल है। डेटाबेस को बहाल करने का अभ्यास करें जब तक कि आप इसे आसानी से तनाव में नहीं कर सकते।

SQL सर्वर 2008 में आप डीडीएल ट्रिगर जोड़ सकते हैं (सुनिश्चित नहीं है कि आप 2005 में ऐसा कर सकते हैं) जो आपको लॉग इन करने की अनुमति देता है कि संरचना में परिवर्तन किसने किया था। इसे देखने के लिए आपके समय के लायक हो सकता है।

दो से अधिक लोगों को आपके उत्पादन डेटाबेस तक पहुंचने की अनुमति न दें - एक डीबीए और बैकअप व्यक्ति जब डीबीए बाहर हो। इन लोगों को डेटाबेस संरचना और कोड में सभी परिवर्तनों को लोड करना चाहिए और सभी परिवर्तनों को क्यूए पर पहले लिखित, कोड की समीक्षा और परीक्षण किया जाना चाहिए। कोई अनुसूचित नहीं, "अपने पैंट की सीट द्वारा चलाया गया" कोड कभी भी प्रोड पर चलाया जाना चाहिए।

+2

एचएलजीईएम - अच्छा जवाब, शर्म की बात यह है कि मैंने पूछा सवाल नहीं था। -1 – MagicAndi

+0

+1, यह इस प्रश्न का उत्तर है कि आपको इस वर्तमान प्रश्न से पहले पूछने की आवश्यकता है: "मैं अपने डेटाबेस को हटाने वाले किसी व्यक्ति को कैसे रोकूं और/या सौदा कर सकता हूं" ... –

+0

+1: एक उत्कृष्ट उत्तर मुद्दे आईई के मूल अंतर्निहित कारण की पहचान करने के लिए बाद में सोच रहा है डेटाबेस प्लेटफ़ॉर्म ऑडिटिंग और प्रबंधन प्रक्रियाओं की कमी के कारण असफल रहा। –

4

मैं पहले उन सभी से पूछूंगा जिनके पास एसक्यूएल सर्वर पर व्यवस्थापक पहुंच है, यदि उन्होंने इसे हटा दिया है।

+6

और अगर मुझे तीन से अधिक लोगों से पूछना पड़ा, तो मैं डीबीए से पूछूंगा कि इतने सारे क्यों हैं ... – stephan

3

यहाँ थोड़ा और अधिक सटीक TSQL

SELECT DatabaseID,NTUserName,HostName,LoginName,StartTime 
FROM 
sys.fn_trace_gettable(CONVERT(VARCHAR(150), 
     (SELECT TOP 1 
        f.[value] 
      FROM sys.fn_trace_getinfo(NULL) f 
      WHERE f.property = 2 
     )), DEFAULT) T 
JOIN sys.trace_events TE ON T.EventClass = TE.trace_event_id 
WHERE TE.trace_event_id =47 AND T.DatabaseName = 'delete' 
-- 47 Represents event for deleting objects. 

यह जानते हुए भी या डेटाबेस/ऑब्जेक्ट नाम नहीं जानने के दोनों घटनाओं में इस्तेमाल किया जा सकता है। परिणाम इस तरह दिखेगा:

enter image description here

संबंधित मुद्दे