Thứ Sáu, 2 tháng 11, 2012

Giải quyết vấn đề lỗi không thể kết nối trong SQL Server

Giải quyết vấn đề lỗi không thể kết nối trong SQL ServerVấn đề:
Thỉnh thoảng bạn gặp những báo lỗi sau về kết nối:
ERROR: (provider: Named Pipes Provider, error: 40 – Could not open a connection toSQL Server) (Microsoft SQL Server, Error:) An error has occurred while establishing a connection to the server. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 5)
Hoặc:
An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 1326)
Hoặc:
SQL Server) (Microsoft SQL Server, Error:) An error has occurred while establishing a connection to the server. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 5)
Những lỗi này xuất hiện với cả hai phương thức kết nối Name Pipe và TCP/IP. Trong bài này chúng ta sẽ xem xét tất cả các vấn đề dẫn đến các lỗi này và cách giải quyết.
Giải pháp:
Có một số lý do dẫn đến các lỗi này, và bạn cần theo các bước sau để kiểm tra một cách tòan diện vấn đề kết nối:


Bước 1:
Phải chắc chắn rằng bạn có thể Ping được đến tên máy Server vật lý, nơi SQL server được cài đặt. Nếu không, bạn hãy thử kết nối tới SQL Server bằng cách sử dụng địa chỉ IP (địa chỉ cho bản SQL mặc định (Default Instance)), hoặc địa chỉIP\Instance Name (Cho bản SQL cài theo tùy chọn Instance Name).


Nếu bạn kết nối được đến SQL Server bằng IP thành công, nhưng bạn lại muốn sử dụng một tên server tham chiếu thay cho địa chỉ IP trên, bạn thêm vào địa chỉ IP và tên tham chiếu cho SQL Server vào file host bằng cách chạy đoạn lệnh này vào cửa sổ RUN: %SystemRoot%\system32\drivers\etc\, mở file host bằng Note pad và thêm vào theo cú pháp IP Name theo hình sau:
Theo hình trên, chúng ta đã thêm vào địa chỉ của máy cài đặt SQL Server là74.200.243.253 và tên tham chiếu cho nó làSQLDBPool, sau khi lưu file này lại chúng ta có thể kết nối vào SQL Server bằng tên SQLDBPool thay vì sử dụng địa chỉ IP.
Bước 2:
Chắc chắn rằng, SQL Server Service đang chạy. Có thể kiểm tra dịch vụ này có đang chạy hay không bằng cách sử dụng lệnh SC hoặc sử dụng SQL Server Configuration Managertrong rất nhiều trường hợp, bạn sẽ thấy lý do là do SQL Server Services đã bị dừng vì lý do nào đó.
Sử dụng SQL Server Configuration Manager:

Sử dụng lệnh SC:

Chú ý đối với SQL cài theo tùy chọn Named Instance, bạn phải viết câu lệnh SC theo cấu trúc sc query mssql$instancename.
Bước 3:
Kiểm tra xem dịch vụ SQL Browsercó đang chạy không. Nếu bạn cài đặt SQL Server theo tùy chọn Named Instance nhưng chưa chỉ định cổng TCP/IP, sẽ dẫn đến đòi hỏi phải kết nối quả cổng động (Listening on a dynamic port). Để giải quyết trường hợp này, thì dịch vụ SQL Browser cần phải được Enabled và đang chạy. Có thể kiểm tra dịch vụ này bằng cách sử dụng 2 cách ở bước 2, trong đó câu lệnh SC sử dụng như sau:
Bước 4:
Phải chắc chắn là bạn đã sử dụng chính cách tên SQL đã được cài đặt, khi bạn cài theo Default Instance, tên máy là lựa chọn tốt nhất để đại diện cho Instance Name, còn nếu cài theo Named Instance và khi bạn truy cập đến một Instance Name ví dụ như sqlexpress, bạn cần gõ địa chỉ đầy đủ Tên máy\Instance Name. Ví dụ: server\SQLExpress.
Bước 5:
Kiểm tra xem SQL Server có ở trong mạng hay không. Bạn có thể sử dụng lệnhSQLCMD –L để liệt kê các Instance đã được cài đặt trong mạng, chú ý là lệnh này chỉ thực hiện được khi SQL Browserđang chạy.
Bước 6:
Kiểm tra phương thức kết nối TCP/IP và Name Pipes cũng như các cổng, bằng cách sử dụng SQL Server Configuration Manager, bạn cần Ennabled chúng lên:
Với phương thức TCP/IP, bạn cần kiểm tra cổng kết nối, bằng cách chuột phải vào phương thức TCP/IP ở cửa sổ trên, cổng mặc định cho phương thức này là 1433, nó có thể đã bị thay đổi cho mục đích bảo mật.
Bước 7:
Kiểm tra xem tùy chọn remote connections đã được Ennabled hay chưa. Chuột phải vào tên Server trong SSMS và chọn Properties. Chọn thẻ Connections, và chắc chắn rằng tùy chọn Allow remote connection to this server đã được đánh dấu. Bạn cần khởi động lại SQL Server Instance để tùy chọn này có hiệu lực, bằng cách chuột phải vào tên server trong SSMS và chọn Restart.
Bạn cũng có thể cấu hình Remote Server Connection bằng cách sử dụng các lệnh sau, và phải khởi động lại SQL Server Instance như trên:
exec sp_configure "remote access", 1 -- 0 on, 1 offexec sp_configure "remote query timeout", 600 -- secondsexec sp_configure "remote proc trans", 0 -- 0 on, 1 offBước 8:
Kiểm tra file Log, kết nối vào SQL Server nội bộ và kiểm tra error log cho cổng vào. Chạy thủ tục XP_READERRORLOGđể đọc file log trong SSMS. Cần phải thấy được nội dung tương tự như sau, trong đó TCP/IP và Named Pipes đã được Ennabled và cổng sử dụng cho phương thức TCP/IP là 1433:
Bước 9:
Cấu hình Window Firewall cho cổng SQL Server và SQL Browser service. Vào Control Panel -> Click Windows Firewall -> và chuyển đến thẻ như hình sau:
Chọn Add Port và điền tên và số cổng như sau:
Click vào Add Program để thêm SQL Browser service. Bạn có thể tìm file SQLBrowser.exe (file chạy của SQL Browser service) trong thư mục: C:\Program Files\Microsoft SQL Server\90\Shared và thêm vào danh sách ngoại lệ (Exception list).
Bước 10:
Nếu bạn có thể kết nối vào SQL Server trực tiếp trên máy chủ, nhưng không thể kết nối vào từ máy khách, chạy thủ thục sau để kiểm tra SPN:
EXEC xp_readerrorlog 0,1,"could not register the Service Principal Name",Null
Nếu SPN không tìm thấy, bạn cần cấu hình và đăng ký SPN theo hướng dẫn ở link sau:http://technet.microsoft.com/en-us/l.../bb735885.aspx
(Nguồn: http://www.mssqltips.com)