Bagaimana cara membuat koneksi SQL Server ODBC ini berfungsi?

30

Catatan: Saya jelas telah mengubah nama server dan IP menjadi yang fiktif.

Inilah yang sedang terjadi. Saya punya server, yang saya panggil MYSERVER, menjalankan Microsoft SQL Server Express 2005. Tepat di server ini sendiri, saya punya koneksi ODBC yang diatur dengan menunjuk ke dirinya sendiri, dan itu sudah berfungsi dengan baik. Saya masuk menggunakan Otentikasi SQL Server (bukan otentikasi Windows), dan sudah diatur seperti ini:

Gambar koneksi ODBC yang baik

Seperti yang saya katakan, itu berhasil. Tapi selanjutnya, saya punya komputer lain yang berada di domain yang sama sekali berbeda / tidak di intranet, yang perlu mengakses SQL Server yang sama ini di-host di MYSERVER. Karena berada di domain yang berbeda, itu tidak mengenali nama "MYSERVER"; Saya harus mengarahkannya ke alamat IP MYSERVER, yang akan kami katakan adalah 123.456.789.012. Tetapi koneksi ODBC tampaknya tidak berfungsi di sana. Saya mencoba mengaturnya seperti ini:

Gambar koneksi ODBC buruk

Ini tidak berfungsi. Ketika saya memasukkan nama pengguna dan kata sandi dan menekan Berikutnya, itu terhenti selama 10 hingga 20 detik, dan akhirnya kembali dengan kesalahan berikut:

Connection failed:
SQLState: '01000'
SQL Server Error: 1326
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).
Connection failed:
SQLState: '08001'
SQL Server Error: 17
[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.

Jika saya mencoba hal yang sama, tetapi mengubah "server" dari yang 123.456.789.012\SQLEXPRESSlama menjadi biasa saja 123.456.789.012, saya mendapatkan kesalahan yang berbeda:

Connection failed:
SQLState: '01000'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Invalid Instance()).
Connection failed:
SQLState: '08001'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection.

Sekarang saya tahu apa yang Anda pikirkan. Anda mungkin berpikir, "ya, Anda mungkin tidak membuka firewall untuk port 1433, dummy." Kecuali saya lakukan, dan saya memverifikasi ini, karena saya dapat berhasil menjalankan:

telnet 123.456.789.012 1433

... dari baris perintah yang saya inginkan. Jadi saya tidak yakin apa yang harus saya lakukan. Saya tahu SQL Server ada, berfungsi, dan koneksi ODBC dapat diatur dengan benar; Saya hanya tidak yakin apa yang saya miliki salah dalam pengaturan koneksi saya yang melempar kesalahan ini. Berdasarkan kesalahan terakhir yang saya sebutkan, akan terlihat bahwa ia dapat terhubung ke server, tetapi tidak dapat menemukan instance (karena saya tidak menentukan satu waktu itu). Jadi apakah itu berarti saya hanya perlu menggunakan beberapa sintaks yang berbeda untuk menentukan IP bersama dengan nama instance? Apa yang saya lakukan? Terima kasih sebelumnya.

soapergem
sumber

Jawaban:

18

Named pipes dan protokol TCIP untuk SQL server 2005 dinonaktifkan secara default. Sudahkah Anda mengaktifkannya di bawah "Manajer konfigurasi server SQL"? Anda dapat menemukan protokol dalam konfigurasi SQL Server Network dan di bawah konfigurasi SQL Native client xx.

Koneksi di server itu sendiri berfungsi berkat protokol "Memori bersama".

Hakan Winther
sumber
9
Saya menerima jawaban Anda karena itu membuat saya di jalur yang benar. Di bawah SQL Server Configuration Manager, TCP / IP sudah diaktifkan selama ini di bawah "SQL Server 2005 Network Configuration> Protocols for SQLEXPRESS" dan "SQL Native Client Configuration> Protokol Klien." Named Pipes sudah diaktifkan di yang terakhir. Saya mengaktifkannya di yang pertama, tapi itu tampaknya tidak membantu (pesan kesalahan yang sama). Akhirnya, saya beralih sumber ODBC untuk menggunakan driver "SQL Native Client" daripada driver "SQL Server", dan yang akhirnya DID bekerja.
soapergem
SoaperGEM terima kasih! Saya tidak akan pernah berpikir untuk mencoba SQL Native Client! Bekerja seperti pesona!
Phillip Senn
5

Apakah Anda mengaktifkan layanan Browser SQL Server sebagai per Cara mengkonfigurasi SQL Server 2005 untuk memungkinkan koneksi remote ?:

Jika Anda menjalankan SQL Server 2005 dengan menggunakan nama contoh dan Anda tidak menggunakan nomor port TCP / IP tertentu dalam string koneksi Anda, Anda harus mengaktifkan layanan SQL Server Browser untuk memungkinkan koneksi jarak jauh. Misalnya, SQL Server 2005 Express diinstal dengan nama instance default Computer Name \ SQLEXPRESS.

Sim
sumber
Apakah menghubungkan ke server \ instance di lokal menggunakan mekanisme yang berbeda dari jarak jauh ??
Sam
@ Sam, lihat jawaban Hakan Winther.
Sim
4

Utas ini memperbaiki pesan kesalahan yang sama untuk saya ketika menggunakan Access untuk menyambung ke server MSSQL 2008. MSSQL 2005 dan sebelumnya berfungsi dengan baik hanya menggunakan nama komputer di string koneksi, tapi saya harus mengubah ke string koneksi di Access ke bentuk lengkap ketika instance ditingkatkan ke 2008:

servername\instancename,portnumber

Mufasa
sumber
2
Itu berhasil untuk saya, kecuali saya tidak memerlukan nomor port.
bgmCoder
2

Saya memiliki masalah yang sama dan berhasil menyelesaikannya dengan mengubah driver SQL ke driver SQL Native Client juga. Ini aneh karena dalam kasus saya ini telah bekerja dengan baik selama bertahun-tahun dan kemudian berhenti bekerja. Saya menduga ini adalah sesuatu di sepanjang garis pengemudi yang korup, mungkin menginstal ulang MDAC mungkin membantu, tetapi untuk saat ini saya senang bahwa itu berfungsi sama sekali!


sumber
1

Apakah itu akan mengenali nama server jika sudah memenuhi syarat? Jika itu MYSERVER.domain.com? Kami harus melakukannya dengan SQL Server saat menghubungkan dari domain yang berbeda. Jika Anda bisa mendapatkan DSN Sistem ODBC untuk terhubung saat Anda menguji sumber data, Anda membuat kemajuan. Jika tidak terhubung dalam pengaturan ODBC, Anda harus memperbaikinya terlebih dahulu.

thursdaysgeek
sumber
Itulah tepatnya yang saya coba lakukan - untuk mendapatkan ODBC System DSN untuk terhubung pertama kali ketika saya menguji sumber data. Jadi saya mencoba saran Anda, mencoba keduanya MYSERVER.domain.com\SQLEXPRESSdan MYSERVER.domain.com, tetapi keduanya memberi saya kesalahan yang sama yang saya sebutkan di atas, masing-masing.
soapergem
Pada prompt perintah di komputer lain ketik "nslookup MYSERVER.domain.com" - apakah itu menyelesaikan ke alamat IP yang benar (123.456.789.012) atau tidak?
Sim
@Sim - Ya, perintah itu tidak benar
soapergem
1

Apakah Anda menggunakan pipa bernama atau TCP pada koneksi ODBC yang berfungsi? Apakah TCP diaktifkan?

aNullValue
sumber
1

Pastikan Anda memiliki koneksi tcp jarak jauh yang diaktifkan untuk server SQL.

Sam
sumber
0

Hanya tembakan liar di sini, tetapi apa yang terjadi jika Anda meletakkan backslash ganda sebelum nama server atau alamat IP? Sepertinya saya bahwa itu biasanya diperlukan untuk sebagian besar koneksi Windows / Microsoft lainnya.

John Gardeniers
sumber
Mencoba double backslash menghasilkan kesalahan 1326 yang sama (yang pertama saya daftarkan).
soapergem
0

Saya punya masalah serupa. Dalam kasus saya sw lain mengkonfigurasi pengaturan ODBC jadi saya tidak dapat mengubah driver. Saya memecahkan kasus saya seperti ini:

  1. Atur pengaturan TCP / IP untuk server untuk menggunakan port 1433
  2. Pada klien masukkan alamat server seperti: 192.168.1.5,1433 (tidak ada nama instance)

Kemudian mulai bekerja. OS Klien: Win7 x64 Driver: sqlsrv32.dll

Mert Gülsoy
sumber
0

Untuk apa nilainya, saya mulai mendapatkan kesalahan ini pada koneksi yang sebelumnya berfungsi. Ternyata layanan MSSQL $ SQLEXPRESS telah terhenti. Restart itu memperbaiki masalah.

dsteele
sumber
0

Saya memiliki masalah ini juga, dan sesederhana ini: server yang terdaftar sebagai server DNS utama untuk server ini telah dihapus, dan aplikasi tidak lagi dapat dengan benar menyelesaikan nama server SQL di jaringan. Semuanya segera mulai berfungsi lagi ketika saya memperbaiki server DNS lokal menjadi yang berfungsi.

jenius komputer Anda
sumber