管理已連結的伺服器

連結的伺服器可讓您從 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 支援使用四部分名稱查詢連結的伺服器 (伺服器名稱、資料庫名稱、結構定義名稱和物件名稱),以及下列指令:

  • OPENQUERY 在指定伺服器上執行查詢。
  • EXECUTE:可對連結的伺服器執行動態 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

Server 'LINKED_SERVER_NAME' is not configured for DATA ACCESS.
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'

請替換下列內容:

  • 將 LINKED_SERVER_NAME 替換為連結伺服器的名稱。
  • TARGET_SERVER_ID 替換為目標伺服器的名稱,或目標伺服器的 IP 位址和通訊埠編號。
  • USER_ID,並提供使用者登入資訊。
非預期行為 如果遇到非預期的行為,請確認您使用的是支援的供應商。詳情請參閱 Microsoft 說明文件。

後續步驟