2013-05-17 5 views
7

में डेटा को डालने या अपडेट किए जाने वाले टेबल को कैसे सूचीबद्ध करें, मेरे पास SQL ​​सर्वर 2008 डेटाबेस हैं, मैं जानना चाहता हूं कि कौन सा टेबल पिछले सप्ताह अपडेट किया गया था यानी टेबल जिसमें नई पंक्तियां हैं, मौजूदा पंक्तियों को अपडेट किया गया है या कौन सी पंक्तियां हटा दी गई हैं ।पिछले सप्ताह

क्या मौजूदा डेटाबेस के लिए ऐसा करने का कोई तरीका है।

+0

ट्रैक डाटा परिवर्तन (SQL सर्वर) एसक्यूएल सर्वर के लिए 2008 ... http: //msdn.microsoft.com/en-us/library/bb933994 % 28v = sql.100% 29.aspx – wcraft

+3

[चेंज डेटा कैप्चर और चेंज ट्रैकिंग की तुलना करना] (http://msdn.microsoft.com/en-us/library/cc280519 (v = sql.100) .aspx)। सीडीसी विषय के लिए –

उत्तर

3

Change Data Capture के साथ प्रयास करें। डीबी पर आपके परिवर्तन का ट्रैक रखने का यह एक अच्छा तरीका है। आपको एक या अधिक डीबी पर सुविधा को सक्षम करना है, फिर एक या अधिक तालिका पर (यह एक टेबल सुविधा है, इसलिए आप इसे आवश्यक प्रत्येक तालिका के लिए करेंगे)।


डेटाबेस पर सीडीसी सक्षम करें।

मान लें कि हम AdventureWorks डेटाबेस के लिए सीडीसी सक्षम करना चाहते हैं। हम निम्नलिखित सपा चलाने यकीन है कि इस सुविधा काम करेंगे पूरी करनी होंगी:

  • सीडीसी:

    USE AdventureWorks 
    GO 
    EXEC sys.sp_cdc_enable_db 
    GO 
    

    परिणामस्वरूप, हम सीडीसी और कई तालिकाओं स्वचालित रूप से जोड़ नामक एक नया स्कीमा मिल जाएगा। capture_columns - यह तालिका कैप्चर किए गए कॉलम की सूची के परिणाम देती है।

  • cdc.change_tables - यह तालिका कैप्चर करने के लिए सक्षम सभी तालिकाओं की सूची देता है।
  • cdc.ddl_history - इस तालिका में डेटा सक्षम करने के बाद से सभी डीडीएल परिवर्तनों का इतिहास शामिल है।
  • cdc.index_columns - इस तालिका में परिवर्तन तालिका से जुड़े इंडेक्स हैं।
  • cdc.lsn_time_mapping - यह तालिका एलएसएन संख्या और समय मानचित्र करती है।

मेज पर सीडीसी सक्षम करें।

वांछित डीबी (ओं) पर सीडीसी सक्षम होने यह अगर वहाँ पर इस सुविधा के साथ टेबल रहे हैं जाँच करने के लिए समय आ गया है के बाद:

USE AdventureWorks 
GO 
SELECT [name], is_tracked_by_cdc 
FROM sys.tables 
GO 

यदि नहीं, तो हम परिवर्तन के साथ HumanResources.Shift तालिका के लिए कब्जा सक्षम कर सकते हैं निम्न प्रक्रिया:

USE AdventureWorks 
GO 
EXEC sys.sp_cdc_enable_table 
@source_schema = N'HumanResources', 
@source_name = N'Shift', 
@role_name  = NULL 
GO 

सुनिश्चित करें कि आप एसक्यूएल एजेंट और चल रहा है, क्योंकि यह एक नौकरी पैदा करेगा (cdc.AdventureWorks_capture शायद) संशोधनों को पकड़ने के लिए हो जाता है। यदि सभी प्रक्रियाओं को सही ढंग से निष्पादित किया जाता है तो हमें सिस्टम टेबल के बीच cdc.HumanResources_Shift_CT नामक एक नई तालिका मिल जाएगी, जिसमें सभी मानव संसाधन शामिल हैं। परिवर्तन परिवर्तन।

नोट: @role_name पैरामीटर से सावधान रहें, यह डेटाबेस इंफोस एक्सेस निर्दिष्ट करता है।

+0

+1। – Devart

2

डिफ़ॉल्ट रूप से इस जानकारी को जानने का कोई तरीका नहीं है जब तक कि आपके पास पहले से ही कुछ ऑडिटिंग सिस्टम इंस्टॉल नहीं है।

केवल यह मानते हुए कि आपका डेटाबेस पूर्ण पुनर्प्राप्ति मोड में है, लेनदेन लॉग पढ़ने और वहां से जानकारी प्राप्त करने का प्रयास करें।

आप SQL सर्वर फ़ंक्शन डीबीसीसी LOG और fn_dblog का उपयोग करके या तृतीय पक्ष टूल जैसे ApexSQL Log का उपयोग करके लेनदेन लॉग पढ़ने का प्रयास कर सकते हैं।

0

इसे आजमाएं। यह डेटाबेस में प्रत्येक तालिका के लिए अंतिम अद्यतन तिथि प्रदान करेगा।

USE database_name 

GO 


SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,* 
FROM sys.dm_db_index_usage_stats 

GO 
अधिक संदर्भ क्लिक के लिए

here

1

दूसरों के द्वारा टिप्पणी की के रूप में, बदलें डाटा कैप्चर और ट्रैकिंग बदलें आदर्श समाधान यदि आप उन्हें लागू किया है किया जाएगा। आप नहीं है, तो यहाँ एक त्वरित तरीका है, जो आप आंशिक रूप से जानकारी दे देंगे:

SELECT OBJECT_NAME(OBJECT_ID) AS Object, last_user_update 
FROM sys.dm_db_index_usage_stats 
WHERE database_id = DB_ID(<YourDBName>) 
AND OBJECT_ID=OBJECT_ID(<YourTableName>) 

इससे आपको पता चल जाएगा कि टेबल अपडेट किए गए थे, लेकिन वास्तव में, अपने उद्देश्य पूरा नहीं हो सकता है अगर आप एक का सामना कर रहे whodunnit परिदृश्य। साथ ही, यह आपको केवल नवीनतम अपडेटेड टाइमस्टैम्प देगा, जिसका अर्थ है कि अगर कोई पिछले हफ्ते अपडेट किया गया है और कल किसी और को अपडेट किया गया है, तो आपको पिछले सप्ताह अपडेट विवरण नहीं दिखाई देंगे।

राज

7

प्रयास करें इस एक -

SELECT 
     [db_name] = d.name 
    , [table_name] = SCHEMA_NAME(o.[schema_id]) + '.' + o.name 
    , s.last_user_update 
FROM sys.dm_db_index_usage_stats s 
JOIN sys.databases d ON s.database_id = d.database_id 
JOIN sys.objects o ON s.[object_id] = o.[object_id] 
WHERE o.[type] = 'U' 
    AND s.last_user_update IS NOT NULL 
    AND s.last_user_update BETWEEN DATEADD(wk, -1, GETDATE()) AND GETDATE() 
+0

+1 यह तब तक अच्छा है जब तक आपको परिवर्तन से पहले उपयोगकर्ता, संचालन और अंतिम मूल्य की आवश्यकता न हो। –

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