【发布时间】:2021-05-20 11:48:06
【问题描述】:
我有以下脚本,它在更改安装在同一服务器上的 SSAS 实例上的服务器属性时非常方便:
CREATE PROCEDURE [dbo].[Utility_SetMinIdleSessionTimeout] @TimeoutInSeconds INT
,@ServiceAccountUsername NVARCHAR(MAX)
,@ServiceAccountPassword NVARCHAR(MAX)
,@DataSource VARCHAR(50) = '127.0.0.1'
WITH EXECUTE AS 'ABC_Admin'
AS
BEGIN
SET NOCOUNT ON;
--==================================================
--Create linked server
--==================================================
IF (
NOT EXISTS (
SELECT 1
FROM sys.servers
WHERE [Name] = 'ServerSettings'
)
)
BEGIN
EXEC master.dbo.sp_addlinkedserver @server = 'ServerSettings'
,@srvproduct = ''
,@provider = 'MSOLAP'
,@datasrc = @DataSource
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = 'ServerSettings'
,@useself = N'False'
,@locallogin = NULL
,@rmtuser = @ServiceAccountUsername
,@rmtpassword = @ServiceAccountPassword
EXEC master.dbo.sp_serveroption @server = 'ServerSettings'
,@optname = N'rpc out'
,@optvalue = N'true'
END
--==================================================
--Create and Execute XMLA
--==================================================
DECLARE @XMLA XML
,@XMLAString NVARCHAR(MAX) =
'<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine" Transaction="true">
<Alter AllowCreate="true" ObjectExpansion="ObjectProperties" xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object />
<ObjectDefinition>
<Server xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500">
<ID>' + CAST(SERVERPROPERTY('MachineName') AS VARCHAR(MAX)) + '</ID>
<Name>' + CAST(SERVERPROPERTY('MachineName') AS VARCHAR(MAX)) + '</Name>
<ServerProperties>
<ServerProperty>
<Name>MinIdleSessionTimeout</Name>
<Value>' + CAST(@TimeoutInSeconds AS NVARCHAR) + '</Value>
</ServerProperty>
</ServerProperties>
</Server>
</ObjectDefinition>
</Alter>
</Batch>'
SET @XMLA = @XMLAString
EXEC (@XMLAString) AT [ServerSettings]
--==================================================
--Clean up
--==================================================
EXEC master.dbo.sp_dropserver @server = N'ServerSettings'
,@droplogins = 'droplogins'
END
现在我在另一台服务器上有 SSAS,我想从我的第一台服务器上的 SQL Server 在该服务器上运行它。这提供了一个挑战,我有新服务器的 IP 地址,但没有服务器名称,要让这个脚本工作,我需要同时拥有(DataSource 是新 IP,服务器名称是新的“MachineName” XML)。
Other posts claim they're 不是在 SQL Server 中本机执行此操作的方法。我注意到的一件事是,当我将每个属性(数据源和机器名称)设置为新服务器的 IP 地址时,proc 失败,但错误消息包含我的新 SSAS 服务器的服务器名称,所以 SQL Server必须以某种方式意识到这一点:
返回链接服务器“ServerSettings”的 OLE DB 提供程序“MSOLAP” 消息“元数据管理器中的错误。对象 ID 不能 从 'ServerNameABC' 更改为 'NewIPAddress' 'ServerNameABC' 服务器。对象 ID 不能由 ALTER 更改 声明。”。
这里有什么我缺少的吗,有没有一种简单的方法可以实现我在这里看到的内容?
【问题讨论】:
标签: sql sql-server ssas linked-server session-timeout