2009-05-08 32 views
9

Tôi đang cố gắng lấy dữ liệu từ Máy chủ SQL từ xa. Tôi có thể truy cập máy chủ từ xa bằng cách sử dụng xác thực SQL; Tôi đã không có bất kỳ may mắn bằng cách sử dụng các thông tin tương tự với sp_addlinkedserver.Gặp sự cố khi thêm máy chủ SQL được liên kết

Tôi đang cố gắng một cái gì đó như thế này:

Exec sp_dropserver 'Remote', 'droplogins' 
go 

EXEC sp_addlinkedserver 
    @server='Remote', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='0.0.0.0' 

EXEC sp_addlinkedsrvlogin 
    @useself='FALSE', 
    @rmtsrvname='Remote', 
    @rmtuser='User', 
    @rmtpassword='Secret' 

Select Top 10 * from Remote.DatabaseName.dbo.TableName 

Đây là những gì tôi nhận được:

 

OLE DB provider "SQLNCLI" for linked server "Remote" returned message 
"Login timeout expired". 

OLE DB provider "SQLNCLI" for linked server "Remote" returned message 
"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.". 

Msg 53, Level 16, State 1, Line 0 
Named Pipes Provider: Could not open a connection to SQL Server [53]. 

Một lần nữa, tôi có thể truy cập vào máy chủ trực tiếp (trong SQL Management Studio) sử dụng những thông tin chính xác, do đó, nó không phải là vấn đề với mạng hoặc thông tin đăng nhập của tôi.

Hầu hết các ví dụ tôi đã thấy trực tuyến dường như liên quan đến tài khoản miền Windows, trái ngược với thông tin đăng nhập bảo mật SQL. Điều này không làm việc với xác thực SQL?

Trả lời

6

Tính năng này hoạt động với xác thực sql. Trong thực tế nó dễ dàng hơn, vì bạn không phải thiết lập Kerberos nếu bạn sử dụng xác thực SQL.

Một điều khó hiểu về các thông báo lỗi của bạn, địa chỉ của bạn là một địa chỉ IP: 123.45.678.90

thông báo lỗi của bạn đang nói về Named Pipes. Đây có thể là một đầu mối không?

Bạn không phải tham chiếu máy chủ trong TSQL theo địa chỉ IP của nó. Nếu bạn thêm alias on the local server, trỏ đến máy chủ từ xa, bạn có thể đặt tên hợp lý hơn. Đề cập đến nó bằng địa chỉ IP rõ ràng là không đạt yêu cầu.

+0

Đó là một suy nghĩ thú vị. Tôi nhận được kết quả tương tự nếu tôi nhập địa chỉ IP không có thật hoặc "foofoofoo" trong tham số @datasrc. –

+0

Cảm ơn, điều này đã dẫn tôi đến giải pháp đúng. –

+1

Trả lời tôi sau đó người đàn ông tốt của tôi, tôi khao khát một điểm số cao = D –

1

Nếu không thành công trên đường ống được đặt tên khi bạn chỉ định địa chỉ IP, hãy thử thêm tiền tố địa chỉ IP bằng "tcp:" và xem liệu nó có giúp đặt nó trên đúng đường dẫn hay không.

+0

Cảm ơn - Tôi đã thử điều này và nó đã không giúp đỡ. –

+1

Đối với những người tìm cách kết nối bằng cách đổi tên miền @ datasrc = 'tcp: 0.0.0.0' với @ datasrc = 'mydomain.com', không có SERVER = như trong nhiều bài đăng khác xung quanh. –

2

đặn nó ra, nhờ vào một dòng hướng dẫn trong giao diện thuật sĩ SMS để thêm một máy chủ được liên kết: "If SQL Server is selected, then the Linked Server name is also the network name of the server."

tôi nghĩ tên của máy chủ liên kết chỉ là một bí danh tùy ý.

Điều này hoạt động như một sự quyến rũ - thật đáng tiếc là tôi phải nhập IP (trong ngoặc) mỗi khi tôi muốn sử dụng máy chủ được liên kết này, nhưng bạn có nó.

Exec sp_dropserver '0.0.0.0', 'droplogins' 
go 

EXEC sp_addlinkedserver 
    @server='0.0.0.0', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='0.0.0.0' 

EXEC sp_addlinkedsrvlogin 
    @useself='FALSE', 
    @rmtsrvname='0.0.0.0', 
    @rmtuser='user', 
    @rmtpassword='secret' 
go 

Select Top 10 * from [0.0.0.0].DatabaseName.dbo.TableName 
+0

wow, điều đó thật tệ. Bạn chắc chắn bạn không có vấn đề về độ phân giải tên? –

+0

Không chắc chắn ý của bạn là gì - không có tên miền nào được liên kết với máy chủ DB, chỉ là một địa chỉ IP. –

+0

Vâng, tôi có cùng sự cố này ngay bây giờ. Tôi đã thử làm việc xung quanh nó bằng cách chỉ định SQLOLE (hoặc bất kỳ) làm nhà cung cấp và cho nó một chuỗi kết nối, trong trường hợp đó @server thực sự là một tên logic tùy ý ... nhưng điều này sẽ không kết nối hoàn toàn trên máy sản xuất (I quên lý do tại sao). Vì vậy, tôi quay trở lại phương pháp này và tóm tắt vị trí thực tế bằng cách sử dụng một cái nhìn trên các bảng quan tâm, mà đã làm việc cho đến nay. – harpo

1

sp_configure 'Ad Hoc Queries Distributed', 1

tiếp theo

reconfigure với override

đã kiểm tra khu vực SQL Surface configuraton -> Databaseengine -> Remoteconnections -> Loacal và remoteconnections -> shouild be Sử dụng cả hai tùy chọn đường ống TCP/IP và đặt tên là đánh dấu (nếu không chọn tùy chọn đó và khởi động lại)

điều này phải giải quyết vấn đề Nhà cung cấp OLE DB "SQLNCLI" cho máy chủ được liên kết "Từ xa" trả về thư "Đã xảy ra lỗi khi thiết lập kết nối với máy chủ. Khi kết nối với SQL Server 2005, lỗi này có thể do sự kiện thực hiện theo cài đặt mặc định, SQL Server không cho phép kết nối từ xa . ".

9

Để giải quyết vấn đề trên, chúng tôi sửa đổi định nghĩa máy chủ liên kết để xác định TCP cụ thể:

EXEC sp_addlinkedserver 
    @server='TEST_LINK', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='tcp:0.0.0.0' 

EXEC sp_addlinkedsrvlogin 
    @useself='FALSE', 
    @rmtsrvname='TEST_LINK', 
    @rmtuser='user', 
    @rmtpassword='secret' 

này đã làm việc cho tôi. Phương pháp này cũng cho phép tôi chỉ định một cổng phi tiêu chuẩn cho các máy chủ từ xa:

EXEC sp_addlinkedserver 
    @server='TEST_LINK', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='tcp:0.0.0.0,1111' 

Tôi hy vọng điều này sẽ giúp

0

Đôi khi các giao thức đã được kích hoạt và cấu hình diện tích bề mặt cho phép kết nối từ xa, nhưng SQL Dịch vụ Trình duyệt máy chủ chưa được khởi động lại vì cấu hình đã được thiết lập. Điều này có nghĩa là cấu hình không hoạt động.

Thử khởi động lại Trình duyệt SQL Server dưới dạng bước khắc phục sự cố nếu tất cả các cài đặt cấu hình của bạn có vẻ chính xác.

Mike

Các vấn đề liên quan