Ошибка odbc sqlstate hyt00

PHP Driver version or file name
PDO
SQL Server version
SQL SERVER 2017 DOCKER IMAGE, SQL SERVER 2017 EXPRESS
Client operating system
WINDOWS 10 running Docker php:7.2-fpm image
PHP version
7.2.19
Microsoft ODBC Driver version
ODBC Driver 17 for SQL Server
Table schema
new server, master database
Problem description
Can't connect from PHP(served using nginx) running inside a docker container (php:7.2-fpm) to SQL SERVER running inside docker container (mcr.microsoft.com/mssql/server:2017-latest) or even SQL Server Express running locally on my windows 10 machine.
Expected behavior and actual behavior
I would expect that I could make a database connection since I've installed all the requirements carefully. But I get a login timeout error every time.
Repro code or steps to reproduce

Some background:
I’ve ran all of this in my docker container (php:7.2-fpm) to get the drivers installed and enabled:

curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
ACCEPT_EULA=Y apt-get install msodbcsql17
ACCEPT_EULA=Y apt-get install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
apt-get install unixodbc-dev
pecl install sqlsrv
pecl install pdo_sqlsrv
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:s*||"`/30-pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:s*||"`/20-sqlsrv.ini

I’ve created my sql server docker container and ran it. Docker ps shows it running, and I can connect to it using Azure Data Studio and run queries. I’ve installed sql server express on my windows 10 and created a login, user and password and confirmed they are in there, and ran queries successfully in the sqlcmd that opens when you install sql server.

docker pull mcr.microsoft.com/mssql/server:2017-latest

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<removed-for-my-protection>" -p 1433:1433 --name myr_sqlsrv -d mcr.microsoft.com/mssql/server:2017-latest

I’ve tried connecting using PDO to the dockerized sql server:

$connection = new PDO(
    "sqlsrv:Server=myr_sqlsrv,1433;Database=master",
     'SA',
    '<removed-for-my-protection>'
 );
print_r($connection);

AND using PDO to the local one running on my machine:

$connection = new PDO(
        "sqlsrv:Server=localhostSQLEXPRESS,1433;Database=master",
        'myr',
        'root1234!@#$'
 );
print_r($connection);

Which both result in:

Error Code: 500
Error: PDOException: SQLSTATE[HYT00]: [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired

I’ve tried using the most basic php described in the php documentation:

$serverName = "myr_sqlsrv";
$connectionInfo = array( "Database"=>"master", "UID"=>"sa", "PWD"=>"<removed-for-my-protection>");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) {
        echo "Connection established.<br />";
}else{
        echo "Connection could not be established.<br />";
        die( print_r( sqlsrv_errors(), true));
}

AND:

$serverName = "localhostsqlexpress";
$connectionInfo = array( "Database"=>"master", "UID"=>"myr", "PWD"=>"root1234!@#$");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

Which results in:

Connection could not be established.
Array ( [0] => Array ( 
[0] => HYT00 [SQLSTATE] => HYT00 
[1] => 0 [code] => 0 
[2] => [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired 
[message] => [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired ) 
[1] => Array ( 
[0] => 08001 [SQLSTATE] => 08001 
[1] => 11002 [code] => 11002 
[2] => [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2AFA 
[message] => [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2AFA ) 
[2] => Array ( 
[0] => 08001 [SQLSTATE] => 08001 
[1] => 11002 [code] => 11002 
[2] => [Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. 
[message] => [Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. ) )

And:

Connection could not be established.
Array ( [0] => Array ( 
[0] => HYT00 [SQLSTATE] => HYT00 
[1] => 0 [code] => 0 
[2] => [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired 
[message] => [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired ) 
[1] => Array ( 
[0] => 08001 [SQLSTATE] => 08001 
[1] => -1 [code] => -1 
[2] => [Microsoft][ODBC Driver 17 for SQL Server]MAX_PROVS: Error Locating Server/Instance Specified [xFFFFFFFF]. 
[message] => [Microsoft][ODBC Driver 17 for SQL Server]MAX_PROVS: Error Locating Server/Instance Specified [xFFFFFFFF]. ) 
[2] => Array ( 
[0] => 08001 [SQLSTATE] => 08001 
[1] => -1 [code] => -1 
[2] => [Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. 
[message] => [Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. ) )

I’ve also read every dozens of posts including other issue posts on this board with the same error message and none of the solutions posed have worked.

Hi,

I am getting similar error «SqlState HYT00, Login timeout expired

A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct
and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.

TCP Provider: Error code 0x6F»

 while trying to connect from Linux using «sqlcmd -S VM-5555 -U DWH_ETL»

whereas 
I am able to connect  the same server and instance from MS SQL management studio, I am also able to ping the server from backend.

Entries of .ini are

$cat  
odbc.ini

[VM-5555]

Driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0

Server=tcp:VM-5555.xxx.nsroot.netMSSQL_DWH_SIT,1443

Database=DWH_Report_SIT

cat   
odbcinst.ini

[SQL Server Native Client 11.0]

Description=Microsoft SQL Server ODBC Driver V1.0 for Linux

Driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0

Threading=1

UsageCount=1

I tried & \ before instance name.

I was also able to connect other server from Linux, but without using the instance name.

that time entry in .ini was similar

cat  
odbc.ini_old

[VM-1272-6223]

Driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0

Server=tcp:vm-1222.xxx.nsroot.net

Database=DWH_Report_DEV

Can someone pls suggest what is wrong or how can I eliminate contributing factor.

thanks

   twilight5023

08.05.07 — 18:52

Очень надеюсь на вашу помощь, хочу разобраться в следующей ситуации. Итак, имелось 1С 7.7 (25), ТиС, SQL Server 2000 — 8.00.679(SP2), практически год безупречной работы. Сегодня при попытке проведения счета-фактуры появилась ошмбка SQL State: HYT00 Native: 0 Message: [Microsoft][ODBC SQL Server Driver]Время ожидания истекло, попытка повторить транзакцию к успеху не привела. Соответственно на всех машинах в сети, то же самое. Работа остановилась. Перезапустил SQL сервер — то же самое, перезагрузил сервер — эффекта 0. Отключив сервер от сети, попробовал зайти с него в 1С и создать новую реализацию, при попытке записать — SQL State: HYT00 Native: 0 Message: [Microsoft][ODBC SQL Server Driver]Timeout expired. Почитал всякие посты на всевозможных форумах. Отключил named pipes, оставив только TCP/IP, попробовал зайти с рабочей станции — без named pipes соединяться с SQL почему-то отказался. Опять же отключив сервер от сети, зашел с него в 1С. Реализация не записывалась с указанной выше ошибкой. Минут 15 пробовал всевозможные варианты, затем в конфигураторе прописал в параметрах соединения с базой, вместо имени сервера sqlserver IP’шник — 127.0.0.1, запустил Profiler, открыл базу и попробовал записать реализацию. На этот раз ошибка не появилась, но судя по профайлеру он «думал» над каким-то select’ом из таблицы DH1611 (судя по 1Cv7.DDS — как раз документ реализация) добрых 5 минут, при этом это было достаточно заметно по активности винтов в RAID’е. После чего реализация все-таки записалась и все вернулось к нормальной работе. Вернул named pipes, сейчас все работает. Вопрос, который мне не дает покоя. ЧТО ЭТО БЫЛО? Почему до того как я прописал вместо имени sql сервера его 127.0.0.1 документ не записывался, совпадение? Может быть дадите какие-то рекомендации, в плане — как исключить в дальнейшем подобную ситуацию, порядок действий при ее возникновении, выяснение причины произошедшего? Стоит ли обновить SQL Server до SP3? Может быть проблема именно в этом? Возможно ли возникновение такой ситуации (может быть сейчас глупо прозвучит, но все же) из-за какой-то внутренней блокировки таблиц в SQL? Как вы понимаете после перезагрузки сервера отключенного от сети, пользователи не работали, никакие ресурсоемкие отчеты и т.п. не выполнялись … вообщем я не знаю на что и думать. Надеюсь на вашу помощь.

   twilight5023

2 — 08.05.07 — 18:54

+0: http://www.mista.ru/kb/topic4990.htm — это читал. Если все дело, по вашему мнению, в версии SQL, то какой на данный момент последний SP к нему, и последняя версия драйверов ODBC?

   sapphire

3 — 08.05.07 — 19:16

ну в (2) не совсем то. что нужно. Почитай логи скуля, системы… просто так ничего не бывает.

   jcage

4 — 08.05.07 — 19:33

(3) у меня была похожая проблема. База самописка, достаточно легкая — локально на моем компьютере при записи база висла и могла висеть несколько минут — потом ошибка, почти как в (0). Пробовал даже переставить sql и выгрузку/загрузку — не помогало. В результате я взял рабочий МД из каталога БД и у клиента новый архив базы. После восстановления из архива — все заработало. Что это было так и не понял. Уже прошло полгода — на рабочей таких багов не замечается.

P.S. В базе много прямых запросов.

   romix

Модератор

5 — 08.05.07 — 19:33

(0) Кто-то заблокировал проведение документов, и пошел обедать (например, в модуле проведения есть модальное окно). Даже если его нет, в движке 1С есть ошибка, когда окно «Недостаточно прав доступа» открывается именно внутри транзакции проведения.

Кто именно всех блокирует, можно посмотреть в Enterprise Manager.

Как вариант, можно всех выгнать и попросить заново войти
(я использую выгонялку Книга знаний: Альтернативное стартовое окно для 1С:Предприятие 7.7 ).

   jcage

6 — 08.05.07 — 19:34

(5) а почему после перезагрузки сервера ошибка не пропала? Врядли в этом дело.

   romix

Модератор

7 — 08.05.07 — 19:42

(6) Даже не знаю как это могло получиться, ск. всего внутренняя ошибка MS-SQL.
Имеет смысл обновить движок, почистить папку временных файлов, сделать стоп-старт серверу, выгрузить-загрузить…
Также возможно имеет смысл поставить последний сервис-пак MS-SQL (там же наверняка исправляются всякие ошибки).

   twilight5023

8 — 08.05.07 — 19:58

В логах «C:Program FilesMicrosoft SQL ServerMSSQLLOG» есть только упоминание о:

2007-05-08 17:27:42.65 spid8     The header for file ‘C:Program FilesMicrosoft SQL ServerMSSQLdatamsdblog.ldf’ is not a valid database file header. The PageAudit property is incorrect.
2007-05-08 17:27:42.65 spid8     Device activation error. The physical file name ‘C:Program FilesMicrosoft SQL ServerMSSQLdatamsdblog.ldf’ may be incorrect.

В Enterprise Manager’е она значится, как msdb (Suspect) … Может ли это иметь отношение к моей проблеме, что это за DB такая, и как ее вывести из состояния suspect?

   jcage

9 — 08.05.07 — 20:00

а лог файл каких размеров?..

   twilight5023

10 — 08.05.07 — 20:04

В смысле? errorlog от MSSQL или msdblog.ldf? Первый 3 килобайта, второй около двух метров. За что отвечает база msdb и насколько опасно то, что она находится в состоянии suspect?

   romix

Модератор

11 — 08.05.07 — 20:32

А база как называется в MS-SQL?

   twilight5023

12 — 08.05.07 — 23:17

Вообщем начитался я тут всякого:

http://www.klerk.ru/soft/1c/?15077 — тут рассказывается про восстановление пользовательских баз данных, мне не помогло конечно, ибо msdb системная, но зато узнал что такое sp_attach_db и sp_attach_single_file_db. Думал воспользоваться вторым (аттач одного mdf’f) для восстановления msdb, не тут то было. Потом стал читать:

http://support.microsoft.com/kb/224071/ru — Перемещение баз данных SQL Server в новое местоположение с помощью операций Detach и Attach. Как раз про перемещение системных баз данных. В моем случае можно было (в теории) сделать detach msdb, а потом attach_single_file_db, но почему-то, несмотря на прописанные ключи -c -m -T3608, он на любых операциях аттача / детача с системными таблицами говорил:

Server: Msg 7940, Level 16, State 1, Line 1

System databases master, model, msdb, and tempdb cannot be detached.

Хотя по идее должен был разрешить.

В итоге взял два файла из дистрибутива MSSQL — x86DATAmsdblog.ldf и x86DATAmsdbdata.mdf и подсунул их SQL Server’у.

Может кто-нибудь прокомментирует, почему он не давал сделать detach. Я грешу на то, что msdb находилась в suspect’е, но ведь он ясно сказал что именно системные таблицы не могут быть отключены, почему-то он ключи проигнорировал, интересно почему? Сейчас вроде бы все работает, но что-то меня беспокоит … не чревата ли такая подмена msdb?

   romix

Модератор

13 — 09.05.07 — 02:41

(12) Детач не дает сделать для системных таблиц.
Но можно остановить сервер и подсовывать таблицы.

По идее не чревата, только вот почему оно вот так все накернилось?
Может, заряженная частица пролетела, и все испортила? :-)

   КонецЦикла

14 — 09.05.07 — 03:09

>>Вернул named pipes
Чего не айпи?
>>Стоит ли обновить SQL Server до SP3?
Можно и до 4-го :)

   Стальная Крыса

15 — 09.05.07 — 03:29

в мире мелкософта есть много чудес   :)
вот одно из них:
однажды после переезда MSSQL с 1-процессорного сервера на на 2х процевый
с некоторых(!!!) машин невозможно было запустить 1С…
не буду описывать пляски с бубном… но все решилось установкой нового, на тот момент, MDAC на «проблемные» машины.   :)
зы. естественно ОС и SQL на другом сервере ставились с того же самого дистрибутива, с какого ставилось и на первый.

   twilight5023

16 — 10.05.07 — 12:55

(13) Как раз в статье http://support.microsoft.com/kb/224071/ru описан способ с помощью которого можно сделать detach для системных таблиц (статья по ссылке как раз о перемещении системных таблиц в другое месторасположение), только вот у меня этот способ почему-то не сработал.

Ну вообщем ладно, главное что все работает. Спасибо всем принимавшим участие в обсуждении.

  

Conditer

17 — 30.07.07 — 12:21

Такая же ошибка у меня начала неожиданно возникать на некоторых машинах при попытке вообще войти в 1С. Причем на одной через день ошибка перестала появлятся сама. А еще через 2 месяца вдруг другие 2 машины уперлись  — и ни в какую к SQL серверу не подключались. Как тут посоветовали, поставил в конфигураторе вместо имени сервера IP-адрес — всё заработало. Чудеса…

Asked
9 years, 4 months ago

Viewed
23k times

I’m supporting an IIS web application that constructs and sends SELECT statements to SQL Server. Sometimes the statements are not very efficient or are against quite large tables so they take three or four minutes to complete when run from SQL Management Studio. When the statements are sent from the application, the following time-out is reported by it:

ERROR [HYT00] [Microsoft][ODBC SQL Server Driver]Timeout expired SQL:
SELECT … large statement here …

It’s not possible to (immediately) improve the SQL statements sent so I need to temporarily increase whatever time-outs are being hit. But I cannot seem to find a time-out that corresponds to this error message. I am hoping that someone here can tell me what time-out it refers to and where it can be viewed/changed?

gofr1's user avatar

gofr1

15.7k11 gold badges42 silver badges52 bronze badges

asked Jan 20, 2014 at 10:19

1

You can alter your connection string and add Timeout=[seconds] to your connection string
Connection String MSDN.

Be aware though that the HTTP request can time out too, so make sure that your SQL is not more than that. Then there is the user, very annoying factor ;-) this implementation can also time out- loose interest in your site.

better fix the issue by splitting the table over several disk files and add CPU or Ram. one thing that also helps is to query against a view with the same name as the table and remove access to the table. like this you can tune the access on a location that does not have you changing the application code.

There are lots of things we DBA’s do to fix programmer’s errors, the encapsulation method mentioned is only one of many options.

Hope it helps

Walter

Brett's user avatar

Brett

1,9312 gold badges28 silver badges34 bronze badges

answered Feb 15, 2014 at 14:16

Walter Verhoeven's user avatar

I am getting the following error when trying to connect to my Microsoft SQL Server database using the default port number:

Error. Cannot connect to database: SQLSTATE[HYT00]: [unixODBC][Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired

This is the PHP code I am using to connect to the database:

<?php

class DB_Connect {
    private $db;

    function construct() {
    }

    public function connect() {
        require_once 'String.php';

        try {
            $this->db = new PDO('sqlsrv:Server=$server,1433; Database=$db', $user, $pass);
        } catch (PDOException $e) {
            return "Error. Cannot connect to database: " . $e->getMessage();
        }
    }
}

?>

I am 100% sure that the credentials are correct since they are workign when I run the script on localhost using xampp.

What I have done till now:

  • Installed the pdo drivers on the linux machine
  • Installed the obdc drivers on the linux machine
  • Installed the sqlsrv drivers on the linux machine

enter image description here

This is the configuration I am using on the server:

PHP Version 7.0.30 connecting to SQL Server 2017 hosted on Gearhost.

Can anyone please shed a light on what might be wrong?

Понравилась статья? Поделить с друзьями:
  • Ошибка odbc sqlstate hy000 номер ошибки 1045
  • Ошибка oh1 частотный преобразователь
  • Ошибка odbc sqlstate 42000 номер ошибки 4060
  • Ошибка ogg dll для gta san andreas
  • Ошибка odbc sqlstate 42000 номер ошибки 156