Skip to main content

MS SQL Recovery Pending Fix(සිංහල)

අද මම කියන්න යන්නේ SQL Server එකේ අපි කාටත් මූන පාන්න වෙන ගැටලුවක් ඒ තමයි Recovery Pending State එක.

Recovery Pending State in SQL Server

මේ issue එක fix කරන්න කලින් SQL Database status මොනාද Recovery pending  ඇතිවෙන්න හේතු මොනාද කියලාබලමු

SQL Database States 

😀Online - DB එක ප්‍රශ්නයක් නැතුව  accessible  පුළුවන් state එකක් තමයි මේ.

😟 Suspect - මේ කියන state එකනම් අවුලක් තියෙනවා මේ state එකේ තියෙනවා කියන්නෙ DB එක fail වෙන්න තියෙන ඉඩ වැඩියි ඒකට හේතුව තමයි transaction logs damage වෙලා තියෙන එක ඒ නිසා DB එකට recovery හරි transaction rollback එකට යන්න බැරුව suspect වෙලා තියෙනවා 

🙁 Recovery Pending - මේ state එකේදී SQL Server එක දන්නවා recovery එකක් ඔනී කියලා නමුත් ඒක start කරන්න තියෙන නොහැකියාව නිසා තමයි DB එක මේ state එකට යන්නේ.හැබැයි මේ අවස්ථාව suspect අවස්ථාවම නෙවෙයි මොකද මෙතනදි recovery එක fail වෙලා නෑ මේක start කරගන්න බැරි කමක් තියෙන්නේ 

Recovery Pending වෙන්න ගොඩක් හේතු බලපානවා ඒවගෙන් ප්‍රදාන දේවල් ටිකක් මම කියන්නම්

1) DB එක හරියාකාරව shutdown වෙලා නෑ මොකද uncommitted transaction එකක් active තියෙනවා ඒත් ඒ transaction එකේ log file එක delete වෙච්ච අවස්තාවක්

2) Process වෙන transaction log file එකක් move කරන්න යද්දි ඒ log file එක corrupted උනාම

3) Recovery කිරීමට ප්‍රමානවත් RAM , CPU ,Storage නොමැතිවීම

4) Fragmentation නිසා ඇතිවෙන low performance වෙන්නත් පුළුවන් 

මේක fix කරන්න ක්‍රම දෙකක් තියෙනවා (DB server එක restart නොකර)

හැබැයි මේ මොනා කරන්නත් කලින් DB වල backup එහෙම දාගෙන තියාගන්න එක ඇගට හොදයි

Emergency Mode - මේකෙදි DB එක read only වෙනවා system administrator ට තමයි කරන දෙයකට access තියෙන්නේ 

-> DB එක Emergency mode දාලා forceful Repair එකක් දාලා

Execute the following set of queries


ALTER DATABASE [DBName] SET EMERGENCY;

GO

ALTER DATABASE [DBName] set single_user

GO

DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;

GO 

ALTER DATABASE [DBName] set multi_user

GO

-> DB එක Emergency mode දාලා detached කරලා ආපහු attached කරන එක

Execute the following set of queries:


ALTER DATABASE [DBName] SET EMERGENCY;

ALTER DATABASE [DBName] set multi_user

EXEC sp_detach_db ‘[DBName]’

EXEC sp_attach_single_file_db @DBName = ‘[DBName]’, @physname = N'[mdf path]’


Comments