連結的伺服器可讓您從 Cloud SQL 讀取資料,並在外部 SQL Server 資料庫中執行指令。註冊執行個體後,您可以設定加密連線、對應使用者登入,以及執行分散式查詢或遠端程序呼叫 (RPC)。
註冊執行個體,允許連結伺服器
如要將 cloudsql enable linked servers 旗標新增至執行個體,請使用下列指令:
gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable linked servers"=on
將 INSTANCE_NAME 替換為要用於連結伺服器的執行個體名稱。
詳情請參閱「設定資料庫旗標」。
新增連結的伺服器
如要新增連結的伺服器,請執行 Transact-SQL sp_addlinkedserver 指令:
EXEC master.dbo.sp_addlinkedserver @server = N'LINKED_SERVER_NAME', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'TARGET_SERVER_ID'
更改下列內容:
- 將 LINKED_SERVER_NAME 替換為要建立的連結伺服器名稱。
- TARGET_SERVER_ID 替換為連結伺服器的網路名稱、DNS 名稱或 IP 位址。執行個體名稱請使用
servername\instancename格式。如果執行個體使用非標準通訊埠,請新增通訊埠編號。例如:servername\instancename, 8080。
如要為已登入的使用者新增使用者對應,請執行下列指令:
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LINKED_SERVER_NAME', @useself=N'True'
將 LINKED_SERVER_NAME 替換為連結伺服器的名稱。
如要建立或更新預設遠端登入和密碼,並套用至所有本機登入,請執行下列指令:
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LINKED_SERVER_NAME', @useself=N'False', @locallogin=N'LOGIN', @rmtuser=N'USER_ID', @rmtpassword='PASSWORD';
更改下列內容:
- 將 LINKED_SERVER_NAME 替換為連結伺服器的名稱。
- LOGIN,並使用本機伺服器的登入資訊。
locallogin為 sysname,預設值為 NULL。NULL 指定這個項目適用於連線至rmtsrvname的所有本機登入。如果不是 NULL,locallogin會是 SQL Server 登入或 Windows 登入。如果您使用 Windows 登入,則必須直接存取 SQL Server,或透過具有存取權的 Windows 群組成員身分存取。 - USER_ID,並提供使用者登入資訊。
- PASSWORD,並輸入使用者密碼。
新增使用加密連線的連結伺服器
如要使用加密連線新增連結的伺服器,請執行 Transact-SQL sp_addlinkedserver 指令:
EXEC master.dbo.sp_addlinkedserver @server = N'LINKED_SERVER_NAME', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'TARGET_SERVER_ID, @provstr=N'Encrypt=yes;'
更改下列內容:
- 將 LINKED_SERVER_NAME 替換為要建立的連結伺服器名稱。
- TARGET_SERVER_ID:目標伺服器的名稱,或目標伺服器的 IP 位址和通訊埠號碼。
如果伺服器名稱與憑證中的名稱不同,您必須指出 SQL Server 可以信任伺服器憑證。如要更新供應商字串,請執行下列指令:
EXEC master.dbo.sp_addlinkedserver @server = N'LINKED_SERVER_NAME', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'TARGET_SERVER_ID, @provstr=N'Encrypt=yes;TrustServerCertificate=yes;'
更改下列內容:
- 將 LINKED_SERVER_NAME 替換為要建立的連結伺服器名稱。
- TARGET_SERVER_ID:目標伺服器的名稱,或目標伺服器的 IP 位址和通訊埠號碼。
連結的伺服器查詢
Cloud SQL 支援使用四部分名稱查詢連結的伺服器 (伺服器名稱、資料庫名稱、結構定義名稱和物件名稱),以及下列指令:
詳情請參閱「比較查詢遠端執行選項」。
在連結的伺服器上啟用遠端程序呼叫
遠端程序呼叫 (RPC) 可讓您在連結的伺服器上執行儲存程序。如要新增 RPC,請執行 Transact-SQL sp_serveroption 指令,並加上 RPC 引數。RPC 引數有兩個:
rpc可啟用指定伺服器的 RPC。rpc out可啟用指定伺服器的 RPC。
使用下列 sp_serveroption 指令搭配 rpc 引數,啟用 LINKED_SERVER_NAME 的 RPC:
EXEC sp_serveroption @server='LINKED_SERVER_NAME', @optname='rpc', @optvalue='TRUE'
將 LINKED_SERVER_NAME 替換為連結伺服器的名稱。
使用下列 sp_serveroption 指令搭配 rpc out 引數,啟用 RPC:
EXEC sp_serveroption @server='LINKED_SERVER_NAME', @optname='rpc out', @optvalue='TRUE'
將 LINKED_SERVER_NAME 替換為連結伺服器的名稱。
移除連結伺服器的使用者對應
如要移除先前新增的使用者對應,請執行下列指令:
EXEC master.dbo.sp_droplinkedsrvlogin @rmtsrvname=N'LINKED_SERVER_NAME', @locallogin=N'LOGIN';
更改下列內容:
- 將 LINKED_SERVER_NAME 替換為要捨棄的連結伺服器名稱。
- LOGIN,並使用本機伺服器的登入資訊。
locallogin為 sysname,預設值為 NULL。NULL 指定這個項目適用於連線至rmtsrvname的所有本機登入。如果不是 NULL,locallogin會是 SQL Server 登入或 Windows 登入。如果您使用 Windows 登入,則必須直接存取 SQL Server,或透過具有存取權的 Windows 群組成員身分存取。
從允許連結伺服器的清單中移除已註冊的執行個體
如要移除連結的伺服器,請按照下列步驟操作:
- 使用 Transact-SQL sp_dropserver 預存程序,捨棄現有的連結伺服器。
移除
cloudsql enable linked servers旗標,即可移除已註冊的執行個體。gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable linked servers"=off
將
INSTANCE_NAME替換為要移除連結伺服器的執行個體名稱。或者,您也可以執行下列指令,清除所有資料庫旗標:
gcloud sql instances patch INSTANCE_NAME --clear-database-flags
將
INSTANCE_NAME替換為要移除連結伺服器的執行個體名稱。
疑難排解
| 問題 | 疑難排解 |
|---|---|
Msg 7411, Level 16, State 1, Line 25
|
DataAccess 選項已停用。執行下列指令,啟用資料存取權:EXEC sp_serveroption @server='LINKED_SERVER_NAME', @optname='data access', @optvalue='TRUE' 將 LINKED_SERVER_NAME 替換為連結伺服器的名稱。 |
Access to the remote server is denied because no
login-mapping exists. (Microsoft SQL Server, Error: 7416)
|
如果在建立加密連線時遇到這個問題,請嘗試其他方式,在存取連結伺服器時提供使用者 ID。如要進行這項操作,請執行下列指令:EXEC master.dbo.sp_addlinkedserver @server = N'LINKED_SERVER_NAME', @srvproduct= N'', @provider= N'MSOLEDBSQL', @datasrc= N'TARGET_SERVER_ID', @provstr= N'Encrypt=yes;TrustServerCertificate=yes;User ID=USER_ID' 請替換下列內容:
|
| 非預期行為 | 如果遇到非預期的行為,請確認您使用的是支援的供應商。詳情請參閱 Microsoft 說明文件。 |
後續步驟
- 瞭解如何使用連結伺服器。