В данной статье перечислены наиболее часто возникающие ошибки при работе программ в SQL режиме и описаны способы их устранения.
Содержание
- 1 Недопустимое имя объекта DOCS (или DO1DATA)
- 2 В Альта-ГТД не работает поиск
- 3 Невозможно подключиться к серверу с удаленной машины
- 4 При работе с программой внезапно теряется подключение к серверу
- 5 На локальной (удаленной) машине невозможно подключиться к SQL-серверу (Сервер не найден)
- 6 «Разрешение CREATE DATABASE запрещено в базе данных «master» при создании БД
- 7 «Ошибка операции CREATE DATABASE. Некоторые из перечисленных имен файлов не были созданы» при созднии БД
- 8 «Не удаётся найти указанного поставщика»(или «Не найдена указанная процедура», или «Неизвестное имя класса»,или «Разрушительный сбой»)при подключении к БД
- 9 Locking optimistic failed: user with class identifier…
- 10 Несоответствующий (ошибочный, и т.д.) лог-файл *.ldf
- 11 База данных находится в режиме «Подозрительный»
Недопустимое имя объекта DOCS (или DO1DATA)
Данная ошибка обычно возникает при первичном подключении к базе данных ГТД.
Для устранения ошибки сделайте следующее:
- Откройте SQL Server Managment Studio, подключитесь к серверу
- Откройте файл (Файл — Открыть — Файл) DOCS.SQL (для DO1DATA — DO1DATA.SQL), который находится в папке UTILS с установленной программой ГТД (при установке по умолчанию это C:\Alta)
- Выберите из списка (рядом с кнопкой Выполнить) базу данных, в которой произошла ошибка
- Нажмите кнопку Выполнить
В Альта-ГТД не работает поиск
Возможные проблемы:
- не установлена служба полнотекстового поиска: переустановить SQL сервер, при переустановке не забыть поставить галку на «Компонент Full-Text Search»
- не запущена служба полнотекстового поиска: запустить службу, в параметрах запуска установить Авто
- служба полнотекстового поиска не запускается с ошибкой «Интерфейс не поддерживается», либо такая ошибка выскакивает при поиске: переустановить SQL-сервер
- при поиске выдается сообщение об ошибке «Служба не запущена», хотя она запущена, либо какая то еще ошибка: запустить скрипт FullText.sql (если каталог уже существует, будет выдана ошибка, но это не страшно), затем ConvertFtcLng.sql (выдается сообщение: «Внимание! Таблица или индексированное представление «dbo.Docs» имеет столбцы полнотекстового индекса… » — это нормально)
Невозможно подключиться к серверу с удаленной машины
Возможные проблемы:
- брандмауэр windows или установленный антивирус блокирует порт 1433: все отключить и проверить соединение
- на сервере не включен протокол TCP/IP: открыть Диспетчер конфигурации SQL сервер, включить протокол, перезапустить службу SQL-сервера
При работе с программой внезапно теряется подключение к серверу
Возможные проблемы:
- некорректно работает протокол «Общая память»: в Диспетчере конфигурации отключить протокол Общая память, включить протокол TCP/IP и перезапустить службу SQL-севера
- нарушается таблица маршрутизации вследствии каких-либо причин (н-р установка подключения к интернет через модем): использовать в качестве имени сервера его ip-адрес
- ERRORLOG в папке sql сервера сильно вырос и не может переименоваться на ERRORLOG.1*, для создания нового. Тут, возможно, не хватает прав на внесение изменений в этой папке(необходимо админам проверить), либо кривая установка SQL сервера(Остановить службу SQL сервера и удалить вручную C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG, если не помогло, переустановка).
На локальной (удаленной) машине невозможно подключиться к SQL-серверу (Сервер не найден)
Возможно, установлен именованный instance SQL-сервера: указать в настройках ИМЯ_СЕРВЕРА\ИНСТАНС (обычно это SQLEXPRESS)
«Разрешение CREATE DATABASE запрещено в базе данных «master» при создании БД
У пользователя, под которым было произведено подключение к SQL-серверу, нет прав на создание новой базы данных: необходимо залогиниться под пользователем sa или другим пользователем с правами администратора
«Ошибка операции CREATE DATABASE. Некоторые из перечисленных имен файлов не были созданы» при созднии БД
Проблема: база данных не подключена к серверу, однако сами файлы базы данных по какой то причине присутствуют в системном каталоге DATA SQL-сервера: присоедините базу данных, для чего
- Откройте SQL Server Managment Studio, подключитесь к серверу
- Кликните правой кнопкой мыши по Базам данных, в контекстном меню выберите пункт Присоединить
- В появившемся окне нажмите кнопку Добавить и выберите нужный файл *.mdf, нажмите ОК
- Нажмите ОК
«Не удаётся найти указанного поставщика»(или «Не найдена указанная процедура», или «Неизвестное имя класса»,или «Разрушительный сбой»)при подключении к БД
Проблема: иногда после установки автоматических обновлений Windows (или по другим неустановленным причинам) на компьютере происходит повреждение системных компонентов доступа к базам данных «Microsoft/Windows Data Access Components» (MDAC/WDAC), в частности их составляющих – «ActiveX Data Objects» (ADO) и/или «OLEDB-провайдеров».
Решение:
Поскольку, начиная с Windows XP SP2 и Server 2003, данные компоненты (MDAC) считаются неотъемлемой частью операционной системы, а, начиная с Windows Vista и Server 2008, они переименованы в «Windows Data Access Components» (WDAC) и более не распространяются в виде отдельного инсталлятора, то наилучшим решением является переустановка операционной системы или восстановление ее из резервной копии (при наличии таковой) на состояние до сбоя.
Однако в виду трудоемкости данной операции можно для начала попробовать (на свой страх и риск) более «мягкие» способы решения проблемы, которые будут различаться в зависимости от установленной версии Windows:
Для старых ОС (до Windows XP SP1 включительно): Достаточно просто переустановить компоненты MDAC, скачав инсталлятор с сайта Microsoft.
Для Windows XP SP2/SP3 и Server 2003:
Вариант 1 (только для XP). Воспользоваться вышеупомянутым инсталлятором, однако перед его запуском зайти в свойства файла MDAC_TYP.EXE и включить режим совместимости с Windows 2000. Это позволит избежать сообщения о «несовместимости с данной версией Windows», но по сути будут установлены ровно те же компоненты, что идут в составе Windows XP SP2/SP3.
Вариант 2. Переустановить только компоненты MDAC, используя оригинальный дистрибутив Windows, с которого происходила установка ОС. Для этого, открыть папку C:\Windows\Inf (если ее не видно, включить показ скрытых папок/файлов в «свойствах папки»), нажать правой кнопкой мыши на файле MDAC.INF и выбрать пункт «Установить». При первом запросе «вставить диск» указать путь C:\Windows\ServicePackFiles\i386, при втором – путь к папке i386 дистрибутива Windows, с которого происходила первоначальная установка ОС. Более подробно можно прочитать в статье Microsoft.
Вариант 3 (частичное восстановление!). Скопировать с другого компьютера (где установлена такая же ОС и все работает) содержимое папок:
C:\Program Files\Common Files\System\ado
C:\Program Files\Common Files\System\Ole DB
И зарегистрировать основные DLL командами (Пуск→Выполнить):
regsvr32 «C:\Program Files\Common Files\System\ado\msado15.dll»
regsvr32 «C:\Program Files\Common Files\System\Ole DB\oledb32.dll»
regsvr32 «C:\Program Files\Common Files\System\Ole DB\sqloledb.dll»
Для Windows Vista, Sever 2008 и более поздних:
Для этих ОС изначально не существует отдельно распространяемого инсталлятора WDAC, кроме того, там применяется технология Windows File Protection (WFP), которая защищает системные файлы от любых «несанкционированных» изменений, поэтому единственный возможный способ избежать переустановки системы – это как раз понадеяться, что WFP восстановит поврежденные файлы WDAC.
Чтобы запустить сканирование системы с восстановлением поврежденных файлов надо зайти в меню «Пуск→Все программы→Стандартные», нажать правой кнопкой мыши на пункте «Командная строка» и выбрать «Запуск от имени администратора». В окне командной строки набрать команду и нажать Enter: SFC /SCANNOW
Если ничего не будет восстановлено или это не поможет, то можно попробовать из той же командной строки выполнить регистрацию DLL-файлов, перечисленных в вар.3 предыдущего раздела.
Кроме того, теоретически может помочь откат последних обновлений (которые привели к сбою) и/или установка последнего ServicePack для данной ОС.
- если выше указанные действия не помогли, скопировать целиком обе папки OLEDB и ADO с другой машины с АНАЛОГИЧНОЙ операционкой и также перерегистрировать указанные dll-ки
- установить/переустановить SQL сервер на проблемной машине
- если все перечисленные способы не помогли, попробовать сделать откат системы, либо переустановить операционку
Locking optimistic failed: user with class identifier…
Ошибка означает, что повторно удаляется или записывается одна и та же запись в таблицу SQL. Лечится перезапуском SQL сервера.
Несоответствующий (ошибочный, и т.д.) лог-файл *.ldf
В этом случае необходимо выполнить ОДИН из скриптов. Естественно указав корректный путь к файлу базы и задав нужное имя БД. При этом сам битый файл *.ldf должен отсутствовать
- Первый скрипт:
USE [master] GO EXEC sp_attach_single_file_db @dbname='gtd', @physname=N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\gtd.mdf' GO
- Второй скрипт:
USE [master] GO CREATE DATABASE gtd ON (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\gtd.mdf') FOR ATTACH_REBUILD_LOG GO
База данных находится в режиме «Подозрительный»
Необходимо выполнить скрипт (заменить везде название базы, если она отличается от gtd):
alter database gtd set emergency alter database gtd set single_user go DBCC CHECKDB (gtd, REPAIR_ALLOW_DATA_LOSS) with NO_INFOMSGS go alter database gtd set multi_user go
T-SQL | ||
|
выдает такую ошибку
Сообщение 5133, уровень 16, состояние 1, строка 2
Поиск каталога для файла «C:\Users\User\Documents\SQL Server Management Studio\Projects\ShopDB.mdf» не удался, вызвав ошибку операционной системы 5(Отказано в доступе.).
Сообщение 1802, уровень 16, состояние 1, строка 2
Ошибка операции CREATE DATABASE. Некоторые из перечисленных имен файлов не были созданы. Проверьте связанные ошибки.
как исправить?
При выполнении следующего SQL-оператора
USE master; GO CREATE DATABASE FortsReplication_FutTrade ON PRIMARY (NAME = Arch1, FILENAME = 'C:\FortsReplicationData\FortsReplication_FutTrade\FutTradeDat1.mdf', SIZE = 100MB, MAXSIZE = 1000, FILEGROWTH = 50), ( NAME = Arch2, FILENAME = 'C:\FortsReplicationData\FortsReplication_FutTrade\FutTradeDat2.ndf', SIZE = 100MB, MAXSIZE = 1000, FILEGROWTH = 50), ( NAME = Arch3, FILENAME = 'C:\FortsReplicationData\FortsReplication_FutTrade\FutTradeDat3.ndf', SIZE = 100MB, MAXSIZE = 1000, FILEGROWTH = 50) LOG ON (NAME = Archlog1, FILENAME = 'C:\FortsReplicationData\FortsReplication_FutTrade\FutTradeLog1.ldf', SIZE = 100MB, MAXSIZE = 500, FILEGROWTH = 50), (NAME = Archlog2, FILENAME = 'C:\FortsReplicationData\FortsReplication_FutTrade\FutTradeLog2.ldf', SIZE = 100MB, MAXSIZE = 500, FILEGROWTH = 50) ; GO
возникла следующая ошибка:
Сообщение 5133, уровень 16, состояние 1, строка 1
Поиск каталога для файла «C:\FortsReplicationData\FortsReplication_FutTrade\FutTradeDat1.mdf» не удался, вызвав ошибку операционрной системы 2 (Не удается найти указанный файл)
Сообщение 1802, уровень 16, состояние 1, строка 1
Ошибка операции CREATE DATABASE. Некоторые из перечисленных имен файлов не были созданы. Проверьте связанные ошибки.
Из за чего это может быть?
-
Изменено
12 июня 2012 г. 3:44
December 13, 2018
MSSQL
ERROR MESAGGE:
CREATE DATABASE failed. Some file names listed could not be created. Check related errors. Cannot create file ‘C:\Program Files\Microsoft SQL Server\MSSQL.x\MSSQL\DATA\<file_name>’ because it already exists. Change the file path or the file name, and retry the operation. (Microsoft SQL Server, Error: 1802)”</file_name>
EXPLANATION:
You may experience this error when creating a database.
Consider the following scenario:
You have a database named “xxx”. By default, if you don’t specifically specify it, the data file name of this database is “xxx.mdf” and the name of the log file is “xxx_log.ldf”.
You want to create one more from the database named “xxx”, but you want to keep the one already created.
For this, you are changing the name of the old “xxx” database to “xxx_old”. But in this case, only the logical name of the database has changed. So the file names remain the same.
The name of the database that you are trying to create is “xxx”, so the file names are identical to the file names of the previously created “xxx” database, so you get errors.
SOLUTION:
If you are trying to create your database using SQL Server Management Studio, you can resolve this issue by specifying the file names yourself as you see below.
If you are creating your database with the CREATE DATABASE command, you can specify the file name as you see in the sample script below.
CREATE DATABASE [xxx] ON PRIMARY (NAME = N‘xxx_new’, FILENAME = N‘C:\Program Files\Microsoft SQL Server\MSSQL.x\MSSQL\DATA\xxx_new.mdf’ , SIZE = 3072KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N‘xxx_log_new’, FILENAME = N‘C:\Program Files\Microsoft SQL Server\MSSQL.x\MSSQL\DATA\xxx_log_new.ldf’ , SIZE = 1024KB , FILEGROWTH = 10%) |
- Download the script from this Microsoft Site
- Run it as Administrator
- Follow the instructions and your set.
UPDATE 9/3/2014
The Microsoft URL above is no longer valid, someone thou took the time to save it to GitHubGist and the link is as follows https://gist.github.com/wadewegner/1677788
UPDATE 11/1/2021
Below is the entire script, don’t recall being able to do this back in 2014, I guess this one of the perks of 2021.
@echo off
rem
rem ****************************************************************************
rem
rem Copyright (c) Microsoft Corporation. All rights reserved.
rem This code is licensed under the Microsoft Public License.
rem THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
rem ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
rem IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
rem PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
rem
rem ****************************************************************************
rem
rem CMD script to add a user to the SQL Server sysadmin role
rem
rem Input: %1 specifies the instance name to be modified. Defaults to SQLEXPRESS.
rem %2 specifies the principal identity to be added (in the form "<domain>\<user>").
rem If omitted, the script will request elevation and add the current user (pre-elevation) to the sysadmin role.
rem If provided explicitly, the script is assumed to be running elevated already.
rem
rem Method: 1) restart the SQL service with the '-m' option, which allows a single connection from a box admin
rem (the box admin is temporarily added to the sysadmin role with this start option)
rem 2) connect to the SQL instance and add the user to the sysadmin role
rem 3) restart the SQL service for normal connections
rem
rem Output: Messages indicating success/failure.
rem Note that if elevation is done by this script, a new command process window is created: the output of this
rem window is not directly accessible to the caller.
rem
rem
setlocal
set sqlresult=N/A
if .%1 == . (set sqlinstance=SQLEXPRESS) else (set sqlinstance=%1)
if /I %sqlinstance% == MSSQLSERVER (set sqlservice=MSSQLSERVER) else (set sqlservice=MSSQL$%sqlinstance%)
if .%2 == . (set sqllogin="%USERDOMAIN%\%USERNAME%") else (set sqllogin=%2)
rem remove enclosing quotes
for %%i in (%sqllogin%) do set sqllogin=%%~i
@echo Adding '%sqllogin%' to the 'sysadmin' role on SQL Server instance '%sqlinstance%'.
@echo Verify the '%sqlservice%' service exists ...
set srvstate=0
for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j
if .%srvstate% == .0 goto existerror
rem
rem elevate if <domain/user> was defaulted
rem
if NOT .%2 == . goto continue
echo new ActiveXObject("Shell.Application").ShellExecute("cmd.exe", "/D /Q /C pushd \""+WScript.Arguments(0)+"\" & \""+WScript.Arguments(1)+"\" %sqlinstance% \""+WScript.Arguments(2)+"\"", "", "runas"); >"%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js"
call "%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js" "%cd%" %0 "%sqllogin%"
del "%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js"
goto :EOF
:continue
rem
rem determine if the SQL service is running
rem
set srvstarted=0
set srvstate=0
for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j
if .%srvstate% == .0 goto queryerror
rem
rem if required, stop the SQL service
rem
if .%srvstate% == .1 goto startm
set srvstarted=1
@echo Stop the '%sqlservice%' service ...
net stop %sqlservice%
if errorlevel 1 goto stoperror
:startm
rem
rem start the SQL service with the '-m' option (single admin connection) and wait until its STATE is '4' (STARTED)
rem also use trace flags as follows:
rem 3659 - log all errors to errorlog
rem 4010 - enable shared memory only (lpc:)
rem 4022 - do not start autoprocs
rem
@echo Start the '%sqlservice%' service in maintenance mode ...
sc start %sqlservice% -m -T3659 -T4010 -T4022 >nul
if errorlevel 1 goto startmerror
:checkstate1
set srvstate=0
for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j
if .%srvstate% == .0 goto queryerror
if .%srvstate% == .1 goto startmerror
if NOT .%srvstate% == .4 goto checkstate1
rem
rem add the specified user to the sysadmin role
rem access tempdb to avoid a misleading shutdown error
rem
@echo Add '%sqllogin%' to the 'sysadmin' role ...
for /F "usebackq tokens=1,3" %%i in (`sqlcmd -S np:\\.\pipe\SQLLocal\%sqlinstance% -E -Q "create table #foo (bar int); declare @rc int; execute @rc = sp_addsrvrolemember '$(sqllogin)', 'sysadmin'; print 'RETURN_CODE : '+CAST(@rc as char)"`) do if .%%i == .RETURN_CODE set sqlresult=%%j
rem
rem stop the SQL service
rem
@echo Stop the '%sqlservice%' service ...
net stop %sqlservice%
if errorlevel 1 goto stoperror
if .%srvstarted% == .0 goto exit
rem
rem start the SQL service for normal connections
rem
net start %sqlservice%
if errorlevel 1 goto starterror
goto exit
rem
rem handle unexpected errors
rem
:existerror
sc query %sqlservice%
@echo '%sqlservice%' service is invalid
goto exit
:queryerror
@echo 'sc query %sqlservice%' failed
goto exit
:stoperror
@echo 'net stop %sqlservice%' failed
goto exit
:startmerror
@echo 'sc start %sqlservice% -m' failed
goto exit
:starterror
@echo 'net start %sqlservice%' failed
goto exit
:exit
if .%sqlresult% == .0 (@echo '%sqllogin%' was successfully added to the 'sysadmin' role.) else (@echo '%sqllogin%' was NOT added to the 'sysadmin' role: SQL return code is %sqlresult%.)
endlocal