小编Mar*_*lli的帖子

在不同的服务器上运行 PowerShell 脚本 - 从 SQL Server 作业内部

我有一个备份 SSAS 数据库程序

这是一种魅力。

现在我的服务器被 SSAS 备份填满,我想删除超过 2 天的备份文件。

为了实现这一点,我使用了以下 POWERSHELL 脚本:

#-------------------------------------------------------------------------------
# Script to delete old SSAS backup files
#
# Marcelo Miorelli
# 
# 19-novembre-2014 Wed
#-------------------------------------------------------------------------------


#-- connect to the remote server -- SQLBILON1
#
ENTER-PSSESSION sqlbilon1


#-- set the Path where the backup files (.abf) are located
#
$path = 'H:\SQLBackups'

#-- set the number of days backups should be deleted -- in this case 2
#
$NumberOfDays = 2

#-- …
Run Code Online (Sandbox Code Playgroud)

sql-server ssas powershell linked-server maintenance-plans

5
推荐指数
1
解决办法
4082
查看次数

如何列出用户定义表类型的权限?

我正在使用一些用户定义的表类型。它们非常有用。

您可以通过运行这个简单的脚本来查看有关它们的信息:

SELECT o.* from sys.table_types o
Run Code Online (Sandbox Code Playgroud)

我有一个过程可以显示用户对象的所有权限。我也可以指定对象的名称。代码是这样的:

DECLARE @OBJ SYSNAME
SELECT @OBJ ='%'  -- shows all objects 
;WITH
RADHARANI AS (

                SELECT
                    dp.NAME AS principal_name
                        ,dp.type_desc AS principal_type_desc
                        ,o.NAME AS object_name
                        ,o.type_desc
                        ,p.permission_name
                        ,p.state_desc AS permission_state_desc
                    FROM sys.all_objects  o
                        INNER JOIN sys.database_permissions  p ON o.OBJECT_ID=p.major_id
                        LEFT OUTER JOIN sys.database_principals  dp ON p.grantee_principal_id = dp.principal_id
                   WHERE O.OBJECT_ID > 0
                     AND O.TYPE <> 'S'    -- no system
                     AND O.parent_object_id = 0 -- no constraints
                     AND o.NAME like @OBJ

)


SELECT * …
Run Code Online (Sandbox Code Playgroud)

sql-server permissions sql-server-2008-r2 sql-server-2012 user-defined-type

5
推荐指数
1
解决办法
7462
查看次数

如何在 SQL Server 2014 上安装 SSIS?

我正在 Windows Server 2012 R2 机器上安装 SQL Server 2014,包括 SSIS。

从这个链接: https: //msdn.microsoft.com/en-us/library/ms137861( v= sql.120).aspx ssis 使用端口 135,它应该在防火墙上打开。

我创建一个域帐户来运行 SSIS 在此处输入图片说明

安装 SQL - 功能可以在下图中看到 在此处输入图片说明

所有服务都运行良好查看一个特殊的广告帐户来运行 ssis 服务 在此处输入图片说明

授予作为服务登录并在内存中锁定页面 在此处输入图片说明

在控制面板-> 管理工具-> 计算机管理 在此处输入图片说明

将用户和 ssis 帐户添加到“分布式 com 用户” 在此处输入图片说明

On control panel -> Administrative Tools > Component Services

Then go to computer-> my computer -> DCOM Config -> and look for Microsoft
SQL Server Integration Services 12.0

As you can see on the picture below
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

右键单击 Microsoft SQL Server Integration Services 12.0

在此处输入图片说明

我已将身份验证级别保留为“呼叫”。 …

sql-server installation sql-server-2012 connectivity ssis-2014

5
推荐指数
1
解决办法
3万
查看次数

分销商数据库中缺少索引

在我的分销商数据库中寻找缺失的索引,我意外地发现了太多。

需要索引的表一般是3个:

MSrepl_commands

MSlogreader_history

MSdistribution_history

这是缺失索引的图片

在此处输入图片说明

现在专注于 TABLE MSdistribution_history

这一切似乎归结为这 3 个索引:

USE distribution_BOCSS;
CREATE NONCLUSTERED INDEX 
IDX_agent_id_time_xact_seqnorunstatus_INC_delivery_latency 
ON [distribution_BOCSS].[dbo].[MSdistribution_history] 
 ([agent_id], [time], [xact_seqno], [runstatus]) 
 INCLUDE (delivery_latency,start_time,timestamp) WITH (ONLINE = ON)
        
        
USE distribution_BOCSS; 
CREATE NONCLUSTERED INDEX IDX_runstatus_INC_agent_id_delivery_latency 
ON [distribution_BOCSS].[dbo].[MSdistribution_history] 
([runstatus]) 
INCLUDE (agent_id,delivery_latency,time,xact_seqno,timestamp) 
WITH (ONLINE = ON)
    
    
    USE distribution_BOCSS; 
    CREATE NONCLUSTERED INDEX IDX_agent_idrunstatus_INC_time_xact_seqno_delivery_latency 
    ON [distribution_BOCSS].[dbo].[MSdistribution_history] 
([agent_id], [runstatus]) 
    INCLUDE (time,xact_seqno,delivery_latency,timestamp,start_time)
     WITH (ONLINE = ON)
Run Code Online (Sandbox Code Playgroud)

但是,正如我想象的那样,当前现有聚集索引的更新量非常高(不确定从什么时候开始添加到这些统计信息中,可能是自上次重新启动以来),如下图所示:

在此处输入图片说明

写的太高了,它是一个生产系统,我想在这方面得到更多的支持。创建这些索引我真的会受益吗?

是否有任何文档支持在事务复制的分发服务器数据库上创建索引?

为什么微软没有为这些数据库提供适当的索引?

replication sql-server transactional-replication

5
推荐指数
1
解决办法
1536
查看次数

显示表的所有权限的脚本

在我的数据库中,我有一个名为 spGen2_tblIE_SchedProcess_Update 的过程。

当我运行这个脚本时

select * from sys.objects
where name = 'spGen2_tblIE_SchedProcess_Update'
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在同一个数据库中,我有一个名为 tblIE_Step 的表

当我运行以下脚本时

select * from sys.objects
where name = 'tblIE_Step'
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

然后我想查看对象的所有权限

当我检查我的存储过程时,我运行了这个脚本:

select 'Proc' = SCHEMA_NAME(p.schema_id)+'.'+p.name
    , 'Type' = per.state_desc, 'Permission' = per.permission_name
    , 'Login' = pri.name, 'Type' = pri.type_desc 
    , *
From sys.objects as p
left join sys.database_permissions as per on p.object_id = per.major_id
left join sys.database_principals as pri on per.grantee_principal_id = pri.principal_id
where p.object_id = 87671360
Run Code Online (Sandbox Code Playgroud)

我得到了权限:

在此处输入图片说明

但是当我为我的桌子运行相同的东西时,我什么也没得到:

select 'Proc' = SCHEMA_NAME(p.schema_id)+'.'+p.name …
Run Code Online (Sandbox Code Playgroud)

sql-server permissions scripting logins automation

5
推荐指数
2
解决办法
5万
查看次数

更新 sys.objects 的统计信息

我正在处理一个查询,将所有直接或间接依赖于任何级别的数据库对象提供给一个名为 的表dbo.tblborder,该表严重依赖。

但是,这个问题特别与此查询的查询计划有关,因为我在查询计划中看到警告(在不同的排序运算符中)两种类型的警告,一种与溢出到 tempDB 相关,另一种与转换相关的警告数据类型和基数估计。

查询和查询计划进一步向下,在图片之后。

问题

在处理系统对象时,如何找出需要更新统计信息的对象?

否则,如何摆脱查询计划上的这个警告?

关于数据类型转换,我可以做些什么来避免这种情况以及基数估计问题?

也许是一些跟踪标志?

它是一个 600GB 的数据库,我想找到特定表上的所有依赖项,仅第一级就显示了 325 个对象,但这不是我每天都会运行的查询。我对清除这些警告很感兴趣,但这不是生死攸关的问题。

信息

第 1 张关于 tempdb 溢出警告的图片:

tempdb 溢出警告图片

关于 tempdb 溢出警告的第二张图片:

在此处输入图片说明

第三个警告 - 与数据类型转换相关,可能会影响基数估计

在此处输入图片说明

;WITH Radhe AS (

            SELECT DISTINCT 
            s2.object_id, 
            Name=SCHEMA_NAME(S2.schema_id) + '.' + S2.Name, 
            ObjectType = S2.Type,
            DependsOn = s1.object_id,
            DependsOn_Name=SCHEMA_NAME(S1.schema_id) + '.' + S1.Name,  
            0 as Level

            FROM sys.sysdepends DP

            INNER JOIN sys.objects S1 
                    ON S1.object_id = DP.DepID

            INNER JOIN sys.objects S2 
                    ON S2.object_id = DP.ID

            WHERE S1.object_id = …
Run Code Online (Sandbox Code Playgroud)

sql-server statistics system-tables sql-server-2014 cardinality-estimates

5
推荐指数
1
解决办法
1618
查看次数

将数据库邮件配置保存到临时表中

我目前正在处理一堆服务器,它们有不同的数据库邮件配置。

我可以看到每个服务器的数据库邮件配置

我使用以下脚本:

--==========================================================
-- getting the Database Mail Configuration
-- Marcelo Miorelli
-- 1-April-2014
--==========================================================

select @@servername
--SQLSALON1\STOCKALLOCATION



-- http://dba.stackexchange.com/questions/47058/how-can-i-see-the-current-database-mail-configuration

EXEC msdb.dbo.sysmail_help_configure_sp;
EXEC msdb.dbo.sysmail_help_account_sp;
EXEC msdb.dbo.sysmail_help_profile_sp;
EXEC msdb.dbo.sysmail_help_profileaccount_sp;
EXEC msdb.dbo.sysmail_help_principalprofile_sp;

EXEC msdb.dbo.sysmail_help_account_sp
Run Code Online (Sandbox Code Playgroud)

实际上,msdb.dbo.sysmail_help_account_sp在这方面,程序是我最喜欢的。

现在我想通过电子邮件发送前一天的备份历史记录(仅完整备份和差异备份),我需要找出每个服务器的配置文件名称。

我想通过将上述过程的内容保存到临时表或表变量中来完成此操作,并在我拥有所需的所有数据并且即将通过电子邮件发送给他们时从中查询信息。

对于那些程序,特别是 sysmail_help_account_sp,我该如何做到这一点?

我特别需要找出profile name. 我已经用于DBA下面的脚本。

这是我用来生成电子邮件内容的脚本:

--=====================================================================================================================
-- sql server backups report in HTML format to be emailed   
--http://dba.stackexchange.com/questions/81432/how-do-i-use-powershell-to-get-a-sql-server-backup-status

--marcelo miorelli
--19-nov-2014
--=====================================================================================================================

   DECLARE @Body VARCHAR(MAX),
        @TableHead VARCHAR(MAX),
        @TableTail VARCHAR(MAX)
    SET NoCount ON ; …
Run Code Online (Sandbox Code Playgroud)

sql-server backup dynamic-sql database-mail sql-server-2016

5
推荐指数
1
解决办法
857
查看次数

表达式中的类型转换可能会影响“CardinalityEstimate”——在计算列上?

我看了一下这个问题:

表达式中的类型转换可能会影响查询计划选择中的“CardinalityEstimate”?

但这与整理有关,而不是与计算列有关。

我在下面的查询中使用了以下表定义,它给了我一个查询提示

表达式中的类型转换 (CONVERT(varchar(10),[t].[FLTCD_FLT_DATE],112)) 可能会影响查询计划选择中的“CardinalityEstimate”

在此处输入图片说明

请注意计算列 flightReference

CREATE TABLE [dbo].[repl_Transportation] ( 
[FLIGHT#]          INT                              NOT NULL,
[FLTCD_FLT_DATE]   DATETIME                             NULL,
[FLTCD_DEP_GATE]   CHAR(3)                              NULL,
[FLTCD_ARR_GATE]   CHAR(3)                              NULL,
[FLTCD_SEQUENCE]   CHAR(1)                              NULL,
[DIRECTION]        CHAR(1)                              NULL,
[PNR_NUMBERS]      VARCHAR(70)                          NULL,
[HK]               NUMERIC(3,0)                         NULL,
[Create_Date]      DATETIME                         NOT NULL,
[Modify_Date]      DATETIME                             NULL,
[flightReference]  AS (substring(((CONVERT([varchar](10),[FLTCD_FLT_DATE],
 (112))+[FLTCD_DEP_GATE])+[FLTCD_ARR_GATE])+[FLTCD_SEQUENCE],(3),(13))) PERSISTED,
CONSTRAINT   [PK_FLIGHT#]  PRIMARY KEY CLUSTERED    ([FLIGHT#] asc))



IF OBJECT_ID('[dbo].[repl_Transportation_Details]') IS NOT NULL 
DROP TABLE [dbo].[repl_Transportation_Details] 
GO
CREATE TABLE [dbo].[repl_Transportation_Details] ( 
[FLT_LEG_ID]     INT                              NOT NULL,
[FLIGHT#]        INT                              NOT NULL,
[LEG_NO]         TINYINT …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization sql-server-2016 computed-column cardinality-estimates

5
推荐指数
1
解决办法
1974
查看次数

在下面的示例中,什么是内存分数以及如何摆脱它们(或排序运算符)?

此执行计划具有以下内存部分: Memory fraction input:1, Memory Fraction Output:1.

这是一个非常简单的查询:

SELECT                  [a].[activityId],
                        [a].[title],
                        [a].[description],
                        [a].[inclusions],
                        [d].[path],
                        [d].[uploadToBucket],
                        [a].[imageUriMain],
                        [a].[locationId]
FROM                    [dbo].[activity]                AS a
LEFT JOIN               [dbo].[document]                AS d 
       ON d.documentId = a.documentId 
      AND d.activityId = a.activityId

ORDER BY                title                           ASC
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,什么是内存分数以及如何摆脱它们(或排序运算符)?

performance sql-server optimization execution-plan query-performance performance-tuning

5
推荐指数
1
解决办法
500
查看次数

Sql Server:如何从发布者查询订阅和文章列表(对于给定的发布)

在 Sql Server 2014 中,如何查询发布者给定发布的订阅及其文章列表?(事务复制)

是的,有更简单的方法可以从发行商处查询,但我需要从发行商端进行查询。

远程分销商模型(如果有帮助)

谢谢,

replication sql-server transactional-replication sql-server-2014

5
推荐指数
2
解决办法
3万
查看次数