我正在使用一些用户定义的表类型。它们非常有用。
您可以通过运行这个简单的脚本来查看有关它们的信息:
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
我正在 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 服务

Run Code Online (Sandbox Code Playgroud)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
右键单击 Microsoft SQL Server Integration Services 12.0
我已将身份验证级别保留为“呼叫”。 …
sql-server installation sql-server-2012 connectivity ssis-2014
在我的分销商数据库中寻找缺失的索引,我意外地发现了太多。
需要索引的表一般是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)
但是,正如我想象的那样,当前现有聚集索引的更新量非常高(不确定从什么时候开始添加到这些统计信息中,可能是自上次重新启动以来),如下图所示:
写的太高了,它是一个生产系统,我想在这方面得到更多的支持。创建这些索引我真的会受益吗?
是否有任何文档支持在事务复制的分发服务器数据库上创建索引?
为什么微软没有为这些数据库提供适当的索引?
通常在我的工作中,我必须在 SQL Server 中创建一个过程,该过程将处理数百万数据行,将它们保存到临时表(临时表)中,最后将它们保存到数据库中的一个或多个表中。
我不是在寻找替代解决方案,例如 SSIS。
我无法禁用索引、约束、使数据库脱机、更改恢复模式等。
我们一直在寻找将这个过程设置为在系统不那么繁忙时运行的方法,但我们在 24/7/365 在线零售商环境中工作。
有一个非常相似的问题: Performance Inserting and Updating Millions of rows into a table
这个问题也很重要: 插入大量行的最快方法是什么?
例子一:
CREATE PROCEDURE [dbo].[udpstaging_page_import_fromFilter]
@sourceDesc nvarchar(50) -- e.g. 'Coremetrics'
,@feedDesc nvarchar(50) -- e.g. 'Daily Exports'
,@process_job_task_logID bigint
AS BEGIN
SET NOCOUNT ON;
BEGIN TRY
--truncate table prior INSERT
exec dbo.udpstaging_page_truncateTable;
declare @source_feedID int;
exec crm_admin.dbo.udpsource_feedID_select @sourceDesc
,@feedDesc
,@source_feedID = @source_feedID OUTPUT;
-- drop temp tables
if exists (select * from tempdb.dbo.sysobjects o where o.xtype in ('U') and …Run Code Online (Sandbox Code Playgroud) performance sql-server insert update sql-server-2014 query-performance
我正在寻找一个迹象(如果有的话),要么忽略内存瓶颈选项,要么接受它,或者让我进一步调查。
例如:
页面寿命:
SELECT [object_name],
[counter_name],
[cntr_value]
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Manager%'
AND [counter_name] = 'Page life expectancy'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在我当前的环境中,我有一台具有 8 GB RAM 的服务器,我会要求管理层提供更多内存。我相信这是一个内存瓶颈。
什么是使用 RAM 将是另一项调查。
下面的这封电子邮件是否有效识别可能的内存瓶颈?
我们需要查看 SQLServer:Buffer Cache Hit ratio
如果该比率小于 95%,则表示服务器处于内存压力之下
希望这可以帮助,
performance sql-server memory sql-server-2008-r2 sql-server-2014
我有一个恢复模式设置为 FULL 的数据库。这是一个开发数据库,我有两个完整备份,日期分别为 19 日和 27 日,即最新的。
其中一位开发人员在 26 日做了一些更改,我想回滚这些更改并希望将数据库恢复到 25 日的状态。
restore database MyDb from disk = 'I:\MSSQL\DATA\MyDb_20160127.bak'
with recovery, stopat = '2016-01-25 10:38:15.280',
move 'MyDb' to 'I:\MSSQL\DATA\MyDb.mdf',
move 'MyDb_log' to 'I:\MSSQL\DATA\MyDb.ldf'
Run Code Online (Sandbox Code Playgroud)
STOPAT 子句指定一个点太早,无法恢复此备份集。选择不同的停止点或使用 RESTORE DATABASE WITH RECOVERY 在当前点恢复。
我正在使用 SQL Server 2005
在 SQL Server 2005 上工作时,我想使用数据库引擎优化顾问来帮助我优化我的网络服务器。
我做的第一件事是创建一个服务器端配置文件跟踪并运行它大约一个小时。
当我在 DTA 上使用这个文件时,我得到以下建议:
建议翻译成下面的脚本,评论在那里,因为我仔细检查了索引建议。
CREATE STATISTICS [_dta_stat_2108846875_3_6] ON [dbo].[ProductBulletPoint]([LanguageId], [NoteTypeCode])
CREATE NONCLUSTERED INDEX [_dta_index_ProductBulletPoint_39_2108846875__K6_K1_K3_2_4_5_7] ON [dbo].[ProductBulletPoint]
(
[NoteTypeCode] ASC,
[Tier1] ASC,
[LanguageId] ASC
)
INCLUDE ( [SeasonItemId],
[SortOrder],
[NoteText],
[NoteGroup]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
--SP_HELPINDEX9 'ProductBulletPoint'
-- the index [_dta_index_ProductBulletPoint_39_2108846875__K6_K1_K3_2_4_5_7] is ok to implement
CREATE NONCLUSTERED INDEX [_dta_index_ProductShipTax_39_745366020__K7_K5_K2_K3_K1_K4_6] ON [dbo].[ProductShipTax]
(
[TaxRegionId] ASC,
[ItemNo] ASC,
[DateFrom] ASC,
[DateTo] …Run Code Online (Sandbox Code Playgroud) 我正在处理一个查询,将所有直接或间接依赖于任何级别的数据库对象提供给一个名为 的表dbo.tblborder,该表严重依赖。
但是,这个问题特别与此查询的查询计划有关,因为我在查询计划中看到警告(在不同的排序运算符中)两种类型的警告,一种与溢出到 tempDB 相关,另一种与转换相关的警告数据类型和基数估计。
查询和查询计划进一步向下,在图片之后。
在处理系统对象时,如何找出需要更新统计信息的对象?
否则,如何摆脱查询计划上的这个警告?
关于数据类型转换,我可以做些什么来避免这种情况以及基数估计问题?
也许是一些跟踪标志?
它是一个 600GB 的数据库,我想找到特定表上的所有依赖项,仅第一级就显示了 325 个对象,但这不是我每天都会运行的查询。我对清除这些警告很感兴趣,但这不是生死攸关的问题。
第 1 张关于 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
我目前正在处理一堆服务器,它们有不同的数据库邮件配置。
我可以看到每个服务器的数据库邮件配置。
我使用以下脚本:
--==========================================================
-- 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) 我们一直在保存其中一台生产服务器的备份(实际上是一个 Always On 可用性组)
sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d master
-Q "EXECUTE dbo.DatabaseBackup
@AvailabilityGroups = 'SQLAG',
@URL = 'https://MYCOMPANYbackups.blob.core.windows.net/SQLMAINSERVER-datafiles-full',
@Credential = 'SQLAzureCredential',
@BackupType = 'FULL',
@Compress = 'Y',
@Verify = 'Y',
@LogToTable = 'Y'" -b
Run Code Online (Sandbox Code Playgroud)
这是我在尝试连接到 Azure 时看到的:我的存储帐户是什么?

我有一份工作,我计划向我发送一封关于服务器上所有备份的电子邮件。收集有关备份的信息并发送电子邮件的脚本在这里。
电子邮件告诉我备份在哪里。例如:
我如何才能访问备份文件?
编辑:
大卫布朗的回答让我明白了,谢谢大卫。
我只是在这里添加了一组将我带到备份的步骤(在成功连接到 azure 之后)。
01 - 点击 Blob
02 - 选择其中一个容器
03 - 文件将在那里 - 准备下载
这篇文章也很有趣:
sql-server backup availability-groups sql-server-2016 azure-blob-storage
sql-server ×10
backup ×2
performance ×2
statistics ×2
connectivity ×1
dynamic-sql ×1
insert ×1
installation ×1
memory ×1
permissions ×1
recovery ×1
replication ×1
restore ×1
ssis-2014 ×1
update ×1