Sql-Server

從引用連結伺服器的不同伺服器中的備份恢復的視圖

  • May 7, 2020

我有 3 個 SQL 伺服器X和2 個Y數據庫和. 有(許多)視圖在其定義中使用 4 級命名:Z``X.A``Y.B``X.A

SELECT ... FROM Y.B.SCHEMA.TABLE

由此我推斷其中X包含Y. 我正在從備份文件恢復X.A並從伺服器中恢復,所以我現在 在同一台伺服器上可用。但這些觀點顯然是由於不知道是什麼而失敗的。Y.B``Z``Z.A``Z.B``Z``Y

我希望這些視圖能夠在恢復的數據庫Z.A中工作,這樣它們就可以從Z.B(而不是從Y.B)獲取數據,而無需更改視圖(有很多這樣的視圖)。我不確定這是否可能。我可以Z根據需要在伺服器上進行更改,但我沒有任何訪問權限XY. 視圖的使用者也只能訪問Z.

我考慮過定義一個同義詞YinZ指向,localhost但似乎在創建新同義詞時我至少需要引用 schema 或 schema.table。或者我可以只使用伺服器名稱的同義詞嗎?

我還考慮過定義一個名為Yin的連結伺服器Z,但指向它自己。在這裡,我只能創建一個名為localhost指向自身的連結伺服器,這無助於解決我的問題。

這是可能嗎?我可以說服 SQL Server在視圖定義中引用Z時使用嗎?Y

同義詞對您的需要沒有用處,因為這需要更改視圖定義以指定兩部分名稱。

我還考慮過在 Z 中定義一個名為 Y 的連結伺服器,但指向它自己。在這裡,我只能使名為 localhost 的連結伺服器指向自身,這無助於解決我的問題。

Y通過選擇“其他數據源”(而不是 SQL Server),然後指定 SQL Server 提供程序,可以使用 SSMS創建具有名稱的環回連結伺服器。這也可以通過 T-SQL 完成:

EXEC master.dbo.sp_addlinkedserver 
     @server = N'Y'
   , @srvproduct=N''
   , @provider=N'SQLNCLI11'
   , @datasrc=N'.'
   , @catalog=N'YourDatabase';

您還需要根據您的要求配置連結伺服器安全上下文。

引用自:https://dba.stackexchange.com/questions/266669