এসকিউএল সার্ভার কীভাবে কোনও ইন-এ কোনও কলাম আপডেট করার সময় লেনদেনের লগ পূরণ করতে পারে


18

আমার কাছে একটি এসকিউএল সার্ভার 2005 টেবিল রয়েছে BRITTNEY_SPEARS_MARRIAGESএবং এটিতে নিম্নলিখিত কলামগুলি রয়েছে:

MarrigeId tinyint, 
HusbandName varchar(500),
MarrigeLength int

এখন আমি অন্য টেবিল আছে BRITTNEY_SPEARS_MARRIAGE_STORIES

StoryId int, 
MarriageId tinyint, 
StoryText nvarchar(max)

সমস্যাটি হ'ল আমরা ক এর MarrigeIdএকটি intথেকে কলাম আপডেট করতে চাই tinyint। আমরা কেবল অনুভব করি যে সমস্ত কিছু বলার আগে এবং করার আগেই ব্রিটনি প্রচুর বিবাহ করতে চলেছে।

এখন BRITTNEY_SPEARS_MARRIAGE_STORIESটেবিলটিতে 18 মিলিয়ন সারি রয়েছে (আরে মেয়েটির কিছু সমস্যা আছে) তাই আমরা আপডেটটি করতে গেলে লেনদেনের লগ পূরণ হয় এবং আমাদের এসকিউএল সার্ভার বাক্সটি মারা যায়।

কীভাবে আমরা এটি পেতে পারি?

যাইহোক "আরে এসকিউএল সার্ভার আমি এই কলামটি আপডেট করে এটিকে আরও বড় করতে যাচ্ছি? বলার মতো কোনও উপায় আছে কি? এই এসকিউএল সার্ভারের উপর আমাকে বিশ্বাস করুন। আপনি সবকিছু যাচাই করার চেষ্টা করার সময় দয়া করে লেনদেনের লগটি পূরণ করবেন না?"

উত্তর:


7

এসকিউএল সার্ভারকে লেনদেনের লগটি ব্যবহার না করার জন্য বলার উপায় নেই।

আপনি যা করতে পারেন তা হ'ল ডাটাবেসের পুনরুদ্ধার মডেলটি সিমপ্লেতে সেট করে, যা পুরানো লগ এন্ট্রিগুলিকে স্থানের প্রয়োজন হিসাবে ওভাররাইট করে। তবে আপনার প্রোডাকশন সার্ভারে এটি করা উচিত নয় কারণ আপনি নির্দিষ্ট ধরণের পুনরুদ্ধার যেমন পয়েন্ট-ইন-টাইম পুনরুদ্ধার করতে সক্ষম হবেন না।

বিকল্পভাবে, আপনি আপনার লেনদেনের লগ ফাইলটিকে বৃহত্তর হিসাবে সেট করতে পারেন - থাম্বের একটি অবৈজ্ঞানিক নিয়ম হিসাবে আমি নিশ্চিত করবো যে A) আপনার লেনদেনের লগটিতে আপনার টেবিল বা খের আকারের চেয়ে কমপক্ষে 1.5x বেশি ফাঁকা জায়গা রয়েছে) আপনার লেনদেন লগটি এমন কোনও ড্রাইভে স্বয়ংক্রিয়ভাবে বেড়ে উঠতে পারে যাতে কমপক্ষে এই পরিমাণ ডিস্কের স্থান মুক্ত থাকে।

লগ ব্যাক আপ করে আপনি লেনদেন লগ স্পেস বিনামূল্যে করতে পারেন। আপনি যদি লগ সামগ্রী সম্পর্কে চিন্তা না করেন তবে ফাইলটি ফেলে দিন। এটির জন্য একটি শর্টকাট BACKUP LOG <Your Database Name> TO DISK = 'NUL:'। আবার, প্রোডাকশন সার্ভারে এটি করবেন না যদি না আপনি সম্পূর্ণরূপে নিশ্চিত হন যে আপনি এর অর্থগুলি বোঝেন।

সাবধান হওয়ার আরেকটি বিষয় (যদিও এটি আপনার প্রশ্নের সম্পূর্ণরূপে জার্মানি নয়) এটি নিশ্চিত করা যে আপনি যে টেবিলটি প্রসারিত করছেন তাতে একটি ক্লাস্টারড সূচক রয়েছে যার উপর এটি সংজ্ঞায়িত হয়েছে। যদি এটি না হয়, টেবিলটি প্রচুর পরিমাণে স্তূপ বিভাজন করতে পারে এবং এই জাতীয় পরিবর্তনের ফলে অকারণে অকারণে বড় হতে পারে।


5
  • যে কোনও বিদেশী কী ফেলে দিন
  • এর intপরিবর্তে নতুন সারণী তৈরি করুনtinyint
  • প্রতি ব্যাচে সারি সারি সরিয়ে নিন (এগুলিকে নতুন টেবিলের মধ্যে সন্নিবেশ করুন, পুরানোটি থেকে মুছুন)
  • পুরানো টেবিলগুলি ফেলে দিন
  • পুরানো নাম ব্যবহার করে নতুন টেবিলগুলির নতুন নাম দিন sp_rename
  • বিদেশী কীগুলি পুনরুদ্ধার করুন

পিএস যদি আপনার লেনদেনের লগ বড় হয় ... আপনার পুনরুদ্ধারের মডেলটি পরীক্ষা করুন। যদি আপনার পুনরুদ্ধারের মডেলটি না হয় simple, আপনি লগটি শেষ বার ব্যাক আপ করার পরে কতক্ষণ ছিল?


আপনার অর্থ যেহেতু আপনি লগ ব্যাক আপ করেছেন তাই ডাটাবেস ব্যাক আপ করা লগটিকে ছোট করবে না।
এইচএলজিইএম

@ এইচএলজিএম: আপনি ঠিক বলেছেন, আমি এই বিষয়ে পল রান্ডালের একটি নিবন্ধ পড়েছি। যদিও অপ্রত্যাশিত ধরনের, যদি আপনি কেবলমাত্র পুরো ব্যাকআপ করতে চান তবে আপনার লগ বাড়তে থাকবে।
Andomar
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.