【问题标题】:SSAS - How To Change A ServerProperty From SQL Server With Only the IP Address the SSAS ServerSSAS - 如何仅使用 SSAS 服务器的 IP 地址从 SQL Server 更改 ServerProperty
【发布时间】: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


    【解决方案1】:

    (1) 您的脚本会创建一个linked server

    (2) 然后在链接服务器上执行XMLA

    SERVERPROPERTY('MachineName') 行是一个 sql 语句,它检索服务器的机器名称,因此,在您的情况下,当前服务器名称被检索并替换为字符串。

    您可以打印@XMLAString 变量以交叉检查确切的 XMLA。

    现在,当 XMLA 通过 EXEC ... AT ... 语法运行时,它会在远程服务器上运行。这似乎是您收到有关服务器名称错误的原因。

    因此,总而言之,您可以尝试以下方法:

    • 删除ID标签
    • 为Name 标签使用新的服务器IP 地址(而不是CAST(SERVERPROPERTY('MachineName') AS VARCHAR(MAX)))

    ALTER XMLA 的官方文档不是很清楚!

    【讨论】:

      猜你喜欢
      • 2013-05-26
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 2015-08-09
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多