У нас отключилось электричество, и одна из наших баз данных SQL 2000 помечена как подозрительная. У нас есть резервная копия, но она старше одного дня (отключение электроэнергии произошло незадолго до того, как было запланировано резервное копирование), и мы бы предпочли не терять данные за эти дни.
Есть ли способ восстановить базу данных, а затем скопировать недостающие данные из подозрительных таблиц базы данных?
Вначале я скажу, что как только БД помечена как «подозрительная», вы попадаете в довольно плохое место - велика вероятность потери данных независимо от того, как вы восстановитесь после этого.
Тем не менее, вы должны иметь возможность запустить базу данных в аварийном режиме и начать процесс восстановления (checkdb) оттуда. http://gargmanoj.wordpress.com/2008/07/17/how-to-repair-a-sql-server-2005-suspect-database/ содержит более подробную информацию о SQL Server 2005, но я считаю, что они будут работать и в 2000 году (команды, воспроизводимые ниже для потомков).
--- Find out why the DB is marked suspect
DBCC CHECKDB (‘YourDBname’) WITH NO_INFOMSGS, ALL_ERRORMSGS
--- Reset the DB to Emergency Mode
EXEC sp_resetstatus ‘yourDBname’;
ALTER DATABASE yourDBname SET EMERGENCY
--- Initial checkdb to get things working
DBCC checkdb(‘yourDBname’)
--- Single-User Mode & "Dangerous" repair (possibility of data loss!)
ALTER DATABASE yourDBname SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB (‘yourDBname’, REPAIR_ALLOW_DATA_LOSS)
--- Make the DB usable again
ALTER DATABASE yourDBname SET MULTI_USER
После завершения ремонта (или, лучше, перед запуском) вы должны попросить своего босса взять ИБП для сервера базы данных. Часто проще поколебать денежное дерево из-за угрозы потери данных, нависшей над головами людей.