2008-10-27 15 views
6

मुझे कल एक असामान्य समस्या थी जहां मैं अचानक एक पहचान कॉलम के साथ एक तालिका में रिकॉर्ड डालने में असमर्थ था।पहचान कॉलम दूषित होने का कारण क्या हो सकता है?

इस तरह एक साधारण डालने: INSERT INTO MyTable (स्तंभ 1, Column2) मूल्यों ('पाठ', 236,764)

एक प्राथमिक कुंजी बाधा उल्लंघन फेंकने शुरू कर दिया।

मैंने टेबल पर डीबीसीसी अध्यक्ष चलाया, और महसूस किया कि SQL सर्वर ने अंतिम उपयोग किए गए मान को अपडेट करना बंद कर दिया था, ताकि जब यह डालने वाला हो तो पुराने मूल्य का उपयोग करके वृद्धि हो रही थी और नए पहचान मान आमतौर पर तालिका में मौजूद थे, इसलिए उल्लंघन त्रुटियां।

समस्या का समाधान करना कोई मुद्दा नहीं था, मैं सिर्फ अगले सर्वोच्च क्रम संख्या के लिए तालिका reseeded, लेकिन मैं कभी नहीं देखा है इस से पहले हो!

किसी को भी किसी भी विचार क्या एसक्यूएल सर्वर पहचान गुण अद्यतन करने बंद कर सकती है, और मैं सबूत के लिए जहां लग सकता है? कोई प्रतिकृति या कोई ट्रिगर्स शामिल नहीं है, यह सिर्फ एक सादे पुरानी टेबल है।

संपादित करें: एसक्यूएल लॉग बचाव आदर्श हो गया होता, लेकिन यह केवल एसक्यूएल सर्वर 2000 पर काम करता है वहां भी इसी तरह उपकरण वहाँ बाहर एसक्यूएल 2005 लॉग के लिए है?

उत्तर

1

किसी SET IDENTITY_INSERT ON का उपयोग कर तालिका में डाला गया है, तो किसी को पूरी तरह से मेज के लिए अमान्य मान में प्रवेश किया जा सकता था। यह मेरा पहला अनुमान होगा। लेनदेन लॉग के माध्यम से समय पर वापस जाने के लिए आप SQL Log Rescue जैसे लॉग विश्लेषक का उपयोग कर सकते हैं और देख सकते हैं कि आप कौन से बुरे व्यक्ति को अपना डेटा गड़बड़ कर सकते हैं ...

+0

देखें अन्य जवाब है, identity_insert यह करने के लिए प्रतीत नहीं होता। – user12861

1

मुझे लगता है कि SET IDENTITY_INSERT पहचान को संशोधित करता है।

बोल

से

तो डाला मूल्य तालिका के लिए से बड़ा वर्तमान पहचान मान है, एसक्यूएल सर्वर स्वचालित रूप से वर्तमान पहचान मान के रूप में नई डाला मूल्य उपयोग करता है।

इस मुद्दे को पुन: पेश करने का एकमात्र तरीका डीबीसीसी अध्यक्ष के साथ बीज को मैन्युअल रूप से कम करना था।

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