2010-10-05 11 views
6

मेरे पास एक SQL सर्वर 2005 डेटाबेस है। मैं एक टेबल पर डेटा लॉगिंग कर रहा हूँ। मैं टेबल डेटा को बहुत बड़ा होने से रोकना चाहता हूं।किसी तालिका के आकार को सीमित करने के लिए कैसे करें?

मैं तालिका के आकार को पंक्तियों की संख्या में कैसे सीमित कर सकता हूं, और लॉगिंग रख सकता हूं? मैं सबसे पुरानी पंक्तियों को छोड़ना चाहता हूं।

उत्तर

8

आपको इस प्रक्रिया को स्वयं बनाना है। आप एक SQL सर्वर नौकरी बनाने में देखना चाहते हैं जो SQL DELETE कथन चलाता है जो आपके द्वारा निर्धारित मानदंडों पर आधारित है।

+1

यदि आप थोड़ा अधिक होने पर ध्यान नहीं देते हैं तो एक नौकरी शायद ट्रिगर से बेहतर है। बस इसे रात या साप्ताहिक या जो कुछ भी चलाने के लिए सेट करें। –

3

यह एक ऐसा उदाहरण है जहां ट्रिगर वास्तव में एसक्यूएल सर्वर में एक अच्छा विचार हो सकता है। (मेरी व्यक्तिगत भावना यह है कि एसक्यूएल में ट्रिगर्स कोड में गोटो की तरह हैं।)

बस एक आईएनएसईआरटी ट्रिगर लिखें, जो ट्रिगर होने पर फ़ाइल में पंक्तियों की संख्या की जांच करेगा और आपके द्वारा निर्दिष्ट नियमों के अनुसार DELETE निष्पादित करेगा ।

इस बार स्क्रीन कैप्स के साथ trigger basics. और another का एक लिंक है।

+1

यदि प्रश्न में तालिका अक्सर बदल रही है, तो यह एक अच्छा विचार नहीं होगा। यह आमतौर पर रखरखाव वस्तुओं को शेड्यूल करने के लिए बेहतर होता है जब सिस्टम कम से कम लोड के अधीन होता है .. – NotMe

+0

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

2

तालिका को अपने स्वयं के फ़ाइल समूह पर रखें। फ़ाइल समूह के आकार को सीमित करें। देखें:

फिर एक काम है कि पुराने लॉग रिकॉर्ड को हटा देता है जोड़ने के लिए, लेकिन यह आम तौर पर जटिल की तुलना में यह लग रहा है। एक स्लाइडिंग विंडो का उपयोग करने का सबसे प्रभावी तरीका: How to Implement an Automatic Sliding Window in a Partitioned Table। यदि संभव नहीं है, तो अगली सबसे अच्छी बात यह सुनिश्चित करना है कि तालिका पर क्लस्टर कुंजी तारीख है, ताकि हटाए गए पुराने पंक्तियों को कुशलतापूर्वक हटा दें।

0

यदि आप लॉगिंग उद्देश्यों के लिए किसी तालिका के आकार को प्रतिबंधित करना चाहते हैं, तो मैं किसी तालिका में संग्रहीत रिकॉर्ड्स की संख्या सीमित करके समस्या को हल करने की सोचने की सलाह नहीं दूंगा। इसके बजाय तालिका के लिए एक संग्रह या शुद्ध प्रक्रिया है जो लॉग संग्रहीत करता है, पंक्तियों की एक्स संख्या तक पहुंचने के बाद या तो बाद में आप लॉग को संग्रहित करने के लिए कॉन्फ़िगर किया जा सकता है, या शायद बाद में आप इसे X की संख्या के बाद पुन: कॉन्फ़िगर करना चाहते हैं/घंटे/आदि। यदि आप वास्तविक स्थान के बारे में चिंतित हैं, तो यह विश्लेषण करना सबसे अच्छा होगा कि आपके लॉग वास्तव में कितनी जगह ले रहे हैं। एक बार जब आपको पता चल जाए कि डेटाबेस के लिए आपके पास कितनी भौतिक जगह उपलब्ध है, तो SQL सर्वर से डेटा वृद्धि को प्रतिबंधित करने के लिए यह सुनिश्चित करने के लिए कि लॉगिंग जानकारी संग्रहीत डेटा फ़ाइल आपकी अपेक्षाओं से अधिक न हो।

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

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