Как перенести базу 1С с MS SQL сервера, если утерян пароль администратора sa

Системный администратор 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

Ситуация, когда доступ к MS SQL Server на уровне администратора СУБД (пользователь sa) утерян, а базу необходимо срочно перенести или восстановить, встречается в практике системного администрирования нередко. Ситуация осложняется, если штатная выгрузка 1С (файл .dt) не загружается на новый сервер из-за внутренних ошибок целостности, а стандартное «Тестирование и исправление» в файловом режиме занимает слишком много времени. Разберем по шагам, как решить эту задачу, имея доступ только к операционной системе сервера.

Способ 1: Использование прав локального администратора Windows

Прежде чем приступать к радикальным мерам, проверим самый простой вариант. Часто при установке MS SQL Server системные администраторы включают опцию Windows Authentication и добавляют текущего пользователя или группу «Администраторы» в список sysadmin. Проанализируем, как это можно использовать:

  1. Попробуем зайти на сервер под учетной записью локального администратора Windows или администратора домена.
  2. Запустим SQL Server Management Studio (SSMS).
  3. В поле «Проверка подлинности» выберем «Проверка подлинности Windows».
  4. Если вход выполнен успешно, мы сразу можем сменить пароль sa или создать нового пользователя с полными правами.

Если этот вариант не сработал, рассмотрим более глубокие методы управления сервером.

Способ 2: Физическое копирование файлов базы данных (MDF и LDF)

Как совершенно верно подмечено в обсуждении, для манипуляций с базой на уровне файлов пароль sa не требуется. Этот метод является самым быстрым для переноса «битой» базы на другой сервер для последующего анализа и исправления. Разберем этот процесс по шагам:

Шаг 1. Остановка службы SQL Server. Чтобы файлы базы данных разблокировались и их можно было скопировать, необходимо остановить службу экземпляра SQL. Это можно сделать через оснастку services.msc или SQL Server Configuration Manager.

Шаг 2. Поиск файлов. Нам необходимо найти два основных файла:

Обычно они располагаются в каталоге установки SQL Server, например: C:\Program Files\Microsoft SQL Server\MSSQL[Версия].MSSQLSERVER\MSSQL\Data.

Шаг 3. Копирование и перенос. Скопируем эти файлы на новый сервер. Важно помнить: версия SQL Server на целевом сервере должна быть такой же или выше, чем на исходном. Понижение версии (например, с SQL 2014 на SQL 2008) при прямом подключении файлов невозможно.

Шаг 4. Подключение (Attach) базы на новом сервере. На новом сервере, где у нас есть права администратора, воспользуемся командой Attach в SSMS или выполним SQL-скрипт:


USE [master]
GO
CREATE DATABASE [ИмяБазы_Новая] 
ON (FILENAME = 'C:\Path\To\YourBase.mdf'), 
   (FILENAME = 'C:\Path\To\YourBase_log.ldf') 
FOR ATTACH;
GO

Способ 3: Восстановление доступа через однопользовательский режим

Если нам все же необходимо восстановить контроль над текущим сервером без его переустановки, воспользуемся запуском SQL Server с флагом -m. Проанализируем этот алгоритм:

  1. Остановим службу SQL Server.
  2. В параметрах запуска службы (в SQL Server Configuration Manager) добавим параметр -m. Это переведет сервер в однопользовательский режим (Single-User Mode), где любой член локальной группы администраторов Windows имеет права sysadmin.
  3. Запустим службу.
  4. Подключимся через sqlcmd и выполним команду добавления своего пользователя в админы:

EXEC sp_addsrvrolemember 'DOMAIN\User', 'sysadmin';
GO

После этого не забудьте убрать флаг -m и перезапустить службу в обычном режиме.

Борьба с «битостью» базы: почему 1С не загружает данные

Выясним причину, по которой база выгружается в .dt, но не загружается обратно. Часто это происходит из-за того, что в файловом варианте 1С (в котором обычно проверяют «битость») механизмы контроля целостности мягче, чем в MS SQL. При загрузке в SQL сервер пытается создать индексы и накладывает ограничения уникальности. Если в таблице есть дублирующиеся записи, которые там оказаться не должны, процесс обрывается с ошибкой.

Вместо бесконечного «Тестирования и исправления» средствами 1С, которое для базы в 7 Гб может идти несколько суток, эффективнее использовать инструменты SQL. Рассмотрим основные команды для проверки и исправления:

Проверка базы на ошибки: DBCC CHECKDB ('ИмяВашейБазы') WITH NO_INFOMSGS, ALL_ERRORMSGS; Эта команда выведет список всех логических и физических повреждений. Если ошибки обнаружены, SQL Server предложит варианты исправления.

Исправление ошибок (Repair): Для выполнения исправления базу нужно перевести в монопольный режим. Внимание: использование REPAIR_ALLOW_DATA_LOSS может привести к удалению поврежденных данных, поэтому предварительно обязательно сделайте копию файлов MDF/LDF.


ALTER DATABASE [ИмяВашейБазы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DBCC CHECKDB ('ИмяВашейБазы', REPAIR_ALLOW_DATA_LOSS);
GO
ALTER DATABASE [ИмяВашейБазы] SET MULTI_USER;
GO

Практические советы по работе с платформой 1С 8.2

Если вы все же решили использовать файловый вариант (загрузив .dt в локальную базу) для исправления ошибок, обязательно используйте утилиту chdbfl.exe. Она находится в папке bin установленной платформы. Рассмотрим алгоритм действий:

  1. Запустите chdbfl.exe.
  2. Укажите путь к файлу 1Cv8.1CD.
  3. Установите флаг «Исправлять обнаруженные ошибки».
  4. Только после успешного прохождения этой утилиты запускайте Конфигуратор и выполняйте «Тестирование и исправление».

Проанализировав ситуацию, мы видим, что связка 1С и MS SQL предоставляет администратору гораздо больше инструментов для спасения данных, чем файловый вариант. Главное — не ограничиваться только средствами платформы 1С, а активно использовать возможности СУБД для диагностики и восстановления целостности таблиц.

← На главную