Привет. Недавно столкнулся с ситуацией — при попытке запуска службы Microsoft SQL Server, служба не запускалась. В системном логе была обнаружена ошибка следующего содержания:
Error: 5178, Severity: 16, State: 1.
Cannot use file 'c:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\DATA\master.mdf' because it was originally formatted with sector size 4096 and is now on a volume with sector size 3072. Move the file to a volume with a sector size that is the same as or smaller than the original sector size.
Как видно из ошибки — сервер не может стартануть из за того, что для сервера размер секторов должен быть 4096, а на самом деле 3072. Причин такого явления может быть несколько. Одной из них может быть то, что используется старый жесткий диск.
Эту ошибку можно исправить без переустановки системы, как это сделать я сегодня покажу.
В двух словах, что мы сделаем. Создадим виртуальный жесткий диск, отформатируем его с явным указанием размера секторов, подключим его как папку и перенесем туда файлы баз данных.
Теперь по подробнее и по шагам.
Сперва перейдите в папку MSSQL вашего экземпляра. Путь можно посмотреть в ошибке. В моем случае - c:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL.
Тут нужно переименовать каталог DATA, например в DATA.old
После этого - идем в панель управления — Администрирование — Управление компьютером. В открывшейся оснастке переходим в управление дисками, жмем действие — создать виртуальный жесткий диск.
Выбираем какое-нибудь место, где будет храниться файл диска, и задаем его размер. На этом диске у нас будут лежать базы, соответственно лучше дать места под базы с запасом.
В оснастке должен будет новый диск. Жмем по нему правой кнопой и инициализируем его.
После того как диск будет инициализирован, жмем правой кнопкой по свободному месту на диске и создаем простой том.
На шаге — назначение буквы диска или пути — выберите подключить как пустую NTFS папку, нажмите на обзор и создайте папку DATA в папке с вашим экземляром MSSQL.
На следующем шаге задайте размер кластера — 4096.
Диск мы создали и подключили. Теперь скопируйте всё из папки DATA.old в новую папку DATA.
Нужно задать нужные права на файлы, т.к. они не наследуются от вышестоящей папки.
Т.к. в ручную задавать их — дело муторное и долгое, предлагаю воспользоваться командной стокой.
Запускаем ее от имени администратора и выполняем:
cd «путь до вашего экземпляра»
(у меня - "c:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL")
Посмотрим разрешения для файлов в папке old:
icacls DATA.old\*
Будут выведены все разрешения на все файлы в этой папке. Нас интересует пользователь NT SERVICE\MSSQL$ИмяЭкземпляра. В моем случае этот пользователь — NT SERVICE\MSSQL$SQLEXPRESS
Дадим этому пользователю полный доступ на все файлы в папке DATA:
icacls DATA\* /grant «NT SERVICE\MSSQL$SQLEXPRESS»:F
Теперь можно попробовать запустить MSSQL, он должен запуститься. Если это так, то остался один шаг — сделать, что бы наш виртуальный диск монтировался автоматически при старте системы и после этого запускался Sql Server.
Для этого создадим, где-нибудь текстовый файл attach.txt, я создам его в папке vhds:
select vdisk file="C:\vhds\mssql.vhd"
attach vdisk
Соотсветсвенно путь до диска и имя измените на ваши.
И создадим там же bat файл start-sql.bat:
diskpart /s “C:\vhds\attach.txt” ping -n 10 127.0.0.1 net start mssql$имя_экземпляра
В моем случае имя экземпляра — sqlexpress, команда будет такая — net start mssql$sqlexpress. Так же укажите верный путь до файла attach.txt
Теперь идем в панель управление — администрирование — планировщик заданий, и создаем новую задачу.
Во вкладке общее — даем понятное имя, выбираем выполнять для всех пользователей и ставим галку выполнять с наивысшими правами.
Во вкладке триггеры — создаем триггер, в поле начать задачу: выбираем при запуске.
Во вкладке действие — создаем действие — запуск программы и указываем наш bat файл.
Во вкладке условия — убираем галку — запускать только при питании от электросети.
Жмем ок, вводим пароль пользователя, от имени которого будет выполняться задача.
Перезагружаем компьютер и удостоверяемся, что mssql после перезагрузки запускается.
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.
Если вам помогла статья, вы можете >>отблагодарить автора<<