Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSAS-如何从SQL Server更改只有SSAS服务器IP地址的ServerProperty_Sql_Sql Server_Ssas_Linked Server_Session Timeout - Fatal编程技术网

SSAS-如何从SQL Server更改只有SSAS服务器IP地址的ServerProperty

SSAS-如何从SQL Server更改只有SSAS服务器IP地址的ServerProperty,sql,sql-server,ssas,linked-server,session-timeout,Sql,Sql Server,Ssas,Linked Server,Session Timeout,我有以下脚本,可以非常方便地更改安装在同一服务器上的SSAS实例的服务器属性: CREATE PROCEDURE [dbo].[Utility_SetMinIdleSessionTimeout] @TimeoutInSeconds INT ,@ServiceAccountUsername NVARCHAR(MAX) ,@ServiceAccountPassword NVARCHAR(MAX) ,@DataSource VARCHAR(50) = '127.0.0.1'

我有以下脚本,可以非常方便地更改安装在同一服务器上的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
现在我在另一台服务器上安装了SSA,我想在第一台服务器上的SQL server上在该服务器上运行它。这提供了一个挑战,我需要新服务器的IP地址,而不是服务器名称,要使此脚本正常工作,我需要有bothDataSource是新的IP,server name是XML中的新MachineName

不是在SQL Server中本机执行此操作的方法。不过,我注意到的一点是,当我将数据源和计算机名的每个属性都设置为新服务器的IP地址时,进程失败,但错误消息包含新SSAS服务器的服务器名,因此SQL server必须以某种方式意识到这一点:

已返回链接服务器设置的OLE DB提供程序MSOLAP 元数据管理器中的消息错误。对象ID不能为空 已将的从“ServerNameABC”更改为“NewIPAddress” “ServerNameABC”服务器。对象ID不能由ALTER更改 声明

这里有没有我遗漏的东西,有没有一个简单的方法来实现我在这里看到的东西?

1您的脚本创建了一个

2然后在链接的服务器上执行

行SERVERPROPERTY'MachineName'是一条sql语句,用于检索服务器的机器名,因此在您的情况下,将检索当前服务器名并在字符串中替换

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

现在,当XMLA通过EXEC运行时。。。在语法,它在远程服务器上运行。这可能是您收到服务器名称错误的原因

总之,您可以尝试以下方法:

移除ID标签 将新服务器IP地址用作名称标记,而不是将CASTSERVERPROPERTY'MachineName'用作VARCHARMAX 我的官方文件不是很清楚