Mae'r rhan fwyaf o bobl yn trin enw gwesteiwr SQL Server fel cyfeiriad cyflawn, a VPN fel rhywbeth naill ai wedi'i ganiatáu neu beidio. Yn ymarferol, mae enghraifft enwol yn gorfodi'r cleient i wneud ail chwiliad ar ôl DNS, a'r chwiliad hwnnw yw'r rhan y mae twnnel yn ei thorri amlaf. Mae pwynt terfyn penodol yn ei osgoi, a dyna pam y gall tcp:host,port weithio tra bo host\INSTANCE yn dod i ben. Y gwahaniaeth yw rhwng canfod y gwasanaeth a chael caniatâd i'w ddefnyddio.

Y myth: un enw gwesteiwr yw un porth

Mae'r enw gwesteiwr yn datrys i gyfeiriad, a dyna lle mae ei waith yn gorffen. Mae enghraifft enwol yn ychwanegu enw enghraifft y mae'n rhaid i'r gweinydd ei gyfieithu i borth TCP, ac ni all y cleient ei ddyfalu. Porth 1433 yw'r rhagosodiad ar gyfer enghraifft ragosodedig, nid nodwedd pob enghraifft ar y peiriant. Mae trin y ddau fel yr un peth yn cynhyrchu'r symptom clasurol: mae ping yn gweithio, mae DNS yn gweithio, nid yw sgan 1433 yn dangos dim, a'r casgliad yw bod y rhwydwaith yn blocio SQL.

Mae ail ragdybiaeth yn methu yn yr un modd: bod agor TCP 1433 yn ddigon. Os yw'r enghraifft yn gwrando yn rhywle arall, dim ond profi bod rhywbeth arall yno y mae 1433 agored. Rhaid i'r porth gyd-fynd â'r gwrandäwr, a bod y gwrandäwr yn fanylyn ffurfweddu ar ochr y gweinydd, dylid gofyn am hynny yn hytrach na'i ddyfalu.

Yr hyn y mae'r cleient yn ei wneud mewn gwirionedd gydag enghraifft enwol

Ar ôl datrys y gwesteiwr, mae'r cleient yn anfon cais darganfod i SQL Server Browser ar UDP 1434 ac yn gofyn pa borth y mae'r enghraifft enwol yn ei ddefnyddio. Mae gwasanaeth y porwr yn ateb o gofrestr y gweinydd ei hun, ac yna mae'r cleient yn agor cysylltiad TCP i'r porth hwnnw. Mae dau brotocol a dau borth yn rhan o hyn cyn i unrhyw gynnig mewngofnodi gael ei wneud.

nslookup sqlhost.corp.example
nc -vzu sqlhost.corp.example 1434
Get-Service -Name SQLBrowser

Dyna pam y mae blocio UDP yn unig yn cynhyrchu terfyn amser sy'n edrych fel gwesteiwr marw. Os yw gwasanaeth y porwr wedi'i stopio neu wedi'i analluogi, mae'r cais darganfod yn aros heb ateb er bod peiriant y gronfa ddata yn rhedeg ac mae ei borth TCP yn agored. Os yw'r enghraifft wedi'i ffurfweddu â phorth statig, mae'r cleient yn dal i ofyn oni bai bod y pwynt terfyn wedi'i roi'n uniongyrchol iddo. Mae pob un o'r methiannau hyn yn edrych yn union yr un fath yng neges gwall y rhaglen, ac mae angen gwahanol atebion arnynt.

Mae gwasanaeth y porwr yn gyfleustra darganfod, nid y gronfa ddata. Nid yw ei stopio yn stopio'r peiriant, ac nid yw ei gychwyn yn agor porth TCP yr enghraifft.

Pam mae'r pwynt terfyn penodol yn gweithio pan nad yw'r enw yn gwneud

Mae pwynt terfyn penodol yn tynnu'r chwiliad allan o'r dilyniant: mae'r cleient yn cysylltu'n syth â'r cyfeiriad a'r porth a enwyd gennych. Diagnosis yn gyntaf yw hyn, nid ateb parhaol yn awtomatig, oherwydd gall y porth newid os bydd yr enghraifft yn cael ei hailffurfweddu'n ddiweddarach i un deinamig. Cymharwch y ddau ffurf gyda'r un cleient a'r un cyfrif cyn dod i gasgliadau.

sqlcmd -S "tcp:sqlhost.corp.example,51433" -U app_login -Q "SELECT @@SERVERNAME"
Test-NetConnection sqlhost.corp.example -Port 51433

Os yw'r ffurf benodol yn llwyddo ac mae'r ffurf enwol yn methu, y darganfod yw'r bwlch, a gallwch ddewis sut i'w gau: caniatáu UDP 1434 trwy'r twnnel, neu ofyn i'r gweinyddwr binio porth statig a dogfennu'r pwynt terfyn. Mae'r ddau yn benderfyniadau bwriadol â chostau cynnal a chadw gwahanol. Nid yw agor pob porth yn yr ystod yn un o'r rheini, a dyna'r opsiwn a gynigir fel arfer ar ddiwedd diwrnod hir. Cofnodwch y dewis lle mae'r llinynnau cysylltu yn byw.

Os nad yw'r un ffurf yn gweithio, mae'r broblem yn uwch na'r darganfod. Gwiriwch y gwrandäwr, y llwybr a'r rheol mynediad ar gyfer y porth y mae'r enghraifft yn ei ddefnyddio mewn gwirionedd cyn rhoi'r bai ar wasanaeth y porwr.

Ar ôl darganfod: dilysu a hunaniaeth yn wahanol

Mae methiant mewngofnodi yn ddigwyddiad gwahanol i derfyn amser, ac nid yw hunaniaeth VPN yn dod yn fewngofnod SQL oherwydd y twnnel. Unwaith y bydd y cleient yn cyrraedd y porth cywir, mae peiriant y gronfa ddata yn cymhwyso ei ddilysu a'i ganiatadau ei hun. Cymysgu'r ddau gam mewn un tocyn yw'r ffordd y mae problem darganfod yn cael ei neilltuo i'r tîm anghywir. Darllenwch rif y gwall cyn newid unrhyw beth.

Cadwch yr enw gwesteiwr dogfennedig os yw'r gyrrwr yn dilysu tystysgrif y gweinydd, oherwydd gall cysylltu trwy gyfeiriad rhifol newid y gwiriad hwnnw yn lle datrys y broblem wreiddiol. Mae gyrwyr Microsoft diweddar yn amgryptio ar y rhagosodiad, felly mae anghydfod enw yn ymddangos fel gwall tystysgrif ar ôl cysylltiad TCP llwyddiannus. Cynnydd yw hyn, nid methiant newydd.

Y myth i'w roi o'r neilltu yw bod enw gwesteiwr SQL Server yn gyfeiriad cyflawn. Gwesteiwr yw ef, ynghyd, ar gyfer enghraifft enwol, â chwiliad na fydd y twnnel efallai yn ei gario. Enwch y porth, enwch y llwybr darganfod, a bydd y methiant nesaf yn dweud wrthych pa haen i'w thrwsio.

Erthyglau cysylltiedig