এই ব্লগে মাইক্রোসফট® SQL সার্ভার®-এ ডেটাবেস স্তরে হতে পারে এমন ক্ষতিগ্রস্ততার বর্ণনা রয়েছে, সেগুলো কীভাবে শনাক্ত করতে হয় এবং উন্নত পুনরুদ্ধার ও মেরামতের কৌশল ব্যবহার করে সেগুলো কীভাবে সংশোধন করতে হয়।
ভূমিকা
বর্তমানে, SQL সার্ভার তার উন্নত অভ্যন্তরীণ কাঠামো এবং চমৎকার নির্ভরযোগ্যতার কারণে সবচেয়ে জনপ্রিয় এবং ব্যাপকভাবে ব্যবহৃত রিলেশনাল ডেটাবেস ম্যানেজমেন্ট সিস্টেমগুলির মধ্যে একটি। অনেক প্রতিষ্ঠান Криটিক্যাল ব্যবসায়িক ডেটা সংরক্ষণ ও বজায় রাখতে SQL সার্ভার ডেটাবেস ব্যবহার করে।
কোম্পানিগুলো ডেটাবেস অ্যাডমিনিস্ট্রেটররা (ডিবিএরা) থেকে ডেটাবেস পারফরম্যান্স, রক্ষণাবেক্ষণ এবং নিরাপত্তা নিরন্তর উন্নত করার আশা করে। যখন একটি ডেটাবেস ক্ষতিগ্রস্ত হয় এবং ডেটা অ্যাক্সেসযোগ্য নেই, তখন আপনি হার্ডওয়্যার ক্ষতি, ডিস্ক সমস্যা, ভাইরাস আক্রমণ বা অপারেটিং সিস্টেম (ওএস) ব্যর্থতা όπως çeşitli কারণ 그리হ করতে পারেন। ক্ষতিগ্রস্ত ডেটাবেস মেরামত করা সহজ কাজ নয় যতক্ষণ না আপনি সেরা কৌশলটি জানেন।
এই পোস্টে ডেটাবেস ক্ষতিগ্রস্ততার কিছু কারণ আলোচনা করা হয়েছে, পৃষ্ঠা ক্ষতিগ্রস্ততা শনাক্ত করতে সাহায্য করা হয়েছে, ডেটাবেস কনসিস্টেন্স চেকার (DBCC) CHECKDB কমান্ড অন্বেষণ করা হয়েছে এবং উন্নত পুনরুদ্ধার ও মেরামতের কৌশল প্রদর্শন করা হয়েছে।
ডেটাবেস ক্ষতিগ্রস্ততা
SQL সার্ভার ব্যবহারকারীর ডেটা পৃষ্ঠা আকারে সংরক্ষণ করে। সেই পৃষ্ঠাগুলো .MDF (প্রাথমিক) ডেটা ফাইলগুলিতে থাকে। একটি .MDF ফাইলের ক্ষতিগ্রস্ততা পুরো ডেটাবেসকে ক্ষতিগ্রস্ত করতে পারে। ডেটা ফাইল পৃষ্ঠাটি SQL সার্ভারের মেমরি থেকে বের হয়ে ডিস্কে লেখা পর্যন্ত ভালো থাকে, কিন্তু মেমরিতে আবার পড়া সময়ে خرাপ হয়ে যায়, যেমন নিচের ছবিতে দেখানো হয়েছে:
ডেটাবেস ক্ষতিগ্রস্ততার কারণ:
ডেটাবেস ক্ষতিগ্রস্ততার ধরনগুলোর মধ্যে রয়েছে:
- I/O সাবসিস্টেম (এটি ডেটাবেস ক্ষতিগ্রস্ততার সবচেয়ে সাধারণ কারণগুলির একটি।)
- উইন্ডোজ অপারেটিং সিস্টেম
- ফাইল সিস্টেম ড্রাইভার যেমন এনক্রিপশন বা অ্যান্টিভাইরাস
- SAN বা RAID কন্ট্রোলার
- ডিস্ক
- মেমরি
- ফাইল হেডার
- SQL সার্ভার বাগ
- মানব ভুল
ত্রুটি বার্তা:
ক্ষতিগ্রস্ত ডেটাবেস অ্যাক্সেস করার সময় আপনি নিচের ত্রুটি বার্তাগুলো দেখতে পেতে পারেন:
- SQL সার্ভারে Msg 823
- SQL সার্ভারে Msg 824
- SQL সার্ভারে Msg 825 (রিড রিট্রাই)
- Error 9004 SQL সার্ভার
- মেটাডেটা ক্ষতিগ্রস্ততা ত্রুটি
- পৃষ্ঠা স্তরের ক্ষতিগ্রস্ততা ত্রুটি
পৃষ্ঠা ক্ষতিগ্রস্ততা ট্রেস করা
SQL সার্ভারের একটি বিল্ট-ইন প্রক্রিয়া রয়েছে যা I/O অপারেশন যেমন ডিস্কে পৃষ্ঠা পড়া ও লেখার সময় ক্ষতিগ্রস্ততা হলে স্বয়ংক্রিয়ভাবে সেটি শনাক্ত করে এবং সতর্ক করে।
SQL সার্ভারে নিচের বিভিন্ন ধরনের পৃষ্ঠা-স্তরের যাচাই বিকল্প উপলব্ধ যা ডিস্কে পৃষ্ঠাগুলো রক্ষা করতে সাহায্য করে:
- TORN_PAGE_DETECTION
- চেকসাম
TORN_PAGE_DETECTION নির্দিষ্ট করা হলে, একটি 8 KB ডেটা ফাইল পৃষ্ঠার জন্য 16 x 512-বাইট ডিস্ক সেক্টরের জন্য একটি বিট ফ্লিপ করা হয় যখনই পৃষ্ঠাটি ডিস্কে লেখা হয়। পৃষ্ঠাটি পরবর্তীতে মেমরিতে পড়া হলে, এই মানগুলো তুলনা করা হয়। যদি বিটগুলো ভুল অবস্থায় পাওয়া যায়, তবে পৃষ্ঠাটি সম্ভবত ভুলভাবে লেখা হয়েছে। এই ক্ষেত্রে, সিস্টেম ত্রুটি বার্তা 824 জেনারেট করে (টর্ন-পেজ ত্রুটি নির্দেশ করে)।
চেকসাম নির্দিষ্ট করা হলে, পৃষ্ঠার বিষয়বস্তু ওভার চেকসাম মান ক্যালকুলেট করা হয় এবং পৃষ্ঠা ডিস্কে লেখার সময় সেই মানটি পৃষ্ঠা হেডারে সংরক্ষণ করা হয়। পরে ডিস্ক থেকে পৃষ্ঠা লোড হলে, চেকসাম পুনরায় গণনা করা হয় এবং পৃষ্ঠা হেডারে সংরক্ষিত মানের সাথে তুলনা করা হয়। যদি মান মেলে না, তবে সিস্টেম ত্রুটি বার্তা 824 জেনারেট করে (চেকসাম ব্যর্থতা নির্দেশ করে)।
উভয় ত্রুটি, 823 হার্ড I/O এবং 824 সফ্ট I/O, সেভেরিটি 24 ত্রুটি এবং msdb.dbo. suspect_pagestable-এ লগ করা হয়।
টেবিল msdb.dbo. suspect_pagestable একক পৃষ্ঠা পুনরুদ্ধার অপারেশনের জন্য ব্যবহৃত হয় এবং এটি SQL সার্ভার এরর লগ এবং উইন্ডোজ® ইভেন্ট লগে লগ করা যেতে পারে।
DBCC CHECKDB
DBCC CHECKDB একটি ডেটাবেসের সমস্ত অবজেক্টের শারীরিক ও যৌক্তিক অখণ্ডতা যাচাই করে।
এটি একটি রিসোর্স-গভীর অপারেশন এবং সমান্তরাল প্রসেসিং ব্যবহার করে, তবে আপনি ট্রেস ফ্ল্যাগ 2528 ব্যবহার করে এটিকে সিঙ্গেল থ্রেডে চালাতে পারেন।
প্রাথমিক গুরুত্বপূর্ণ সিস্টেম টেবিল চেক
প্রাথমিক চেকগুলো স্টোরেজ ইঞ্জিন মেটাডেটা ধারণকারী গুরুত্বপূর্ণ সিস্টেম টেবিল এবং alokেশন পথগুলোর ওপর চেক করার জন্য ডিজাইন করা হয়েছে যেখানে ডেটা MDF ফাইলগুলিতে সংরক্ষিত থাকে।
প্রাথমিক চেকগুলো নিচের তালিকায় দেখানো হয়েছে:
DBCC CHECKALLOC: একটি ডেটাবেসে alokেশন কাঠামোর কনসিস্টেন্সি যাচাই করে। এটি যাচাই করে alokেশন কাঠামোটি বৈধ কিনা এবং কোনো একক ডেটা ফাইল পৃষ্ঠা দুটি টেবিলে alok করা নেই।
DBCC CHECKTABLE: টেবিল এবং ইনডেক্সের কনসিস্টেন্সি যাচাই করে। এটি টেবিলের কাঠামো এবং এর সংশ্লিষ্ট ইনডেক্সগুলো যাচাই করে। এটি নির্ধারণ করে ইনডেক্স ডেটায় টেবিলে মিলে যাওয়া সারি আছে কিনা এবং ইনডেক্স অর্ডার কী পরীক্ষা করে। যদি টেবিলে কোনো FILESTREAM ব্যবহার করা হয়, তবে এটি লিংকটির অস্তিত্ব যাচাই করে।
DBCC CHECKCATALOG: সিস্টেম ক্যাটালগের মধ্যে কনসিস্টেন্সি যাচাই করে।
DBCC CHECKFILEGROUP: DBCC CHECKDB-এর অনুরূপ, এই চেক একটি ফাইল গ্রুপের জন্য কনসিস্টেন্সি চেক এবং ডেটাবেসের জন্য alokেশন চেক করে।
নমুনা কোড
DBCC CHECKDB [ ( database_name | database_id | 0 [ , NOINDEX | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ] ) ] [ WITH { [ ALL_ERRORMSGS ] [ , EXTENDED_LOGICAL_CHECKS ] [ , NO_INFOMSGS ] [ , TABLOCK ] [ , ESTIMATEONLY ] [ , { PHYSICAL_ONLY | DATA_PURITY } ] [ , MAXDOP = number_of_processors ] } ] ]
অভ্যন্তরীণ ডেটাবেস স্ন্যাপশট
CHECKDB-এর সাথে অভ্যন্তরীণ ডেটাবেস স্ন্যাপশট ব্যবহার করে চেকগুলো সম্পাদন করা এবং ট্রানজ্যাকশনাল কনসিস্টেন্সি বজায় রাখা ব্লকিং এবং কনকারেন্সি সমস্যা প্রতিরোধ করে। আপনি যদি ডেটাবেস স্ন্যাপশট তৈরি করতে না পারেন, তবে নিশ্চিত করুন আপনার ডেটাবেসের জন্য এক্সক্লूसিভ লক এবং শেয়ার্ড টেবিল লক আছে কারণ টেবিল-স্তরের চেক করার জন্য এটি প্রয়োজন। কোনো স্ন্যাপশট তৈরি না হলে CHECKDB মাস্টার-এ ব্যর্থ হয়।
নিচের তালিকায় DBCC CHECKDB দ্বারা সম্পাদিত অভ্যন্তরীণ চেকগুলো রয়েছে:
- গুরুত্বপূর্ণ সিস্টেম টেবিল চেক।
- গুরুত্বপূর্ণ সিস্টেম টেবিল যৌক্তিক চেক।
- অন্যান্য টেবিল যৌক্তিক চেক।
- alokেশন চেক।
- মেটাডেটা চেক।
- সার্ভিস ব্রোকার বৈধতা চেক।
- ইন্ডেক্সড ভিউ, স্পেশিয়াল ইনডেক্স চেক।
CHECKDB ত্রুটি
নিচের টেবিলে কিছু DBCC CHECKDB ত্রুটি দেখানো হয়েছে:
সেরা অনুশীলন
যদি ডেটাবেস VLDB CHECKDB-এর জন্য রানটাইম সমস্যা হয়, তবে আপনাকে VLDB প্রোডাকশন ডেটাবেসের জন্য রান টাইম কমানোর জন্য প্রায়শই PHYSICAL_ONLY অপশন ব্যবহার করা উচিত। যাইহোক, সাধারণত DBCC CHECKDB কোনো অপশন ছাড়াই চালানো উচিত। আপনার ব্যক্তিগত প্রোডাকশন এনভায়রনমেন্টের উপর নির্ভর করে আপনার CHECKDB রান শিডিউল করুন।
উন্নত পুনরুদ্ধার বিকল্প
যদিও অধিকাংশ লোক ক্ষতিগ্রস্ততা সমস্যার জন্য সিম্পল ডেটাবেস পুনরুদ্ধার কৌশল ব্যবহার করে, নিচের উন্নত পুনরুদ্ধার কৌশলগুলো উপলব্ধ:
পৃষ্ঠা পুনরুদ্ধার
এই কৌশল দিয়ে আপনি এক বা একাধিক পৃষ্ঠা পুনরুদ্ধার করতে পারেন। পৃষ্ঠা-স্তরের পুনরুদ্ধার ডেটাবেস এন্টারপ্রাইজ এডিশনের জন্য একটি অনলাইন অপারেশন, এবং অন্যান্য এডিশনের জন্য আপনি অফলাইন অপারেশন ব্যবহার করতে পারেন, যার অর্থ হলো পুনরুদ্ধার প্রক্রিয়ার সময় ডেটাবেস অফলাইন থাকতে পারে।
T-SQL স্ক্রিপ্ট
RESTORE DATABASE <database_name> PAGE = '<file: page> [ ,... n ] ' [ ,... n ] FROM <backup_device> [ ,... n ] WITH NORECOVERY
পেজ আইডি পেতে, এরর লগ, ইভেন্ট ট্রেস, DBCC, এবং msdb..suspectpages টেবিল রেকর্ডের মতো বিভিন্ন সোর্স ব্যবহার করা যেতে পারে যা ক্ষতিগ্রস্ত পৃষ্ঠাগুলো এবং তাদের আইডি তালিকাভুক্ত করে।
নোট: আপনি বুট পৃষ্ঠা, ফাইল হেডার পৃষ্ঠা, গুরুত্বপূর্ণ সিস্টেম টেবিলের কিছু পৃষ্ঠা, এবং alokেশন বিটম্যাপ পৃষ্ঠা পুনরুদ্ধার হিসাবে পৃষ্ঠা পুনরুদ্ধার করতে পারবেন না।
টুকরো এবং আংশিক পুনরুদ্ধার
পৃষ্ঠা পুনরুদ্ধারের অনুরূপ, আপনি একাধিক ফাইল বা ফাইলগ্রুপ ধারণকারী এন্টারপ্রাইজ এডিশনের জন্য অনলাইন এবং অন্যান্য এডিশনের জন্য অফলাইন পিসমিল এবং আংশিক পুনরুদ্ধার সম্পাদন করতে পারেন।
প্রতিটি পিসমিল পুনরুদ্ধার একটি আংশিক পুনরুদ্ধার সিকোয়েন্স RESTORE DATABASE স্টেটমেন্ট দিয়ে শুরু হয় যা PARTIAL অপশন সহ একটি ফুল ব্যাকআপ পুনরুদ্ধার করে। এই পুনরুদ্ধার সম্পূর্ণ হলে, ডেটাবেস আংশিকভাবে অনলাইন হওয়া উচিত, যার অর্থ বাকি ফাইলগুলো রিকভারি পেন্ডিং মোডে থাকে কারণ রিকভারি স্থগিত করা হয়েছে।
পিসমিল পুনরুদ্ধার ডেটাবেসের রিকভারি মডেল এবং এর রিকভারি সিকোয়েন্সের ওপর নির্ভর করে।
পুনরুদ্ধার সিকোয়েন্স
ফাইলগ্রুপ X এবং Z এবং প্রাইমারি ফাইলগ্রুপের আংশিক পুনরুদ্ধার করতে, নিচের কোড চালান:
RESTORE DATABASE DB_XYZ FILEGROUP='X',FILEGROUP='Z' FROM partial_backup WITH PARTIAL, RECOVERY;
উপরোক্ত পয়েন্ট X-এ, নিচের বিষয়গুলো সত্য:
- ফাইলগ্রুপ Z এবং প্রাইমারি ফাইলগ্রুপ অনলাইন।
- ফাইলগ্রুপ Y-এ থাকা ফাইলগুলো রিকভারি পেন্ডিং।
- ফাইলগ্রুপ অফলাইন।
চলান RESTORE DATABASE DB_XYZ FILEGROUP='Y' FROM backup WITH RECOVERY;
এখন, সব ফাইলগ্রুপ অনলাইন।
অন্যান্য উন্নত মেরামত কৌশল
কি মেরামত সবসময় ডেটা রিকভারির গ্যারান্টি দেয়? উত্তর হলো "না।"
ডেটা ক্ষতিগ্রস্ত করার অনেক সম্ভাব্য কম্বিনেশন থাকতে পারে, এবং সব কম্বিনেশন টেস্ট করা অসম্ভব। উদাহরণস্বরূপ, একটি সিস্টেম টেবিল ক্ষতিগ্রস্ত, এবং বুট এবং PFSের মতো পৃষ্ঠাগুলোতে মেরামত কাজ করে না।
নিচে কিছু মেরামত অপশন দেওয়া হলো:
REPAIR_REBUILD
এই অপশনটি মেরামত সম্পাদন করে, কিন্তু ক্ষতিগ্রস্ত NC ইনডেক্স পুনर्नির্মাণ করার সময় ডেটা লস হতে পারে।
REPAIR_ALLOW_DATA_LOSS
এই অপশনটি মেরামত সম্পাদন করে, কিন্তু ডেটা লস হতে পারে।
সিস্টেম টেবিল ইনডেক্স পুনরুদ্ধার
আপনি ক্লাস্টারড সিস্টেম টেবিল ইনডেক্স মেরামত করতে পারবেন না, কিন্তু কিছু পরিস্থিতিতে DBCC CHECKTABLE অপশন চেক করে নন-ক্লাস্টারড ইনডেক্স মেরামত করতে পারেন।
নোট: যেকোনো ধরনের উন্নত মেরামত কৌশল সর্বদা ডেটাবেসের একটি কপিতে করুন, মূল ডেটাবেসে না, ভয়াবহ পরিস্থিতি এড়াতে।
নন-ক্লাস্টারড ইনডেক্স থেকে ডেটা পুনরুদ্ধার:
যদি একটি ক্লাস্টারড ইনডেক্স বা হিপ ক্ষতিগ্রস্ত হয়, তবে নন-ক্লাস্টারড (NC) ইনডেক্স থেকে ডেটা রিকভার করার জন্য মেরামত একমাত্র অপশন। যাইহোক, কিছু ক্ষেত্রে মেটাডেটা ক্ষতিগ্রস্ত থাকলে মেরামত কাজ করবে না।
আপনি একটি সিলেক্ট স্টেটমেন্ট ব্যবহার করে ক্ষতিগ্রস্ত নয় এমন NC ইনডেক্স বেছে নিতে বাধ্য করতে পারেন, কিন্তু এটি NC ইনডেক্সের কলাম-স্তরের কভারেজের ওপর নির্ভর করতে পারে।
DBCC Page
DBCC PAGE … WITH TABLERESULTS ব্যবহার করে কী রেঞ্জ শনাক্ত করা যায়। আপনি এটিকে একটি নন-ক্লাস্টারড ইনডেক্স থেকে নির্মাণ করতে পারেন এবং ক্ষতিগ্রস্ত পৃষ্ঠাগুলো পরীক্ষা করে পৃষ্ঠাগুলো থেকে ডেটা পাওয়ার চেষ্টা করতে পারেন।
উপসংহার
এই পোস্ট পড়ার পর, আপনার ডেটাবেস ক্ষতিগ্রস্ততা এবং সিম্পল ও উন্নত উভয় কৌশল ব্যবহার করে আপনার ডেটাবেস কীভাবে পুনরুদ্ধার করতে হয় সে সম্পর্কে আরও ভালো ধারণা থাকা উচিত। এছাড়া, এই কৌশলগুলো ক্ষতিগ্রস্ততার পর ডেটাবেস অনলাইন আনার সাহায্য করে। আপনার যেকোনো ক্ষতিগ্রস্ততা আউটেজ এড়াতে একটি শক্তিশালী ব্যাকআপ প্ল্যান থাকা উচিত।
কোনো মন্তব্য বা প্রশ্ন করার জন্য ফিডব্যাক ট্যাব ব্যবহার করুন।
বিশেষজ্ঞ প্রশাসন, ব্যবস্থাপনা, এবং কনফিগারেশন দিয়ে আপনার এনভায়রনমেন্ট অপ্টিমাইজ করুন
Rackspace-এর অ্যাপ্লিকেশন সার্ভিসেস (RAS) বিশেষজ্ঞরা অ্যাপ্লিকেশনের একটি ব্যাপক পোর্টফোলিও জুড়ে নিচের প্রফেশনাল এবং ম্যানেজড সার্ভিসেস প্রদান করে:
- ই-কমার্স এবং ডিজিটাল অভিজ্ঞতা প্ল্যাটফর্ম
- এন্টারপ্রাইজ রিসোর্স প্ল্যানিং (ERP)
- বিজনেস ইন্টেলিজেন্স
- Salesforce কাস্টমার রিলেশনশিপ ম্যানেজমেন্ট (CRM)
- ডেটাবেস
- ইমেইল হোস্টিং এবং প্রোডাক্টিভিটি
আমরা সরবরাহ করি:
- পক্ষপাতমুক্ত দক্ষতা: আমরা আপনার আধুনিকরণ যাত্রাকে সরল ও নির্দেশিত করি, তাৎক্ষণিক মান প্রদানকারী ক্ষমতাগুলোর ওপর ফোকাস করে।
- Fanatical Experience™: আমরা একটি প্রক্রিয়া-প্রথম, প্রযুক্তি-দ্বিতীয়® পদ্ধতিকে নিখুঁত প্রযুক্তিগত সহায়তার সাথে মিলিয়ে ব্যাপক সমাধান প্রদান করি।
- অতুলনীয় পোর্টফোলিও: আমরা ব্যাপক ক্লাউড অভিজ্ঞতা প্রয়োগ করে আপনাকে সঠিক প্রযুক্তি সঠিক ক্লাউডে বেছে নেওয়া এবং ডিপ্লয় করতে সাহায্য করি।
- চঞ্চল ডেলিভারি: আমরা আপনার যাত্রায় আপনি যেখানে আছেন সেখানে আপনাকে পেয়ে যাই এবং আমাদের সাফল্যকে আপনার সাথে সানกลন করি।
এখন চ্যাট করুন শুরু করতে।