ВАШЕ ЗРЕНИЕ ПОДВОДИТ ВАС? КРУТИТЕ КОЛЕСО МЫШИ, УДЕРЖИВАЯ CTRL

FAQ по администрированию 1С и MS SQL Server

1. Что такое SQL Server Enterorise Manager?
2. Что такое QA?
3. Что такое BOL?
4. Какие особенности 1С при доступе к MS SQL Server 2000?
5. Как установить или конвертировать конфигурацию с dbf версии в SQL версию базы данных?
6. Как изменить тип авторизации доступа к SQL Server?
7. Как создать базу для 1С на SQL Server?
8. Как поменять владельца базы SQL?
9. Как переиндексировать базу на MS SQL Server?
10. Как проверить (восстановить) базу на MS SQL Server средствами сервера
11. Как упаковать (зашринковать) базу на MS SQL Server?
12. Как упаковать (дефрагментировать) индексы базы на MS SQL Server?
13. Как уменьшить рост журнала транзакций базы на MS SQL Server?
14. Как скопировать базу 1С, работающую с базой БД в формате MS SQL Server?
15. Как изменить место размещения файлов базы tempdb MS SQL Server?
16. Как узнать логин и пароль подключения 1С к MS SQL Server?
17. Как узнать размер таблиц в базе данных MS SQL Server
18. При старте 1С, или при попытке открытия конфигурации выдается сообщение "SQL State: 24000 Native: 0 Message: [Microsoft] [ODBC SQL Server Driver] Invalid cursor state"
19. При попытке монопольно войти в 1С или при записи конфигурации выдается сообщние "База данных не может быть открыта в однопользовательском режиме"
20. Как узнать какой сервис-пак установлен на SQL Server 2000 или SQL Server 2005
21. Как решить проблемы с памьятью. 1 - Windows Server не видит больше 4 GB ОЗУ, 2 SQL Server не может использовать больше 2 GB.
22. Медленно работает 1С по сети с базой на SQL Server
23. После установки на SQL Server 2000 Service Pack 4 SQL стал медленне работать и меньше загружать память
24. После установки на SQL Server 2000 проведение документов замедлилось
25. Не могу подключиться к SQL серверу
26. По каким то причина SQL Server очень медленно работает
27. При попытке подключения к SQL2005 выдается сообщение "Требуется ms sql server версии 6.5 + service pack 5a или более старшая версия"
28. Как подключиться к SQL2005 по IP адресу а не по имени сервера
29. Как получить имя пользователя, который занимает много процессорного времени SQL-Server
30. Как сделать чтобы 1С подключался к SQL не под одним логином (SQL аутентификация), а под логинами Windows (Windows аутотентификация)
31. Работа 1С v77 под Vista и MS SQL 2005
32. При подключении 1С возникате ошибка "SQL State 42000. Native 7202. ... SQL Server Could not find serve 'ServerName' ..."
33. Как создать дополнительные индексы для таблиц
34. Если вы не нашли желаемого ответа


1. Что такое SQL Server Enterorise Manager?

Это приложение с графическим интерфейсом для администрирования и настройки MS SQL Server 2000, а также управления серверами и базами данных MS SQL. Запускается или через меню Пуск:: Программы - Microsoft SQL Server - Enterprise Manager (в случае стандартной установки группы прогамм MS SQL Server 2000). Или же через стандартную консоль Управление компьютером (Computer Management).

2. Что такое QA?

QA - Query Analyzer - приложения для работы с базами данных SQL на языке Transact SQL. Запускается или с пункта меню "Программы - Microsoft SQL Server - Query Analyzer" (в случае стандартной установки группы прогамм MS SQL Server 2000). Другим способом является запуск из SQL Server Enterorise Manager через меню Tools. Также можно запустить через командную строку, выполнив "Пуск - Выполнить - isqlw.exe".

3. Что такое BOL?

BOL - SQL Server Books Online - Справочное руководство по языку Transact-SQL (и не только). Вызвать можно или с Query Analyzer нажав Shift+F1 (или через меню Help - Transact-SQL Help). Или же через меню Пуск: Программы - Microsoft SQL Server - Books Online (в случае стандартной установки группы прогамм MS SQL Server 2000).

4. Какие особенности 1С при доступе к MS SQL Server 2000?

В случае работы 1С с форматом базы MS SQL все данные можно условно разделить на 2 логичные части: 1 - хранящиеся в базе данных MS SQL Server; 2 - хранящиеся в виде файлов, необходимых для работы конфигурации 1С.
С первым типом файлов 1С работает c MS SQL Server посредством ODBC, большая часть запросов, посылаемых 1С к серверу храниться в файле BkEnd.dll. Некоторые хранимые процедуры для работы с таблицами базы данных хранятся в файле 1Cv7.DDS (в каталоге программы).
Со вторым типом данных 1С работает непосредственно как с файлами. Эти файлы, хранятся в каталоге базы данных. Основные с них это: 1Cv7.MD - файл с метаданными, в нем храниться все то что можно посмотреть в Конфигураторе, 1Cv7.DDS - файл описание метаданных, в этом файле хранится описание таблиц базы данных MS SQL Server, а также хранимые процедуры, 1Cv7.DBA - файл с описанием настроек доступа к MS SQL Server-у, имя сервера, логин и пароль, usrdef\users.usr - файл описания пользователей 1С.
Как видно, даже при работе с базой в формате MS SQL Server, для работы с базой данных надо указывать и каталог базы данных как в случае и с dbf-форматом базы данных для хранения файлов, в которых описана конфигурация и в которых храниться описание данных и доступа к базе. Это с одной стороны заводит в заблуждение, что для работы с форматом MS SQL Server вся база храниться на сервере, на самом деле на сервере хранятся только данные, а метаданные хранятся в виде файла, отдельно. Это оплошность 1С исправила в версии 8.0, но в 7.7 приходиться работать с тем что есть.

5. Как установить или конвертировать конфигурацию с dbf версии в SQL версию базы данных?

1. Надо иметь приложение 1С, поддерживающую работу с SQL Server. Рекомендуется использовать релизы 15 или 25 (15 более медленный, и не поддерживает конвертацию данных в 1С 8.0). Основные отлияия SQL версии приложения 1С, это название запускаемого файла 1cv7s.exe и характерное окно выбора формата хранения данных, где можно выбрать форматы: Файлы *.DBF;*CDX или MS SQL Server.
2. Еслу уже имеется база (с какими то заполненными данными), то предварительно надо выгрузить эти данные. Это делается из меню Конфигуратора: Администрирование - Выгрузить данные.
3. Создать базу в SQL Server Enterorise Manager. Закрыть SQL Server Enterorise Manager.
4. Создать базу в 1С в режиме Конфигуратора, выбрать тип хранения данных - MS SQL Server.
5. Создать в Конфигураторе пользователя.
6. Определить параметры доступа к MS SQL Server с Конфигуратора: Меню - Администрирование - Параметры базы данных SQL... .
7. Выполнить загрузку данных, елси есть выгрузка: Меню - Администрирование - Загрузить данные.
8. Если данных нет - создать метаданные конфигурации или загрузить измененую конфигурацию.
Необходимо учитывать, что при стечении некоторых обстоятельств, данные могут не загружаться в MS SQL Sever (например длинные строки в отборах или дубли данных в индексных полях), для таких случаев описание будет отдельное, или же можно поискать в интернете описание подобных ошибок.

6. Как изменить тип авторизации доступа к SQL Server?

Вся проблема в том, что 1С подключается к MS SQL Server только под логином SQL и авторизацией MS SQL Server а Windows. Если при установке был выбран режим авторизации только Windows (Windows only) - то подключиться 1С к базе в таком случае не сможет. Для того чтобы изменить тип авторизации надо открыть SQL Server Enterorise Manager, развернуть в левом углу группу "Concole Root - Microsoft SQL Servers", развернуть SQL Server Group, выбрать необходимый сервер (соответствует или имени компьютера или (local) - для локального сервера). Если серверов нет - надо зарегистрировать новый сервер, выбрав из меню Action - New SQL Server Registration... . После выбора сервера надо через меню Action выбрать пункт меню Properties (или через контекстное меню). В появишемся окне "SQL Server Properties (Configure)" надо перейти на закладку Security, в группе Security изменить Authentication на SQL Server and Windows. Перезапустить сервис (Управление комьютером - сервисы и приложения - сервисы - MSSQLSERVER - перезапустить), или перегрузить компьютер с установленным MS SQL Server.

7. Как создать базу для 1С на SQL Server

Есть как минимум 2 способа создания базы. 1 - посредством графического интерфейса SQL Server Enterorise Manager. Для создания базы, необходимо выбрать сервер, на котором будет создана база. Установить курсор на Databases, выбрать через контекстное меню или через меню Action пункт "New database...". На закладке General ввести имя базы (например base_1c), на закладке Data Files скорректировать путь на файл данных (поле location), точно также на закладке Transaction Log можно скорректировать путь для файла транзакций. Опыт показывает, что если эти 2 файла (данных и транзакций) хранятся на разных физических дисках - то скрость системы повышается (при условии что скорость дисков также сопоставима).
Второй метод - выполнив инструкцию на языке Transact-SQL (например с QA)
CREATE DATABASE [base_1c] ON (NAME = N'base_1c_Data',

FILENAME = N'D:\SQLDATA\base_1c_Data.MDF' , SIZE = 10, FILEGROWTH = 10%)

LOG ON (NAME = N'base_1c_Log', FILENAME = N'D:\SQLDATA\base_1c_Log.LDF' ,

SIZE = 2, FILEGROWTH = 10%)

COLLATE Cyrillic_General_CI_AS
где base_1c - имя базы данных, D:\SQLDATA\ - путь к каталогу файлов базы данных и файла тразакций.

8. Как поменять владельца базы SQL

Доступ к базе с 1С возможен только под владельцем базы. для того чтобы поменять влядальце, надо в QA выполнить следующий код:
use base_1c

EXEC sp_changedbowner 'user1c'
где base_1c - имя базы данных, user1c - имя пользователя, котороый должен стать владельцем базы.

9. Как переиндексировать базу на MS SQL Server

Данная информация находилась по адресу: http://www.perlscript.ru , сейчас находится по адресу: http://www.softpoint.ru
Чтобы произвести переиндексацию необходимо выполнить такой запрос (например в QA):
USE base_1c

EXEC _1sp_DBReindex
где base_1c - имя базы данных.
Если хранимой процедуры _1sp_DBReindex нет в базе данных (база не 1С), то можно выполнить такой код (это и есть код хранимой процедуры _1sp_DBReindex):
USE base_1c

DECLARE @TableName char(32)

DECLARE SysCur CURSOR FOR SELECT name FROM sysobjects WHERE type='U'

OPEN SysCur

FETCH NEXT FROM SysCur INTO @TableName

WHILE @@FETCH_STATUS=0 BEGIN

DBCC DBREINDEX(@TableName)

FETCH NEXT FROM SysCur INTO @TableName

END

CLOSE SysCur

DEALLOCATE SysCur
где base_1c - имя базы данных.
Соответсвенно код для создания хранимой процедуры:
if exists (select * from sysobjects where id = object_id('dbo._1sp_DBReindex') and sysstat & 0xf = 4)

drop procedure dbo._1sp_DBReindex

CREATE PROCEDURE _1sp_DBReindex AS

SET NOCOUNT ON

DECLARE @TableName char(32)

DECLARE SysCur CURSOR FOR SELECT name FROM sysobjects WHERE type='U'

OPEN SysCur

FETCH NEXT FROM SysCur INTO @TableName

WHILE @@FETCH_STATUS=0 BEGIN

DBCC DBREINDEX(@TableName)

FETCH NEXT FROM SysCur INTO @TableName

END

CLOSE SysCur

DEALLOCATE SysCur

10. Как проверить (восстановить) базу на MS SQL Server средствами сервера

Информация находится по адресу: 1csql.ru/materials/faq/admin.html
Проверку логической целостности нужно выполнять штатными средствами 1С:Предприятия (Тестирование и исправление ИБ). В случае, если такую проверку не удается выполнить, следует проверить физическую целостность БД средствами MS SQL. Для проверки целостности средствами MS SQL нужно выполнить следующую команду:
DBCC CHECKDB ('<имя базы>',REPAIR_REBUILD)
Перед выполнением этой команды нужно базу данных перевести в режим "single user":
sp_dboption '<имя базы>','single user',true
В процессе работы DBCC CHECKDB могут быть обнаружены ошибки и часть может быть сразу же исправлена. Если ошибки остались, то по всей видимости их нельзя восстановить без потери некоторых данных. В этом случае нужно запустить DBCC CHECKDB с параметром REPAIR_ALLOW_DATA_LOSS (перед запуском желательно сделать копию файлов базы данных).
DBCC CHECKDB ('<имя базы>',REPAIR_ALLOW_DATA_LOSS)
После выполнения DBCC CHECKDB нужно не забыть вернуться в нормальный режим (выйти из режима "single user"):
sp_dboption '<имя базы>','single user',false
Переиндексацию базы данных на MS SQL не нужно делать так часто, как в случае с DBF-версией 1С:Предприятия (например, при аварийном завершении работы пользователя). MS SQL автоматически поддерживает индексы в актуальном состоянии. Пересоздавать индексы имеет смысл в одном из следующих случаев:
1) Индекс физически поврежден. Это случается довольно редко и для восстановления нужно использовать вышеупомянутый DBCC CHECKDB.
2) Страницы индекса сильно фрагментированы и требуется их упорядочить.
3) Нужно изменить степень заполнения индексных страниц (fill factor).
4) Требуется изменить тип индекса (кластерный/некластерный). При использовании 1С это обычно неактуально.
Переиндексация была рассмотрена в 9 пункте.

11. Как упаковать (зашринковать) базу на MS SQL Server

Упаковать базу данных можно или с помощью графического интерфейса приложения SQL Server Enterorise Manager, или с помощью выполнения кода (например с QA).
Первый случай выполняется посредством вызова контекстного меню на необходимой базе и выбора All Tasks - Shrink Database... .
Второй случай опишем несколько подробнее. В приведенном коде выполняется 4 строки кода. 1 строка - усечение всей базы. 2 строка - усечение только DATA файла до размера 101 мб. 3 строка - усечение только файла транзакций до размера 0 мб (несколько килобайт). 4 - строка - очистка журнала транзакций (иногда файл транзакций усечь невозможно, по причине заисших открітіх транзакций, выполнение этой команды должно привести до полной очистки журнала транзакций).
DBCC shrinkdatabase(N'base_1c', TRUNCATEONLY )

use [base_1c] DBCC SHRINKFILE (N'base_1c_Data', 101)

use [base_1c] DBCC SHRINKFILE (N'base_1c_Log', 0)

DUMP TRANSACTION base_1c WITH TRUNCATE_ONLY
где base_1c - имя базы данных.
Если приведенный више код не привел к требуемым результатам, можно попробовать выполнить следующий код:
use [base_1c]

BACKUP LOG base_1c WITH TRUNCATE_ONLY

GO

DUMP TRANSACTION base_1c WITH no_log

GO

CHECKPOINT

GO

DBCC SHRINKFILE(base_1c_log,2)

GO

DBCC SQLPERF (logspace)
где base_1c - имя базы данных. Последняя строка - получение таблицы с информацией о занимаемом месте и свободном метсе в файле транзакций.

12. Как упаковать (дефрагментировать) индексы базы на MS SQL Server

Данная информация находилась по адресу: http://www.perlscript.ru , сейчас находится по адресу: http://www.softpoint.ru
Хотя SQL Server и следит за скоростью работы индексов, но все же есть часть работы, которую придеться делать вручную для повышения производительности доступа к данным. К этим работам относится и упаковка индексов внутри базы SQL Server. Для выполнения упаковки предусметрена команда DBCC INDEXDEFRAG. Эта команда позволяет дефрагментировать каждый индекс, причем не блокируя данные, что позволяет делать это почти прозрачно для пользователей (почти, так как системные ресурсы для этой операции все равно требуются и возможно, что работа пользователей может значительно замедлиться). Также дефрагментация индексов может привести к уменьшению занимаемого места таким индексом (это будет временным уменьшением, так как при дальнейшей работе SQL Server все равно увеличит место занимаемое индексами).
Чтобы произвести переиндексацию необходимо выполнить такой запрос (например в QA):
USE base_1c

DECLARE @MyTable varchar(32)

DECLARE @MyIndex varchar(32)

DECLARE MyCursor CURSOR FOR

SELECT o.name, i.name

FROM sysobjects o INNER JOIN sysindexes i ON o.id = i.id

WHERE (o.xtype = 'U') AND (INDEXPROPERTY(i.id, i.name, 'isStatistics') = 0) AND (i.dpages > 0)

ORDER BY o.name, i.indid

OPEN MyCursor

FETCH NEXT FROM MyCursor INTO @MyTable, @MyIndex

WHILE @@FETCH_STATUS=0

BEGIN

PRINT 'Дефрагментация индекса '+@MyIndex+' из таблицы '+@MyTable

DBCC INDEXDEFRAG (0,@MyTable,@MyIndex)

FETCH NEXT FROM MyCursor INTO @MyTable, @MyIndex

END

CLOSE MyCursor

DEALLOCATE MyCursor


где base_1c - имя базы данных. Результатом выполнения будут таблицы для каждого индекса с ифномарцией о количестве просканированных страниц, количестве перемещенных страниц и удаленных страниц.

13. Как уменьшить рост журнала транзакций базы на MS SQL Server

Данная информация находилась по адресу:perlscript.ru , сейчас находится по адресу: softpoint.ru .
Для того чтобы файл транзакций не рос очень стремительно, надо в свойствах базы данных установить режим "Simple" поля Recovery закладки Options окна свойств базы данных.

14. Как скопировать базу 1С, работающую с базой БД в формате MS SQL Server?

Есть как минимум 3 способа это сделать.
  1. Сделать выгрузку/загрузку в режиме Конфигуратора. Этот способ наиболее длительный, и в тоже время делать эту процедуру можно делать лишь тогда, когда другие пользователи не работают в 1С с требуемой базой. Методика того как это делается подробно описана в литературе, поставляемой с коробоынми вариантами 1С. Отмечу лишь что технология загрузки почти ничем не отличается от описанной в пункте 5 "Как установить или конвертировать конфигурацию с dbf версии в SQL версию базы данных" методики.
  2. Скопировать каталог базы данных 1С и скопировать файлы базы данных SQL. Этот способ является наименее временизатратным (тратится время только на дисковые операции копирования). Но выполнять его также можно лишь тогда, когда с базой 1С никто не работает. Описание процесса:

    скопировать каталог базы данных 1С;

    сделать Detach Database. Заходим в Enterprise Manager, выбираем необходимый сервер и базу данных. Вызываем контекстное меню (или меню Action главного меню) - Tools - All Tasks - Detach Database ...:

    В появившемя окне:

    1 - Connections using this database: показывает сколько сейчас подключено пользователей к базе SQL. Если значение 0 - никто не подкючен и можно спокойно отключить базу. Если же подключения есть - то перед тем как нажать кнопку OK, надо будет очистить подключения (отключить пользователей, в 1С в таких случаях 1С закрывается с сообщением о невосстановимой ошибке базы данных). Отключение пользователей производится нажатием на кнопку Clear (этот процес может длиться несколько минут).

    скопировать файлы базы SQL (mdf, ldf).

    сделать Atach Database для отключенной базы ранее. Заходим в Enterprise Manager, выбираем необходимый сервер и становимся на ветку дерева Databases. Вызываем контекстное меню (или меню Action главного меню) - Tools - All Tasks - Atach Database ...:

    в появившемся окне в поле "MDF file of database to atach:" надо внести полный путь к файлу MDF базы данных (или выбрать этот файл нажав на кнопку выбора файла слева от этого поля).

    сделать Atach Database для новой базы. Заходим в Enterprise Manager, выбираем необходимый сервер и становимся на ветку дерева Databases. Вызываем контекстное меню (или меню Action главного меню) - Tools - All Tasks - Atach Database ...:

    в появившемся окне:

    1 - выбераем место положения скопированного файла MDF; 2 - задаем новое имя для базы данных (обязательно); 3 - при желании указываем кто будет владельцем (db_owner) базы данных (под каким логином будет 1С соединятся с базой данных SQL)

    в режиме Конфигуратора подключаемся к скопрированному каталогу БД. Входим в меню Администрирование - Парамтеры базы данных SQL и в появившемся окне в поле "База данных" необходимо внести новое имя базы данных, а при условии изменения владельца базы данных указать и имя нового владельца в поле "Пользователь".
  3. Сделать Backup/Restore Database... средствами SQL. Этот процесс длительне чем второй, но бвстрее чем первый. К тому же делать процедуру Backup можно и тогда, когда с базой работают пользователи. Процедура Backup-а несложная, поэтому информация предствалена вкратце. Заходим в Enterprise Manager, выбираем необходимый сервер и базу данных. Вызываем контекстное меню (или меню Action главного меню) - Tools - All Tasks - Backup Database. В появившемся окне SQL server Backup на вкладке General в группе Destination надо выбрать путь, куда будет сохранена база данных. Если в списке Backup To нет ни одной записи - надо добавить ее с помощmю кнопки Add вызвать окно "Select Backup Destination" и в нем указать файл, куда необходимо сохранить базу. Необходимо учесть, что путь является полным и должен включать и имя файла. После заполнения необходимых полей жмем кнопку OK в окне "SQL Server Backup - ...". А вот процедура восстановления требует более детального рассмотрения. На первой закладке выбераем "From Device", а также в поле "Devices" выбираем файл, с которого надо восстановить данные:

    На второй закладке "Options" необходимо выбрать "Force restore over existing database" (1). Также необходимо изменить полный путь к фацлу данных (mdf) и к файлу транзакций (ldf), на пути к базе в которую происходит восстановление:

15. Как изменить место размещения файлов базы tempdb MS SQL Server

Данная информация находилась по адресу: http://www.perlscript.ru , сейчас находится по адресу: http://www.softpoint.ru .
Очень часто SQL Server устанавливается по умолчанию и все системные базы (в том числе и база временных таблиц) размещается на системном диске. После установки изменить расположение файлов базы tempdb с помощью графического интерфейса SQL Server Enterorise Manager - не предоставляется возможным, но это можно реализовать с помощью выполнения SQL кода с того же QA.
USE master

GO

ALTER DATABASE TEMPDB

MODIFY FILE (NAME='tempdev', FILENAME='D:\SQLDATA\tempdb.mdf')

GO

ALTER DATABASE TEMPDB

MODIFY FILE (NAME='templog', FILENAME='D:\SQLDATA\templog.ldf')

GO
где D:\SQLDATA\- каталог в котором будут размещаться файлы базы tempdb. После выполнения приведенного выше кода, надо перезапустить SQL Server (процедура описана в пункте 6), или же остановить SQL Server и запустить его заново (что по сути равносильно).

16. Как узнать логин и пароль подключения 1С к MS SQL Server

К сожалению автор этой идеи неизвестен.
Эти данные храняться в файле 1Cv7.DBA. Этот файл привязан к файлу usrdef\users.usr (вот поэтому и надо создать хотя бы одного пользователя в конфигураторе), и если вдруг надо будет изменить этот файл (ну например кто то забыл пароль администратора) и это сделать в другой базе, то привязка потеряется, и информацию о параметрах подключения 1С к SQL Server прочесть уже не удастся. Решение этой проблемы как всегда простое - все данные по доступу к SQL Server хранятся в файле 1Cv7.DBA. Они там не в октрытом виде, но и не зашифрованы 128 битным ключом по методу md5. Вся защита основана на простеньком XOR. Если у кого есть желание, можете сами написать метод шифрования, только вот зачем, если есть уже говотовые решения.
Function XOR(Val ParA, Val ParB)

Res = 0;

Koef = 1;

For BitNumber = 1 To 8 Do

BitA = ParA % 2;

BitB = ParB % 2;

ParA = Int(ParA / 2);

ParB = Int(ParB / 2);

BitC = (BitA + BitB) % 2;

Res = Res + BitC * Koef;

Koef = Koef * 2;

EndDo;

Return Res;

EndFunction



// индексы значений с списке

// server = 2, db = 4, uid = 6, pwd = 8, checksum = 10

Function ConnectionString() export

Var SQLKeyCode[36], ConnectCode[200];

ConnectFile = IBDir() + "1Cv7.DBA";

If FS.ExistFile(ConnectFile) = 0 Then

Message("Это не SQL - база!", "!");

Return (0);

EndIF;

FSO = CreateObject("Scripting.FileSystemObject");

F = FSO.OpenTextFile(ConnectFile, 1);

ConnectLen = 0;

While F.AtEndOfStream = 0 Do

ConnectLen = ConnectLen + 1;

ConnectCode[ConnectLen] = Asc(F.Read(1));

EndDo;

F.Close();

FSO = 0;

SQLKey = "19465912879oiuxc ensdfaiuo3i73798kjl";

For i = 1 To 36 Do

SQLKeyCode[i] = Asc(Сред(SQLKey, i, 1));

EndDo;

Connect = "";

For i = 1 To ConnectLen Do

Connect = Connect + Chr(XOR(ConnectCode[i], SQLKeyCode[(i - 1) % 36 + 1]));

EndDo;

vl=createobject("ValueList");

Connect=StrReplace(Connect,"{","");

Connect=StrReplace(Connect,"}","");

vl.fromSeparatedString(Connect);

return (vl);

EndFunction



if ExclusiveMode()=0 then

if FS.ExistFile(IbDir()+"1cv7.dds")=1 then

constr=ConnectionString();

if ConStr<>0 then

server=constr.getValue(2);database=constr.getValue(4);uid=constr.getValue(6); pwd=constr.getValue(8);
Можно воспользоваться и готовой обработкой.

17. Как узнать размер таблиц в базе данных MS SQL Server

Автор этой разработки Антон Гусев, первоначально она была размещена на сайте http://www.perlscript.ru. Для работы с 1С++ были внесены незначительные изменения. Обработку можно скачать здесь. Результат выполнения вот:

18. При старте 1С, или при попытке открытия конфигурации выдается сообщение "SQL State: 24000 Native: 0 Message: [Microsoft] [ODBC SQL Server Driver] Invalid cursor state"

Такое сообщение в моей практике встречалось при попытке подключиться к базе SQL под логином, отличным от владельца (DB OWNER). Надо или поменять имя пользователя в настройках Параметры базы данных SQL, или поменять владельца базы (8 пункт на этой страничке). Также такое ссобщение может появлятся при некорректном завршении предыдущего монопольного подключения (например в момент реструктуризации базы), в таком случае обычно помогает restart SQL сервера.

19. При попытке монопольно войти в 1С или при записи конфигурации выдается сообщние "База данных не может быть открыта в однопользовательском режиме"

Причиной такого поведения 1С есть невозможность захватить базу данных в монопольном режиме (так называемый режим Single User). Это может произойти по нескольким причинам. 1 - есть другое приложение, которое в данный момент подключено к базе, которая является базой SQL для 1С. в таком случае это приложение надо или закрыть или же открыть в нем другую базу (например в Query Analiser-е использовать команду USE Master). Если таким приложений нет (которые явно могли присоединиться к базе), можно попробовать остановить и снова запустить SQL Server (или перегрузить сервер, на котором находиться SQL база и SQL сервер). 2 - произошел сбой во время работы с базой данных в монопольном редиме с аварийным отключением соединения. При таком стечении обстоятельств, перезапуск SQL сервера не поможет. Необходимо удалять ссылки на зависшые процессы. Чтобы этого не делать, можно отключить базу (сделать Detach) и обратно подключить под другим именем (поле Attach as), после чего надо изменить настройки подключения и в Конфигураторе для текущей базы 1С (в качестве базы SQL указать базу с новым именем).

20. Как узнать какой сервис-пак установлен на SQL Server 2000 или SQL Server 2005

Первоисточник: support.microsoft.com/default.aspx?scid=kb;en-us;q321185
Для получения информации о релизе можно выполнить такой запрос в QA:
SELECT @@VERSION
Результатом запроса будет одна колонка, например вот такая:
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
где 8.00.2039 и есть информация о версии SQL сервара и установленном последнем обновлении (SP).
Вот таблички для SQL 7.0, 2000 и 2005 (RTM -Release To Manufacturing):
Для SQL 7.0
Для SQL 2000
7.00.1063 SQL Server 7.0 SP4 8.00.194 SQL Server 2000 RTM
7.00.961 SQL Server 7.0 SP3 8.00.384 SQL Server 2000 SP1
7.00.842 SQL Server 7.0 SP2 8.00.534 SQL Server 2000 SP2
7.00.699 SQL Server 7.0 SP1 8.00.760 SQL Server 2000 SP3
7.00.623 SQL Server 7.0 RTM 8.00.760 SQL Server 2000 SP3a
8.00.2039 SQL Server 2000 SP4
8.00.2040 SQL Server 2000 SP4+HotFix
Отличить версию SP3 от SP3a можно посмотрев в SQL Server Network Utility версию SSNETLIB.DLL, так для SP3 - 8.0.760, для SP3a - 8.0.766.
(Информация получена с sql.ru/forum/actualthread.aspx?bid=1&tid=136531&hl=microsoftversion).
Для SQL 2005
9.00.1399.06 SQL Server 2005 RTM
9.00.2047.00 SQL Server 2005 SP1
9.00.3033.00 SQL Server 2005 SP2
Для получения других свойств (релиз, редакция) установленного SQL сервера можно воспользоваться таким запросом:
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY('productlevel'), SERVERPROPERTY('edition')
Вот пример работы такого запроса:
Для SQL 2000:
8.00.2039

SP4

Developer Edition


Для просмотра информации о более старых версиях SQL Server можно воспользоваться вот этой ссылкой: vyaskn.tripod.com/sqlsps.htm
Для получение отлельно версии платформы SQL Servrer и номера релиза, можно, к примеру, воспользоваться вот таким скриптом:
DECLARE @version int, @build int



SELECT

@version = @@microsoftversion / 0x01000000,

@build = cast(@@microsoftversion as binary(2))



raiserror('@version = %d, @build = %d', 0, 1, @version, @build)
Для получения более развернутой информации можно воспользоваться хранимой процедурой xp_msver:
exec xp_msver

21. Как решить проблемы с памьятью. 1 - Windows Server не видит больше 4 GB ОЗУ, 2 SQL Server не может использовать больше 2 GB.

Проблемы с 32 разрядными Windows Server и поддержкой больше 4 GB ОЗУ рассмотрена в этой статье support.microsoft.com/?id=283037. Описание технологии: www.microsoft.com/technet/prodtechnol/windowsserver2003/ru/library/ServerHelp/32da8fd0-23f4-4dd4-b5f0-f2b45bb042b3.mspx?mfr=true
С этой проблемой сталкиваются те, у которых на сервере более 4 GB ОЗУ.
Вкратце, для работы с памятью более 4 GB понадобятся такие операционные системы:
Microsoft Windows 2000 Advanced Server,
Microsoft Windows 2000 Datacenter Server,
Microsoft Windows Server 2003 Enterprise Edition,
Microsoft Windows Server 2003 Datacenter Edition.
Для работы с памятью более 4 GB в файле c:\boot.ini надо в строке где есть параметр /fastdetect добавить параметр /PAE
Для возможности использования одним процессом более 2 GB в файле c:\boot.ini надо в строке где есть параметр /fastdetect добавить параметр /3GB.
Вот например как может выглядеть отредактированная строка в boot.ini:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /PAE /3GB /fastdetect
Необходимо отметить что для того чтобы SQL сервер использовал больше 2 GB ОЗУ указывать ключ /3GB указывать необязательно. Почему, рассмотрено чуть ниже.
Проблема с SQL Server (2000, 7.0) и использованием больше 2GB ОЗУ. В самом SQL Server есть возможность использования расширенной памяти больше 2GB. Следует отметить, что для использования SQL сервером больше 2 GB памяти необходимо использовать или Enterprise Edition или Developer Edition SQL Server. Для поддержки SQL Server памяти свыше 2GB он использует технологию Address Windowing Extensions (AWE). Подробное описание находится в этой статье : support.microsoft.com/?id=274750 . А вот в этом топике находится обсуждение целесообразности использования этого параметра:: sql.ru/forum/actualthread.aspx?bid=1&tid=137853&pg=1 .

Отмечу лишь то, что замедления работы системы и SQL сервера я не заметил, включив этот режим. Также надо отметить, что для повышения производительности следует отключить файл подкачки для Windows. Это приведет к тому, что неисопльзуемая память не будет высвобождаться на диск, а в случае запроса к высвобожденным ресурсам не будут производиться опурации чтения с диска. Но для такой операции необходимо достаточное количество оператвиной памяти на сервере. На вопрос сколько надо памяти для SQL сервера нет точного ответа, есть лишь рекомендации. Так например, если работа ведется только с одной базой, то надо выделить под SQL сервер приблизительно сколько памяти, сколько занимают файлы базы данных на диске (но желательно процентов на 10-15%). Также надо отметить, что при использовании AWE для SQL сервера сам процесс sqlserver.exe не занимает больше места в памяти, память отводится под кеш SQL сервера, т.е. фактически под данные базы данных.
Вот пример скрипта на языке Transact-SQL для включения режима AWE:
sp_configure 'show advanced options', 1

RECONFIGURE

GO

sp_configure 'awe enabled', 1

RECONFIGURE

GO

sp_configure 'max server memory', 6144

RECONFIGURE

GO
где: 6144 - размер памяти в мегабайтах, выделяемых SQL-серверу. Желательно это значение не устанавливать больше чем размер физической памяти, в противном случае при физическом резервированиия памяти под SQL SQL сервер не сможет стартовать.

22. Медленно работает 1С по сети с базой на SQL Server.

Одно из решений - правильно настроить сетевые протоколы для взаимодействия с SQL Server.
1csql.ru/materials/faq/admin.html
Для такой настройки ODBC должен быть версии не ниже 3.5
С помощью утилиты Client Network Utility (CLICONFG.EXE) (Program - Microsoft SQL Server - Client Network Utility) необходимо настроить протокол общения с SQL сервером. По умолчанию "Default network library" установлен в "Named Pipes", надо установить в "TCP/IP" и добавить строку в Server alias configuration. Где, соответственно, указать псевдоним, имя сервера, протокол TCP/IP, порт (можно оставить без изменений, если на сервере порт не был изменен). Вот пример настройки:
1 - пример настройки протоколов, 2 - ставить необходимо когда клиент и SQL Server находятся физически на одном компьютере, в єтом случае обмен идет не по сетвевым ресурсам, а через память.

23. После установки на SQL Server 2000 Service Pack 4 SQL стал медленне работать и меньше загружать память.

По заявлениям фирмы Microsoft есть такая проблема для 32-битной версии SQL Server 2000 SP4, для устранения этой проблемы надо скачать HotFix вот по этой ссылке:
support.microsoft.com/default.aspx?kbid=899761

24. После установки на SQL Server 2000 проведение документов замедлилось

Эта проблема описана в этой статье:
support.microsoft.com/?scid=kb;en-us;891553&spid=2852
Есть комерческое решение этой проблемы: softpoint.ru/article_id11.htm
Есть решение и с помощью 1С++ (метод ReconnectNative() класса ODBCRecordSet) но надо быть осторожным и закрывать все открытие окна объектов, а также обнулять глобальные переменные, в которых храняться ссылки на объекты (Справочники, документы, регистры, операции).
Также эта проблема уже решена в SQL Server 2005, но пока официальной поддержки 1С V77 SQL Server 2005 нет (1С не может правильно определить версию драйвера, но эта проблема решается патчингом BkEnd.dll, как это сделать будет рассмотрено в другой статье).

25. Не могу подключиться к SQL серверу

Проблема очень обширная, подробноее ее решение рассмотрено вот в этой статье:
sql.ru/articles/mssql/2005/013001TtroubleshootingConnectivitySQLServer2000.shtml

26. По каким то причина SQL Server очень медленно работает

Решение этой проблемы может быть как совсем простое, так и очень сложное и требующее значительных затрат (как по времени, так и по другим ресурсам). Вот статья, рассказывающая как можно протетсировать компоненты сервера на скорость, а также методы устранения узких мест: http://www.sql.ru/articles/mssql/03121001PERF_COUNTERs.shtml
Со своего опыта добавлю, что для ускорения работы SQL Server необходимо отключить файл подкачки на том компьютере где он работает (но при этом надо минимум 2.5 GB ОЗУ). А при использовании технологии AWE - желательный объем ОЗУ - размер базы, с которой наиболее активно работают. Также, необходимо учесть, что при активной работе пользователей (например ввод за 12 часов от 2000 документов, или от 10000 транзакций (включая количество движений, т.е. записей в таблицы)), желательно чтобы SQL Server работал только с одной пользовательской базой. Также желательным будет использование RAID масивов (5 или 10 уровень) и хорошие RAID контроллеры (от 1000 у.е.). Также надо заметить, что иногда может быть полезным разделить систему и SQL базу на разные физические диски, а также разделение файла данных (mdf) и файла транзакций (ldf) на разные диски (что может быть очень проблематичным при условии использования RAID-10).

27. При попытке подключения к SQL2005 выдается сообщение "Требуется ms sql server версии 6.5 + service pack 5a или более старшая версия"

Проблема существует в версии 7.7 вплоть до 25 релиза включительно. Проблема кроется в способе определения версии MS SQL Server. При попытке подклбчения к SQL 1С проверяет версию SQL Server, причем проверяет по содержимому системной таблици. Подробно описано как вот в этом топике: http://www.forum.mista.ru/topic.php?id=133392. Приведу текст запроса, по которому 1С определяет версию
select 504,c.name,c.description,c.definition from master.dbo.syscharsets c

where c.id = convert(tinyint,databasepropertyex ( db_name() ,

'sqlcharset'))
Вся проблема в том, что master.dbo.syscharsets в SQL2005 это уже не таблица, а View, и изменить его - не такая уж простая задача (у меня так и не получилось, и наверное это правильно, так как изменение системных таблиц может привести к неработоспособности всего SQL Server).
Но решение есть. Дело в том, что почти все запосы, которыми 1С обращается по ODBC к SQL Server хранятся в одной DLL, а именно в BkEnd.dll. При желании, можно изменить эту DLL и дать возможность 1С работать с SQL Server 2005.
Вкратце что надо сделать:
(пример приведен для 25-го релиза 1С V7.7)
патчим bkend.dll

000D9C4A: 83 EB

000D9C4B: E8 15

000DB0B0: 83 EB

000DB0B1: E8 10
(для 26-го и 27-го релизов 1С V7.7)
000D9CCA: 83 EB

000D9CCB: E8 15

000DB130: 83 EB

000DB131: E8 10
в свойствах базы данных на SQL Server ставим Compatibility Level SQL Server 2000(80)
Если кто хочет восспользоваться готовой пропатченной BkEnd.dll - может восспользоваться этой ссылкой: BkEnd.zip

28. Как подключиться к SQL2005 по IP адресу а не по имени сервера

Проблема в том, что при установке по умалочанию во всех редакциях кроме Enterprise Edition включается только протокол SharedMemory, необходимо включить еще и TCP/IP для доступа к серверу по сети. Для этого необходимо запустить приложение Programm - Microsoft SQL Server 2005 - Configuration Tools - SQL Server Configuration Manager и включить протококол TCP/IP:

29. Как получить имя пользователя, который занимает много процессорного времени SQL-Server.

Очень часто приходиться сталкиваться с такой ситуацией, когда SQL-Server полностью или почти полностью занимает (загружает) процессор или дисковую подсистему во время работы. Для того чтобы выяснить кто из пользователей "загрузил" SQL-Server надо войти в SQL-Profiller и посмотреть какой из запросов (после его віполнения, т.е. в момент когда идет выполнение запроса, запрос в Profiler не попадает, а это знгачит что Profiler надо запустить до момента возникновения ситуации, которую надо отследить). Когда будет выявлен запрос, который занимет много процессорного времени (по колонке CPU, а также время его віполнения в милисекундах - колонка Duration), можно узнать его SPID в колонке SPID того же Profiler-а. Выделенный запрос (который нас интересует) выполнен под SPID = 76. Теперь необходимо выполнить запрос для того чтобы получить имя пользователя и имя компьютера, с которого работает пользователь:
SELECT spid,program_name, hostprocess,hostname, loginame

FROM sysprocesses

WHERE SPID = 76
Казалось бы все просто, смотрим значенеи поля loginame и видим пользователя. Но не все так просто, дело в том, что 1С работае с SQL-Server по SQL-Server аутентификации, а єто значит, что все пользователи 1С работают под одним логином SQL (обычно это sa). Поэтому решение надо искать в результатах других столбцов выборки.
Реузльтат этого запроса может дать нам овтет в первом из двух случаев. Есть 2 варианта работы 1С версии 7.7 с SQL-сервером (точнее штатный вариант один, разница лишь в том, где вполняется приложение 1С): 1 - работа в локальной сети, пользователи работают с приложением 1С на своих локальных компьютерах; 2 - работа на терминальном сервере, когда пользователи для работы с приложением 1С сначал подключаются к серверу терминалов, а уже с него работают с 1С.
Так если пользователь с указанным SPID работает по сети (не посредством терминального сервера), то в поле hostname - можно увидеть с какого компьютера был послан запрос, ну и зная компьютер можно легко узнать а кто же там работал в требуемое время.
Если же пользователи работают с терминального сервера - ситуация усложняется, так как в поле hostname - будет имя сервера терминадов. В этом случае может помочь значение поля hostprocess. Именно под этим номером на клиентском компьютере (сервере терминалов) стартовал процесс 1cv7s.exe, и посмотрев в Task Manager-е список процессов на термианльном сервере можно найти от имени какого пользователя стартовал процесс и таким образом выясгить имя пользователя

30. Как сделать чтобы 1С подключался к SQL не под одним логином (SQL аутентификация), а под логинами Windows (Windows аутотентификация).

Зачем это надо? В предыдущем пунтке этого FAQ-а (как получить имя пользователя, который занимает много проуессорного времени SQL-Server) было описан механизм получения имени пользователя по его SPID, эта довольно тривиальная задача на самом деле не совсем простая, и решить ее средствами самого SQL-Server не так просто. Ситуация меняется когда все пользователи будут подключаться к SQL серверу не по одному логину, а под своими Windows-логинами. Тогда сразу видно кто выполняет интересующий запрос.
Реализовать подобное можно лишь изменив строку подключения 1С к SQL. Строка подключения 1С находится в файле BkEnd.dll. Для изменение строки подключения надо найти строку "SERVER=%s;UID=%s;PWD=%s;" и заменить на строку "SERVER=%s;UID=;PWD=; ". После чего все подключения 1С будет выполнять не под логином и паролем прописанным в полях окна "Параметры базы данных SQL", а под именем и правами Winndows. Эту процедуру следует делать с особой осторожностью, и после исправления BkEnd.dll надо обязательно внести список логинов Windows в в список логинов SQL-Server. Также необхомо пользователям дать права на базы 1С (а возможно и другие, если используются какие то дополнительные базы и обращение к им ведеться по OLE DB или ODBC) (за исключением случая пользователи принадлежат группе даминистраторов на сервере, где находится SQL-Server). Назначитт права можно віполнив ниже указанній скрипт для каждого пользователя и каждой базы:
use [master]

exec sp_grantlogin N'Domain\User1'

use [master]

exec sp_defaultdb N'Domain\User1', N'base1'

use [master]

exec sp_addsrvrolemember N'Domain\User1', sysadmin

use [base1]

exec sp_dbcmptlevel N'base1'

use [base1]

exec sp_grantdbaccess N'Domain\User1', N'User1'

use [base1]

exec sp_addrolemember N'db_owner', N'User1'

Где: 'Domain'-имя домена;
'User1'- имя пользователя;
'base1'-имя базы на SQL сервере.
Зачем давать права пользователям System Administrator строкой: exec sp_addsrvrolemember N'Domain\User1', sysadmin? Без этих прав пользователи также смогут работать с 1С, но вся проблема в том, как 1С работает с таблицей "_1SCONNECT". Так при первой загрузке 1С пытается выбрать строки с таблицы с блокировкой TABLOCKX HOLDLOCK, если блокировки нет - тогда 1С понимает что это первое подключение и удалчет все записи с таблицы, а также и саму таблицу, а потом снова создает. Но поскольку теперь работа ведется не под логином SA, то таблица создается не под dbo, а под именем логина. Для того чтобы устранить эту ошибку надо чтобы таблица создавалась под владельцем dbo, а для этого надо пользователям дать права sysadmin. К тому же если пользователь все таки вошел с отсутствием прав sysadmin, а потом пытается войти пользователь с правами sysadmin - то 1С понимает что это другое подключение и выводит сообщение о том что доступ к базе возможен только из одного каталога. Для решения такой проблемы - надо удалить таблицу "_1SCONNECT" у которой владелей не dbo, а пользователю дать права sysadmin.
Эту проблему можно обойти не давая всем пользователям права sysadmin, а достаточно лишь кому то одному, но главное условие, чтобы этот пользователь подключался к 1С первым (под ним проходила верификация).
Тепрь для просмотра кто сейчас работает с базой можно восспользоваться хранимой процедурой sp_who, но эта процедура не дает возможности отбирать подключения по имени базы и имени приложения, а также нет возможности видеть некоторые поля с информацией, скажем о загрузке процеесора или о количестве операций чтения/записи. Для получения требуемой инмормации можно сделать запрос к таблице sysprocesses, но для того чтобы не писать громоздкие запросы, можно восспользоваться хранимой процедурой, текст которой приведен ниже:
use master

create procedure sp_who_1c --- аналогия sp_who, но с некоторыми рассширенніми возможностями

@dbname varchar(100) = NULL -- Имя базы NULL - все базы

,@progname varchar(100) = NULL -- имя программы NULL - все программы

,@orderBy varchar(100) = 'loginame' -- столбцы сортировки



as



declare @textZP VarChar(1000)



select @textZP = 'select spid,

ecid,

status=rtrim(status),

loginame=rtrim(loginame),

hostname=rtrim(hostname),

program_name=rtrim(program_name),

blk=convert(char(5),blocked),

dbname = case

when dbid = 0 then null

when dbid <> 0 then db_name(dbid)

end

,cmd

,cpu

,physical_io

,memusage

,login_time

from master.dbo.sysprocesses

where (spid >= 0 and spid <= 32767)' if (@dbname is NOT NULL) if (@progname is NOT NULL) select @textZP = @textZP + ' and ((db_name(dbid) = '''+isnull(@dbname,'')+''') and (dbid <> 0))

and upper(rtrim(program_name)) ='''+ upper(@progname)+''''

else

select @textZP = @textZP + '

and ((db_name(dbid) = '''+isnull(@dbname,'')+''') and (dbid <> 0))'

else

if (@progname is NOT NULL)

select @textZP = @textZP + '

and upper(rtrim(program_name)) ='''+ upper(@progname)+''''



select @textZP = @textZP + '

order by '+@orderBy



--print @textZP

EXEC (@textZP)

return (0)
Вызов этой процедуры:
exec sp_who_1c 'ruukki','1cv77','cpu desc'

31. Работа 1С v77 под Vista и MS SQL 2005

Проблемы работы 1С под MS Vista можно разделить на 2 категории:
1 - Работа в файловом варианте базы.
2 - Работа с базой в формате MS SQL.
  1. Для решение проблемы работы в файловом варианте необходимо использовать 1С релиза 26 или 27 (но лучше 27). Фирма 1С реализовала механизм отключения проверки кодовой странции с помощью проверки на существование файла OrdNoChk.prm. Соответсвенно этот файл должен быть или в каталоге базы данных или же в каталоге программных файлов 1С (BIN). Файл OrdNoChk.prm в каталоге Bin будет действовать на все базы, с которыми работает программа 1С запущенная с каталога BIN, в котором находиться файл OrdNoChk.prm. Это значит, что для отключения проверки кодировки для всех баз - разместите файл в каталоге BIN программных файлов, а для отключения проверки кодировки выборочно для базы (баз) создайте файл OrdNoChk.prm в каталоге базы. В некторый случаях, дополнительно надо еще установить кодовую страницу для базы на "+Текущая системная установка". Это делается в режиме Конфигуратора:

    "Меню - Администрирование - Кодовая страница таблиц ИБ... - "+Текущая системная установка"".

    Надо быть осторожным при изменении кодовой страницы, если с базой работают по сети и у клиентов установлены разные версии ОС.
  2. Для работы 1С с базами в формате MS SQL под MS Vista можно использовать как MS SQL 2000 так и MS SQL 2005. Хотя при установке SQL 2000 и выдается сообщение о необходимости установки более новой версии SQL Server, но установка и дальнейшая работа MS SQL Server 2000 проходит без особых проблем (пока не удалось заметить каких либо глюков). Надо только обратить внимание, что при установке SQL Server кодировка на уровне сервера может быть установлена отличная от Cyrillic_General_CI_AS, поэтому, желательно самому вручную поставить необходимую установку Collation в Cyrillic_General_CI_AS (кириллица регистронезависимая по возрастанию).

    После установки надо поменять некоторые измененные системные файлы, иначе вы рискуете увидеть приблизительно такое сообщение "Для доступа к базе данных требуется ODBC-драйвер для MS SQL Server версии 3.50.0303 или старше".

    Но если вы установили вашу ОС и не делали с ней никаких изменений в плане настройки безопасности, то даже работая под правами администратора или под логином администратора - вам не так просто будет скопировать файлы в папку System32. Итак, для начал надо с предыдущих версий ОС (например Windows XP или MS Server 2003) переписать вот эти 3 файла:

    sqlsrv32.dll

    sqlsrv32.rll

    odbcbcp.dll

    После чего надо эти файлы записать в папку "System32" (обычно это C:\Windows\System32\). Для этого надо сделать себя владельцем этих файлов (или папки, или всего диска). После чего назначаете себе полный доступ на каталог (если такого доступа нет). Теперь можно смело скопировать 3 ранее скопированных файла и перегрузить систему.

    Но это еще не все, теперь Вам надо сделать то же самое что вы проделывали с файлом OrdNoChk.prm с 1 пункта, чтобы отключить проверку сортировки в режиме 1С:Предприятие. Выполнив такие изменения можно смело работать с 1С.

    Но для режима 1С:Конфигуратор файла OrdNoChk.prm недостаточно, Все дело в том, что в режиме конфигуратора почему то С не обращает внимание на наличие этого файла (во всяком случае вижу пока только такое логичное обьяснение), для точно чтобы вопрос о сортировке не выскакивал при изменении структуры базы в режиме Конфигуратора надо подправить файл BkEnd.dll:

    (для 26-го и 27-го релизов 1С V7.7)
по смещению 0018A6DD поменять значение с 75h на EBh (117 на 235)
И еще одно маленькое замечание по работе с MS Windows Vista, чтобы каждый раз не отвечать на вопросы при установке каких то программ или регистрации DLL-ок лучше сразу отключить контроль учетных записей в панели управления:

32. При подключении 1С возникате ошибка "SQL State 42000. Native 7202. ... SQL Server Could not find serve 'ServerName' ..."

Эта ошибка возникла при переименовании имени компьютера после установки экземпляра SQL Server, и происходит несоответсвии имени SQL сервера и прописанного экземпляра имени сервера в свойствах базы данных.
Вот пример как исправить эту ситуацию для сервера SQL 2005 (хотя в 2000 также эта команда должна работать):
sp_dropserver UA00560PCV

GO

sp_addserver dtuaiev0028, local

GO
где:
UA00560PCV - старое имя компьютера,
dtuaiev0028 - новое имя компьютера.

33. Как создать дополнительные индексы для таблиц

В 1С есть механизм управления индексами - это установка флажка "Сортировка" в свойствах реквизита. Но при этом индекс всегда создается как составной (напрмиер для справочников для каждого реквизита создается индекс с ROW_ID, с регистрами и того хуже, там один составной индекс по всем измерениям). Такие индексы полезны лишь тогда, когда все поля, что входят в индекс задействованы в запросе (напрмиерв условиях или в сортировках). Если же не все поля задействоаваны, тогда индекс не эфективен. Иногда помогает добавление своих индексов, скажем только по одному полю. Но если добавить индекс вручную, то 1С при следующей первой загрузке сделает верификацию и выдаст сообщение о нарушении структуры индексов и предложит запустить программу в монопльном режиме для восстановления. Решить проблему верификации можно несколькими способами, подаправить вручную харнимую процедуру, которую вызывает 1С (это системаня хранимая процедура sys.sp_statistics), но сделать такое изменение в SQL2005 будет не совсем просто. Второе решение - подправить файл, по кторому 1С проводит верификацию, а это файл 1Cv7.dds (1Cv7.dd для dbf версии). Но 1С этот файл каждый раз пересоздает при реструктуризации, и поэтому придется каждый раз вносить такие изменения после руструктуризации. Чтобы не делать такие изменения каждый раз вручную, есть компонента, которая использует OpenConf "Проект OpenConf (Открытый Конфигуратор)" Вот ссылка на первоисточник: Дополнительные индексы на таблицы БД SQL. Скачать файл можо вот по этой сслыке: ddx.zip

34. Если вы не нашли желаемого ответа

Можете воспользоваться поиском на таких сайтах:
thebeautiful.narod.ru/1csql.htm

sinor.ru/~my1c/knowhow.html

1csql.ru/materials/faq/admin.html

softpoint.ru/article.php
Или задать вопрос на одном из форумов:
1c.realnet.ru/forum/f.php

kuban.ru/cgi-bin/forum/forum9.cgi

itland.ru/forum/index.php

forum.mista.ru/index.php

itpb.ru/forum4/
© pvase 2008 metaprog.co.ua/secrprog/FAQ_SQL.html

Разрешение проблем подключения к SQL Server 2000

Эта статья ориентирована на то, чтобы помочь Вам решить проблемы, возникающие при подключении к SQL Server 2000, в ней описаны основные проблемы такого типа и действия, которые Вы можете предпринять, чтобы их разрешить. В данной статье имеются рекомендации, связанные с редактированием реестра. Перед модификацией реестра необходимо сделать его резервную копию, чтобы иметь возможность его восстановления в случае возникновения проблем, которые могут появиться после некорректных изменений. Для получения информации о том, как сделать резервную копию реестра, его восстановление и модификацию, необходимо изучить следующую статью базы знаний Майкрософт: 256986 Description of the Microsoft Windows Registry (Описание реестра Microsoft Windows) support.microsoft.com/kb/256986

СОДЕРЖАНИЕ

Введение

Поиск причин возникновения ошибок подключения    

Проверка настроек DNS
   

Проверка наличия протоколов и псевдонимов
   

Проверка порта прослушивания экземпляра SQL Server


Разрешение проблем MDAC    

Разрешение проблем связанных с использованием сетевых экранов
   

Разрешение проблем аутентификации и безопасности
   

Разрешение проблем перегрузки TCP/IP сокетов
   

Убедитесь, что SQL Server не запущен в однопользовательском режиме


Проверка подключения к SQL Server по именованным каналам

Разрешение проблем подключения во время процесса регенерации    

Тестирование разных способов подключения к экземпляру SQL Server


Мониторинг сети Ссылки



Введение

SQL Server 2000 поддерживает несколько способов взаимодействия экземпляра SQL Server и клиентского приложения.

Если экземпляр SQL Server и клиентское приложение установлены на одном компьютере, то взаимодействие происходит

посредством имеющихся в Microsoft Windows механизмов InterProcess Communication (IPC) (межпроцессное взаимодействие),

таких как локальные именованные каналы или протокол разделяемой памяти (Shared Memory Protocol).

Если же экземпляр SQL Server и клиентское приложение работают на разных компьютерах, то взаимодействие

осуществляется через сетевые IPC, такие как TCP/IP или именованные каналы.



Для взаимодействия серверов SQL Server 2000 и клиентских компьютеров используются сетевые библиотеки (Net-Library)

- это DLL, поддерживающие стандартные сетевые протоколы. Для взаимодействия клиента с сервером необходимо

соответствие их сетевых библиотек. Например, если Вы подключаетесь к экземпляру SQL Server используя протокол

TCP/IP, то на клиенте должна быть установлена сетевая библиотека Dbnetlib.dll (client TCP/IP Sockets Net-Library).

Так же на сервере должна быть установлена библиотека Ssnetlib.dll (server TCP/IP Sockets Net-Library). Для

приведенного примера следует также установить протокол TCP/IP на сервере и клиенте.



После инсталляции SQL server, Вы можете выбрать и настроить сетевые библиотеки с помощью утилиты Client Network

Utility. На сервере это можно сделать с помощью утилиты Server Network Utility (Svrnetcn.exe). Сетевые библиотеки

устанавливаются в процессе инсталляции SQL Server. Однако некоторые сетевые библиотеки на сервере могут быть

неактивными. По умолчанию в SQL Server 2000 устанавливаются сетевые библиотеки TCP/IP, именованных каналов и

разделяемой памяти.



Таким образом, для того чтобы клиент мог установить соединение с сервером, он должен использовать сетевую библиотеку,

для которой есть соответствующая библиотека на сервере.



Для получения дополнительной информации о компонентах взаимодействия SQL Server и о сетевых библиотеках, изучите

следующие разделы справочной системы SQL Server Books Online: Communication Components; Client and Server

Net-Libraries; Managing Clients.

Поиск причин возникновения ошибок подключения

Большинство проблем при подключении к SQL Server являются следствием проблем с TCP/IP, Windows аутентификацией,

либо их комбинацией.
ВАЖНО: Перед тем как начать поиск причины возникновения проблемы подключения к SQL Server, убедитесь, что служба

MSSQLServer стартовала.

Проверка настроек DNS



Процесс преобразования IP адреса к текстовому имени экземпляра SQL Server происходит с помощью системы доменных

имён (Domain Name System, DNS). Если эта служба отработала некорректно, экземпляр SQL Server может быть недоступен,

и Вы можете получить следующие сообщения об ошибках:
SQL Server does not exist or access denied  General Network Error  Cannot Generate SSPI Context
Чтобы проверить корректность работы службы имён, необходимо запустить утилиту командной строки ping, в качестве

параметра которой указать сначала IP адрес, а затем выполнить ту же самую команду, но с именем сервера.



Пошаговая инструкция:
  1. Нажать кнопку "Пуск" (Start), затем выбрать пункт "Выполнить…" (Run)


  2. В появившемся диалоговом окне ввести cmd и нажать OK

  3. В командной строке набрать и запустить следующую команду: ping <Server Name>

    Запомните IP адрес, который будет выведен в результате выполнения команды.

  4. В командной строке наберите и выполните следующую команду



    ping -a <IP address>
    В качестве IP адреса необходимо использовать тот

    адрес, который Вы получили в пункте 3.

Убедитесь, что Вы получили правильное имя сервера. Если выполнение вышеприведенных команд завершилось неудачей, произошло превышение времени ожидания, или возвращенные значения не соответствуют тому результату, который Вы планировали получить, поиск в DNS осуществляется некорректно или же имеются проблемы с сетью или перенаправлением. Для того чтобы просмотреть текущие настройки DNS, выполните следующую команду:
ipconfig /all
Для получения дополнительной информации об ipconfig, необходимо изучить следующую статью в Базе знаний Майкрософт: 223413 Options for Ipconfig.exe in Windows 2000 (Параметры запуска ipconfig в Windows 2000) support.microsoft.com/kb/223413
Для того чтобы иметь возможность обойти эту проблему, необходимо на клиентском компьютере добавить соответствие IP адреса и имени сервера в следующий файл:
%systemroot%\system32\drivers\etc\hosts
Также избежать этой проблемы помогает использование для подключения к серверу сетевой библиотеки именованных каналов. Также избежать этой проблемы помогает использование сетевой библиотеки именованных каналов для подключения к серверу.

Проверка наличия протоколов и псевдонимов

Проблемы подключения могут возникать вследствие неправильной настройки псевдонимов на клиенте. Чтобы это проверить, необходимо выполнить следующие шаги:

  1. Запустите Client Network Utility. Если клиентские утилиты SQL Server установлены на компьютере, где выполняется

    клиентское приложение, запустить Client Network Utility можно следующим образом:
    1. Нажать кнопку "Пуск" (Start), затем выбрать пункт меню "Программы" (Programs)
    2. Выбрать раздел Microsoft SQL Server, а затем из подменю запустить Client Network Utility.
    Если клиентские утилиты SQL Server не установлены на компьютере, где выполняется клиентское приложение, то Client Network Utility запускается следующим образом:
    1. Нажать кнопку (Start), затем выбрать пункт меню "Выполнить…" (Run)

    2. В появившемся диалоговом окне вести команду cliconfg и нажать OK

  2. В окне программы сетевого клиента SQL Server (Client Network Utility) перейдите на вкладку General (Общие)

    и выбрать все протоколы, которые Вы хотите использовать.



    Обратите внимание: из списка Вы должны выбрать протоколы TCP/IP и именованные каналы.

  3. Перейдите на вкладку Alias (псевдонимы) и убедитесь, что для SQL Server создан псевдоним.

  4. Убедитесь в том, что в свойствах псевдонима правильно указаны имя сервера или его IP адрес и протоколы.

Можно протестировать подключение, используя разные конфигурации псевдонимов, построенных на имени сервера, его IP адресе или даже на других протоколах.
Важно: В ранних версиях Microsoft Data Access Components (MDAC) используется другой пользовательский интерфейс утилиты Client Network Utility. Таким образом, если интерфейс Client Network Utility не содержит тех элементов, которые описаны выше, следует установить последнюю версию MDAC на компьютер, где выполняется клиентское приложение.

Проверка порта прослушивания экземпляра SQL Server

Проверьте что экземпляр SQL Server "слушает" порт TCP/IP, именованные каналы или другой протокол, который используется клиентским приложением. Для этого необходимо просмотреть текущий журнал ошибок SQL Server. Он может содержать следующие строки:
2003-11-06 09:49:36.17 server SQL server listening on TCP, Shared Memory, Named Pipes. 2003-11-06 09:49:36.17 server SQL server listening on 192.168.1.5:1433, 127.0.0.1:1433.
Анализ этой информации поможет убедиться в том, что SQL Server имеет правильный IP - адрес и порт. По умолчанию, выбирается порт 1433. Можно также использовать Server Network Utility, чтобы проверить установки протоколов для SQL Server и при необходимости изменить их, включая список протоколов которые используются для подключения к SQL Server и порты, которые эти протоколы используют. Для получения дополнительной информации об утилите Server Network Utility, изучите следующую статью справочной системы SQL Server Books Online: "SQL Server Network Utility". Иногда невозможно установить соединение с SQL Server 2000 через порт 1433, либо другой порт. Эта проблема может возникать по причине того, что данный порт уже используется другим приложением, или в случае если Вы пытаетесь подключиться, используя некорректный IP адрес. В этом случае, при подключении к SQL Server с использованием протокола TCP/IP, Вы можете получить следующее сообщение в журнале ошибок SQL Server:
2001-11-14 15:49:14.12 server SuperSocket Info: Bind failed on TCP port 1433.
Для получения дополнительной информации, изучите статью в базе знаний Майкрософт: 307197 PRB: TCP\IP port in use by another application (Порт TCP/IP используется другим приложением).
Если Вы не можете подключиться к SQL server с использованием TCP/IP, попытайтесь сделать это, используя именованные каналы или разделяемую память. Запустите следующую команду для того, чтобы определить какие порты уже используются:
NETSTAT -an
Для получения более подробной информации о портах, которые уже используются, можно использовать команду Portqry. Для получения информации по утилите Portqry, изучите следующую статью из Базы знаний Майкрософт: 310099 Description of the Portqry.exe command-line utility (Описание утилиты командной строки Portqry) Для получения дополнительной информации о "баге", связанном с использованием сокетов TCP/IP, просмотрите следующую статью из Базы знаний Майкрософт: 306865 BUG: SQL Server may not listen on TCP/IP sockets When TCP/IP is the only protocol
Обратите внимание: Для именованных экземпляров, SQL Server определяет порт динамически. Таким образом, когда Вы стартуете именованный экземпляр, SQL server пытается использовать порт, который был использован им ранее. Если SQL Server не может подключиться к этому порту, он выбирает себе другой порт для подключения. В этом случае клиентское приложение должно быть настроено таким образом, чтобы оно тоже определяло порт динамически. Либо Вы можете жестко определить порт для именованного экземпляра с помощью утилиты Client Network Utility. Для получения дополнительной информации, воспользуйтесь ссылкой на следующие статьи Базы знаний Майкрософт: 286303 INF: Behavior of SQL Server 2000 network library during dynamic port detection (Поведение сетевых библиотек при динамическом определении порта) support.microsoft.com/kb/286303. 823938 How to use static and dynamic port allocation in SQL Server 2000 (Как использовать статический и динамический порты для подключения к SQL Server) support.microsoft.com/kb/823938.

Разрешение проблем MDAC

Причиной возникновения проблем подключения к SQL server также могут быть проблемы с MDAC. Например, при установке каких-либо программ могут быть перезаписаны некоторые файлы MDAC или могут измениться права, которые Вы должны иметь для доступа к файлам MDAC. Для того чтобы проверить корректность установки MDAC на компьютере, можно воспользоваться утилитой MDAC Component Checker. Для получения дополнительной информации по этому вопросу, обратитесь к статье из Базы знаний Майкрософт: 301202 HOW TO: Check for MDAC version (Определение версии MDAC).
Обратите внимание: если Вы подключаетесь к именованному экземпляру SQL Server, убедитесь что у Вас установлен MDAC версии не меньшей 2.6. Более ранние версии MDAC не поддерживают подключение к именованным экземплярам SQL Server.
Для того чтобы проверить подключение через SQL Server ODBC driver, можно воспользоваться утилитой Odbcping.exe Для дополнительной информации о команде Odbcping.exe, обратитесь к Базе знаний Майкрософт: 138541 HOW TO: Odbcping.exe to verify ODBC connectivity to SQL Server Для получения информации о настройке источников данных ODBC DSN, обратитесь к следующей статье: 289573 PRB: Configuring DSNs with SQL Server Net-Libraries (Конфигурация DSN с использованием сетевых библиотек SQL Server).
Также можно провести тесты на предмет подключения к SQL Server используя файлы ".udl" Для получения информации о том, как создавать ".udl" файлы, читайте следующую статью из Базы знаний Майкрософт: 244659 SAMPLE: How to create a data link file with Windows 2000.

Разрешение проблем связанных с использованием сетевых экранов

Если используется сетевой экран, убедитесь в том что порты для доступа клиентского компьютера к компьютеру, на котором работает SQL Server, им не заблокированы. Для дополнительной информации о том, какие порты должны быть открыты при подключении через сетевой экран, просмотрите следующие статьи:
287932 INF: TCP ports needed for communication to SQL Server through a firewall (Порты TCP, необходимые для подключения к SQL Server). 269882 HOWTO: Use ADO to connect to a SQL Server that is behind a firewall (Использование ADO для подключения к SQL Server через сетевой экран).
Если для подключения к SQL Server используется протокол TCP/IP, убедитесь в том что Вы можете подключиться с помощью программы Telnet к порту на котором "слушает" SQL Server. Для этого из командной строки нужно выполнить следующее:
Telnet <IP Address> <Port Number>
Если при подключении Telnet-том выдается ошибка, примите меры к устранению причин её возникновения и попробуйте подключиться снова.
Важно: User Datagram Protocol (UDP) порт 1434 может быть заблокирован для защиты от проникновения вируса Slammer.

Разрешение проблем аутентификации и безопасности

Подключение к SQL server может закончиться неудачей по причине того, что процесс аутентификации завершился с ошибкой, при этом Вы можете получить следующие сообщения об ошибках:
Login failed for user '<username>'  Login failed for user 'NTAUTHORITY\ANONYMOUS LOGON'  Login failed for user 'null'
Если Вы получили сообщение об ошибке, связанное с аутентификацией и учетная запись, указанная в этом сообщении не является учетной записью SQL Server, ищите причину в Windows аутентификации. Из-за проблем с аутентификацией в Windows, Вы можете получить следующее сообщение:
Cannot generate SSPI Context
Проблемы с аутентификацией и безопасностью могут быть вызваны следующими причинами:

  • Проблемы с NTLM или Kerberos аутентификацией.

  • Контроллер домена недоступен по причинам ошибок подключения.

  • Проблема с доверительными отношениями в домене.
Также для выявления возможных причин, нужно просмотреть журнал событий компьютера. Для обхода проблем, возникающих из-за подключения к SQL Server с использованием Windows аутентификации, можно воспользоваться аутентификацией SQL Server. Для получения более подробной информации о том, как разрешать проблему возникновения ошибки "Cannot Generate SSPI Context", прочитайте следующую статью: 811889 How to troubleshoot the "Cannot generate SSPI context" error message.
При подключении с использованием SQL Server аутентификации, Вы можете получить следующую ошибку:
Login failed for user '<username>'
Для того, чтобы разрешить эту проблему, необходимо сделать следующее:
Внимание: Неправильное использование редактора реестра может повлечь за собой серьезные проблемы, которые в конечном итоге могут привести к переустановке операционной системы. Помните, что Вы используйте редактор реестра на свой собственный страх и риск.

  1. Убедитесь в том, что экземпляр SQL Server использует смешанную аутентификации: Windows и SQL Server. Для

    этого нужно проверить следующие ветки реестра на компьютере, где выполняется SQL Server:



    • Для экземпляра по умолчанию:

      HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\LoginMode

    • Для именованного экземпляра:

      HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\<Instance Name>\MSSQLServer\LoginMode
    Просмотрите, установлены ли следующие значения ключей в реестре:

    Тип аутентификации Значение
    Windows authentication only 1
    Mixed mode (SQL Server Authentication and Windows authentication) 2




    Помните: После изменений в реестре нужно перестартовать SQL Server, для того чтобы изменения вступили в силу.

  2. Попытайтесь подключиться к SQL Server, используя разные учетные записи Windows и SQL Server. Это поможет

    убедиться в том, возникает ли ошибка подключения только при использовании конкретной учетной записи, например по

    причине смены ее пароля.

  3. Попытайтесь подключиться к SQL Server, используя разные протоколы. Например при подключении по TCP/IP и

    Windows аутентификации соединение может завершиться ошибкой, а подключение через именованные каналы, с использованием

    Windows аутентификации может завершиться успешно.
Если Вы при подключении к SQL Server используете сертификаты, может быть получена ошибка для Secure Sockets Layer (SSL). Получить дополнительную информацию по SSL можно в следующих статьях: 316898 HOW TO: Enable SSL encryption for SQL Server 2000 with Microsoft Management Console (Включение SSL шифрования для SQL Server через MMC). 322144 FIX: SECDoClientHandShake cannot connect to SQL Server.

Разрешение проблем перегрузки TCP/IP сокетов

При использовании ODBC драйвера для SQL Server или Microsoft OLE DB провайдера для SQL Server и System.Data.SqlClient Managed Provider, у Вас есть возможность с помощью соответствующего API отключить использование пула подключений. Если Вы его отключите, а Ваше приложение часто создаёт и закрывает подключения, может возрасти нагрузка на сетевые библиотеки нижнего уровня. Иногда Web - сервера и JDBC драйверы тоже могут пытаться установить соединение с SQL Server. Таким образом, увеличение количества запросов на подключение к SQL Server может стать больше, чем SQL Server может обслужить. Это увеличивает нагрузку на TCP/IP сокеты и Вы можете получить следующее сообщение об ошибке в журнале SQL server:
2003-08-07 20:46:21.11 server Error: 17832, Severity: 20, State: 6 2003-08-07 20:46:21.11 server Connection opened but invalid login packet(s) sent. Connection closed.
Для получения дополнительной информации, прочитайте следующие статьи: 154628 INF: SQL logs 17832 with multiple TCP\IP connection requests. 328476 TCP/IP settings for SQL Server drivers when pooling is disabled.
Важно: Эта проблема снимается при установке SQL Server 2000 SP3 или SQL Server 2000 SP3a, потому что эти сервисные пакеты вводят ограничение на количество пакетов. При подключении к SQL Server посредством драйверов сторонних производителей может возникнуть ошибка 17832. Для разрешения этой проблемы, свяжитесь с фирмой-производителем и получите драйвера, которые тестировались на работу с SQL Server 2000 SP3 и SQL Server 2000 SP3a.

Убедитесь, что SQL Server не запущен в однопользовательском режиме

Если SQL Server запущен в однопользовательском режиме, то с ним может быть установлено только одно подключение. Если на Вашем компьютере установлено программное обеспечение, которое автоматически подключается к SQL Server, данное программное обеспечение может использовать это единственное подключение, которое допускается в однопользовательском режиме. Примеры программ, которые автоматически устанавливают подключение к SQL server:

  • SQL Server Agent

  • Программное обеспечение для резервного копирования сторонних производителей

  • Программное обеспечение сторонних производителей для мониторинга

  • Антивирусы сторонних производителей

  • Microsoft Internet Information Services (IIS)

  • SQL Server Enterprise Manager
Клиентское приложение при попытке подключения к SQL Server получает следующую ошибку:
SQL Server does not exist or Access Denied
Эта ошибка возникает в процессе установки кластера SQL Server и установки пакетов обновления, в то время как SQL Server находится в однопользовательском режиме. Вышеуказанные приложения могут автоматически подключатся к серверу, используя единственное доступное подключение, и процесс установки закончится с ошибкой. Для того чтобы определить установлен ли однопользовательский режим, необходимо просмотреть журнал ошибок SQL Server на предмет нахождения там подобных строк:
To determine if the instance of SQL Server has been started in single-user mode, check to see if the SQL Server error log file has an entry that is similar to following: 2003-07-31 11:26:43.79 spid3 Warning ****************** 2003-07-31 11:26:43.80 spid3 SQL Server started in single user mode. Updates allowed to system catalogs.

Проверка подключения к SQL Server по именованным каналам

Если Вы не можете подключиться к SQL Server по именованным каналам, проверьте для SQL Server настройку использования именованных каналов. Для получения дополнительной информации о том, как протестировать соединение через именованные каналы, прочитайте следующую статью: 68941 INF: Procedure for testing named pipes.

Разрешение проблем подключения во время процесса регенерации

Каждый раз при старте SQL Server запускает процесс восстановления/регенерации для всех баз данных. Суть этого процесса заключается в том, чтобы откатить незавершенные транзакции и записать изменения произведенные транзакциями, которые были завершены, но которые не были записаны на диск в момент останова SQL Server. После окончания процесса реорганизации в журнале SQL Server делается следующая запись:
Recovery Complete
В момент выполнения процесса реорганизации к SQL server нельзя подключиться. Клиенты, которые в это время пытаются установить соединение с SQL Server могут получить подобную представленной ниже ошибку:
Timeout Expired
Служба SQL Server Agent не запускается до тех пор, пока SQL Server не закончит процесс регенерации. Таким образом, если процесс регенерации занимает слишком много времени, следует подумать над тем, как разрешить проблему столь длительной регенерации баз данных.

Тестирование разных способов подключения к экземпляру SQL Server

Если у Вас возникают проблемы при подключении к SQL Server, можно воспользоваться одним из следующих способов, чтобы определить причину возникновения этой проблемы:

  • Попробовать подключиться с использованием разных типов авторизации, с помощью учетных записей Windows и SQL

    Server.

  • Попробовать подключиться, используя другой источник данных, такой как ODBC DSN, файл .udl. Или используя

    другую программу: SQL Query Analyzer, SQL Server Enterprise Manager, утилиты isql или osql.

  • Проверить возможность подключения к SQL Server с использованием разных протоколов. Для этого можно создать

    псевдоним для сервера и определить для него протокол. Также указать протокол можно в строке подключения, дописав

    перед именем сервера tcp:, np:, lpc:, или rpc:. То есть, если подключение через tcp/ip заканчивается ошибкой, можно

    попробовать подключиться через именованные каналы.

  • Проверить возможность подключения с использованием различных учетных записей. Это поможет, если проблема

    связана с подключением с конкретной учетной записью.

  • Попытайтесь добавить соответствие IP адреса и имени узла, на котором работает SQL Server в следующий файл:

    %systemroot%\system32\drivers\etc\hosts

  • Попытайтесь подключиться к SQL server с компьютера, где он работает, а потом с клиентского компьютера.

  • Когда Вы подключаетесь с компьютера, на котором выполняется SQL Server, вместо полного имени сервера можно

    использовать "." или "(local)" (без кавычек).

  • Попытайтесь подключиться к SQL server используя не имя сервера, а его IP адрес.

  • Попытайтесь определить вручную имя порта на котором "слушает" SQL Server путем создания псевдонима или в

    строке подключения (Например MyServer\MyInstance, 1433).

Мониторинг сети

Если проблема подключения не разрешилась с помощью методов, описанных в разделе "Тестирование разных способов подключения к экземпляру SQL Server", используйте утилиту Network Monitor для анализа трассы сетевого обмена. Для получения дополнительной информации о сетевом мониторинге, прочитайте следующие статьи базы знаний Майкрософт:
148942 How to capture network traffic with Network Monitor (Запись сетевого трафика с помощью сетевого монитора) 294818 Frequently asked questions about Network Monitor (Часто задаваемые вопросы по Network Monitor) 169292 The basics of reading TCP/IP traces (Основы трассировки TCP/IP) 102908 How to troubleshoot TCP/IP connectivity with Windows 2000 or Windows NT (Поиск и разрешение проблем с соединениями TCP/IP в Windows 2000 и Windows NT)
Для получения более детальной информации можно использовать SQL Profiler, а также Network Diagnostics Tool, если компьютер, на котором работает SQL Server, не является одним из узлов кластера. Для получения информации о том, как использовать Network Diagnostics Tool, изучите следующую статью:
321708 HOW TO: Use the Network Diagnostics Tool (Netdiag.exe) in Windows 2000 (Использование Network Diagnostics Tool (Netdiag.exe) в Windows 2000)
[В начало]

Ссылки

Для изучения проблем связанных с подключением к SQL Server, предлагаются следующие статьи из Базы Знаний Майкрософт:
812817 Support WebCast: Microsoft SQL Server 2000: Troubleshooting connectivity 319930 HOW TO: Connect to Microsoft Desktop Engine (Установка подключения к Microsoft Desktop Engine) 257434 INF: Network library in existing DSN replaced by network library in new DSN to the same SQL Server name 306985 RPC errors when connecting a cluster virtual server with named pipes 313062 HOW TO: Connect to a database by using Active Server Pages in Windows 2000 313295 HOW TO: Use the server name parameter in a connection string to specify the client network library 320728 HOW TO: Resolve "The maximum connection limit has been reached" error message 328306 INF: Potential causes of the "SQL Server does not exist or access denied" error message (Возможные причины появления сообщения об ошибке "SQL-сервер не существует, или отсутствует доступ") 247931 INF: Authentication methods for connections to SQL Server in Active Server Pages 169377 How to access SQL Server in Active Server Pages 328383 INF: SQL Server clients may change protocols when they try to connect 238949 HOWTO: Set the SQL Server network library in an ADO connection string 270126 PRB: How to manage client connectivity to both SQL Server 2000 virtual servers after an active/active cluster 7.0 upgrade 316779 PRB: Clients with Force Protocol Encryption set on may fail to connect with an IP address 216643 INF: ODBC/OLEDB connect options not seen when tracing connections to SQL Server 7.0 265808 INF: How to connect to an SQL Server 2000 named instance with the previous version's client tools 191572 INFO: Connection pool management by ADO objects called from ASP 313173 Sample connection pool manager for use with Microsoft SQL Server 2000 driver for JDBC 237844 HOWTO: Enable ODBC connection pooling in a Visual Basic ADO application 259569 PRB: Installing third-party product breaks Windows 2000 MDAC registry settings
Информация в статье применима к Microsoft SQL Server 2000 Standard Edition.

По материалам статьи Microsoft:  How to troubleshoot connectivity issues in SQL Server 2000 (support.microsoft.com/kb/827422)
Перевод Ирины Наумовой, SQL.RU

А вообще, народ читает