programing

PHP에서 SQL Server에 연결하는 동안 "Adaptive Server를 사용할 수 없거나 존재하지 않습니다" 오류가 발생했습니다.

stoneblock 2023. 8. 2. 08:40

PHP에서 SQL Server에 연결하는 동안 "Adaptive Server를 사용할 수 없거나 존재하지 않습니다" 오류가 발생했습니다.

unix ODBC 및 Free를 사용하여 Mac에서 SQL Server 2005 DB에 연결하려고 합니다.제가 여기서 개요를 설명한 것처럼 TDS.그러나 동일한 설정을 사용하여 다른 DB에 연결하려고 하면 다음과 같은 메시지가 나타납니다.

Connection Failed:[FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist.

다음은 내 freetds.conf 설정입니다.

[my_db]
host = 12.34.56.789
port = 1433
tds version = 8.0

그리고 여기 제 ODBC가 있습니다.ini:

[my_dsn]
Driver = /opt/local/lib/libtdsodbc.so
Description = My Database
Trace = no
Servername = my_db
Database = MyDB

[ODBC Data Sources]
my_dsn = FreeTDS

이 컴퓨터에 설정한 다른 DB(위에 연결된 블로그 게시물에 설명됨)에 여전히 연결할 수 있으므로, 오류가 Mac 엔드에 있는 것이 아니라고 확신합니다.서버에서 올바른 IP 주소와 포트를 사용하고 있음을 확인했습니다.무엇이 문제가 될 수 있는지, 그리고 그것이 서버 쪽에 있는지에 대한 생각은 없습니까?

SQL 서버에 대한 정보를 참조

tsql -LH SERVER_IP_ADDRESS

locale is "C"
locale charset is "646"
ServerName TITAN
InstanceName MSSQLSERVER
IsClustered No
Version 8.00.194
tcp 1433
np \\TITAN\pipe\sql\query

freetds.conf를 설정합니다.

tsql -C    
freetds.conf directory: /usr/local/etc

[TITAN]
host = SERVER_IP_ADDRESS
port = 1433
tds version = 7.2

3 시도

tsql -S TITAN -U user -P password

OR

 'dsn' => 'dblib:host=TITAN:1433;dbname=YOURDBNAME',

http://www.freetds.org/userguide/confirminstall.htm 도 참조하십시오(예 3-5).

20009 메시지가 표시되면 기계에 연결하지 않았다는 것을 기억하십시오.구성 또는 네트워크 문제이지 프로토콜 오류가 아닙니다.서버가 가동 중인지, 이름과 IP 주소가 비어 있는지 확인합니다.TDS가 사용 중이며 구성된 포트를 수신 중입니다.

수 많은 시간의 좌절 끝에 저는 모든 일을 할 수 있었습니다.

odbc inst.ini:

[FreeTDS]
Description = FreeTDS Driver v0.91
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
fileusage=1
dontdlclose=1
UsageCount=1

odbc.ini:

[test]
Driver = FreeTDS
Description = My Test Server
Trace = No
#TraceFile = /tmp/sql.log
ServerName = mssql
#Port = 1433
instance = SQLEXPRESS
Database = usedbname
TDS_Version = 4.2

FreeTDS.conf:

[mssql]
host = hostnameOrIP
instance = SQLEXPRESS
#Port = 1433
tds version = 4.2

첫 번째 테스트 연결(mssqlfreets.conf의 섹션 이름입니다):

tsql -S mssql -U username -P password

일부 설정이 표시되어야 하지만 오류는 표시되지 않고 1> 프롬프트만 표시됩니다.종료하려면 종료를 사용합니다.

그런 다음 DSN/FreeTDS를 테스트해 보겠습니다(test는 odbc.ini의 섹션 이름이며 -v는 자세한 내용을 의미합니다).

isql -v test username password -v

Connected(연결됨) 메시지가 표시되어야 합니다.

DSN 또는 odbc 데이터 소스에 문제가 있는 것 같습니다.

먼저 DSN을 우회하고 다음을 사용하여 연결하십시오.

TDSVER=8.0 tsql -S *serverIPAddress* -U *username* -P *password*

문제가 해결되면 DSN 또는 DSN을 사용하는 freets에 문제가 있다는 것을 알 수 있습니다.또한 tds 버전이 서버와 호환되지 않을 수 있습니다.다른 TDSVER 설정(5.0, 7.0, 7.1)을 시도해 볼 수도 있습니다.

저도 같은 문제가 있었습니다, 제 문제는 서버의 방화벽이 현재 IP 주소에서 열리지 않는다는 것이었습니다.

동일한 문제가 발생했을 때 검색을 위해 이 답변이 먼저 나왔기 때문에 응답했습니다.

[08S01][unixODBC][FreeTDS][SQL Server]연결할 수 없음:적응형 서버를 사용할 수 없거나 존재하지 않습니다.

MSSQL 명명된 인스턴스는 포트를 설정하지 않고 올바르게 구성해야 합니다.(freetds 구성에 대한 문서에는 set instance 또는 port NOT BOTH라고 나와 있습니다.)

freets.conf

[Name]
host = Server.com
instance = instance_name
#port = port is found automatically, don't define explicitly
tds version = 8.0
client charset = UTF-8

또한 odbc.ini에서는 이름이 지정된 인스턴스를 사용할 때 포트를 설정할 수 있으므로 하지 마십시오.

방화벽에 문제가 있는 것을 발견했습니다.따라서 IP가 화이트리스트에 있고 방화벽이 연결을 차단하지 않는지 확인합니다.다음을 사용하여 연결을 확인할 수 있습니다.

tsql -H somehost.com -p 1433

제 경우, 출력은 다음과 같습니다.

Error 20009 (severity 9):
  Unable to connect: Adaptive Server is unavailable or does not exist
  OS error 111, "Connection refused"
There was a problem connecting to the server

는 "를 "adaptive server" 의 새 줄에 할 수 ./etc/hosts이 위치가 위치입니다. 합니다(Linux/vmx 파일 형식). Windows 시스템의 경우 아래 어딘가에 호스트 파일이 있는 etc 폴더를 검색합니다.c:\windows\):

...
192.168.1.10    sqlserver10
...

그래서 이 경우에는 이름 결정이 누락되었습니다.

이 오류 메시지가 표시되는 데는 여러 가지 이유가 있을 수 있습니다.누군가에게 도움이 될 수도 있습니다.

이 문제를 일으킬 수 있는 다른 문제를 찾았습니다.FreeTDS v1.3 이상은 프로토콜 버전 8.0을 지원하지 않습니다. 7.1로 이름이 변경된 것으로 알려졌기 때문입니다.

구식 버전과 관련하여 FreeTDS의 초기에 마이크로소프트는 TDS 프로토콜에 대한 공식 사양을 발표하지 않았습니다.MSSQL 2000(제품 8.0)이 출시되었을 때 Microsoft 커뮤니티에서 TDS 프로토콜이 버전 8.0이 될 것이라는 반공식적인 징후가 있었습니다.소더 프리TDS 개발자들은 FreeTDS용으로 그 버전을 채택했습니다.몇 년 후, 마이크로소프트가 공식적인 프로토콜 사양을 발표하기 시작했을 때, TDS 버전이 무료임이 분명해졌습니다.TDS에는 8.0과 9.0이 각각 버전 7.1과 7.2로 표시되어 있었습니다.

버전 8.0은 무료로 사용할 수 없습니다.TDS 버전 1.3. https://www.freetds.org/userguide/ChoosingTdsProtocol.html

TDS 버전은 프리 이전에도 바뀐 것 같습니다.TDS 1.3(우리의 경우 v1.2.21).또한 설명서에 버전 쌍이 혼재되어 있는 것 같습니다.많은 잠 못 이루는 밤들이 걸렸지만, 결국에는~/.freetds.conf우리는 바꿔야 했습니다.

   tds version = 8.0

대상:

   tds version = 7.0

그것을 작동시키기 위해. 덤프 을 또한다덤파설것좋이습다니정는하에 설정하는 것을합니다.freetds.conf(또는)~/.freetds.conf예:), 예:

   dump file = /tmp/freetds.log
   debug flags = 0xffff

자세한 내용은 이 파일을 확인하십시오.

Bud, selinux를 사용하지 않도록 설정하거나 RedHat/CentOS 서버에 다음을 추가합니다.

setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_can_network_connect 1

항상 최고야!

서버 이름을 "localhost"로 변경해 봅니다.

pymssql.connect(server="localhost", user="myusername", 암호="mypwd", database="database", 포트="1433")

언급URL : https://stackoverflow.com/questions/8511369/adaptive-server-is-unavailable-or-does-not-exist-error-connecting-to-sql-serve