我的一台服务器上有一个 SSRS 2016 实例,其中包含 100 份报告。我想将这些报告从这个实例迁移到一个现有的新实例,该实例已经有一些针对不同业务部门的报告。所以基本上我正在下载所有 RDL 并将它们上传到一个新实例。
在处理此任务时,我在下载报告时发现一件奇怪的事情是某些报告下载选项不存在。我的问题是如何下载这些报告,为什么我会看到这种行为?
我的一台服务器上有一个 SSRS 2016 实例,其中包含 100 份报告。我想将这些报告从这个实例迁移到一个现有的新实例,该实例已经有一些针对不同业务部门的报告。所以基本上我正在下载所有 RDL 并将它们上传到一个新实例。
在处理此任务时,我在下载报告时发现一件奇怪的事情是某些报告下载选项不存在。我的问题是如何下载这些报告,为什么我会看到这种行为?
我有一个包含数千行代码的文件,其索引详细信息如下:
IF NOT EXISTS (SELECT 1 FROM SYS.INDEXES WITH (NOLOCK) WHERE name = 'IX_Test1' AND [object_id] = OBJECT_ID(N'Test1', N'U'))
BEGIN
CREATE UNIQUE INDEX [IX_Test1] ON [Test1]
(
[cd] ASC
)
WITH (FILLFACTOR = 90, IGNORE_DUP_KEY = OFF, PAD_INDEX = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF ) ON [PRIMARY]
END
IF NOT EXISTS (SELECT 1 FROM SYS.INDEXES WITH (NOLOCK) WHERE name = 'IX_Test2' AND [object_id] = OBJECT_ID(N'Test2', N'U'))
BEGIN
CREATE INDEX [IX_Test2] ON [Test2]
(
[AdID] ASC , [Date] ASC
) INCLUDE ( [AID], [LM] )
WITH (FILLFACTOR = 90, IGNORE_DUP_KEY = OFF, PAD_INDEX = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF ) ON [PRIMARY]
END
我想像下面这样格式化这些数据以进行比较:
IF NOT EXISTS (SELECT 1 FROM SYS.INDEXES WITH (NOLOCK) WHERE name = 'IX_Test1' AND [object_id] = OBJECT_ID(N'Test1', N'U')) BEGIN CREATE UNIQUE INDEX [IX_Test1] ON [Test1] ( [cd] ASC ) WITH (FILLFACTOR = 90, IGNORE_DUP_KEY = OFF, PAD_INDEX = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF ) ON [PRIMARY] END
IF NOT EXISTS (SELECT 1 FROM SYS.INDEXES WITH (NOLOCK) WHERE name = 'IX_Test2' AND [object_id] = OBJECT_ID(N'Test2', N'U')) BEGIN CREATE INDEX [IX_Test2] ON [Test2] ( [AdID] ASC , [Date] ASC ) INCLUDE ( [AID], [LM] ) WITH (FILLFACTOR = 90, IGNORE_DUP_KEY = OFF, PAD_INDEX = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF ) ON [PRIMARY] END
所以基本上 IF 和 END 之间的所有内容都应该排成一行。我尝试使用 REGEX 来完成它,但没有得到它的工作。如果有人可以在这方面帮助我,那将是很大的帮助。
如果您需要更多详细信息,请告诉我。
我已经设置了一个 SQL Server 跟踪来捕获在我的 SQL Server 2014 框上长时间运行的查询,并添加了 Showplan XML 事件来捕获查询的执行计划。跟踪是使用持续时间过滤器创建的。在测试期间,我发现 Showplan XML 没有考虑持续时间过滤器,而是显示所有查询的执行计划。我只期待带有我的持续时间过滤器的查询及其在跟踪中的执行计划。然而,事实并非如此。它正确显示了持续时间过滤器查询,但正在为所有查询记录执行计划。
有谁知道如何解决 SQL Server 跟踪中的这个问题?
设想:
我试图了解一个奇怪的情况。我有一个 SQL Server 2012,它使用相同的域帐户配置了数据库引擎和 SQL Server 代理。该域帐户不会添加到 SQL Server 登录。检查使用xp_logininfo 'Domain account', 'all'
并没有得到任何输出。我有一个更新数据库中的表的 SQL 服务器作业。那项工作运行良好。到目前为止,我的印象是必须在 SQL Server 登录中定义 SQL Server 代理帐户才能运行作业。但是,在这种情况下,作业运行良好,即使 SQL Server 代理登录未在 SQL Server 登录中定义。所以试图理解它是如何可能的。此外,由于作业更新表不知道它使用哪个用户/登录来更新表。作为测试,我将工作所有者更改为“sa”和非“sa”登录,在这两种情况下工作都可以正常工作。
所以我的问题是:
是否必须在 SQL Server 登录中定义 SQL Server 代理帐户才能运行作业?如果是,那么即使 SQL Server 登录名中没有 SQL Server 代理帐户的登录名,我的更新作业为何仍在运行。如果不是,它在内部是如何工作的?就像它用于启动 SQL 作业的帐户一样。
我的更新作业使用什么用户/登录名来更新表?
今天,我的 SQL Server DB 在多个文件组中有多个文件时遇到了以下错误。
事件 ID:1105。无法为数据库中的对象分配空间,因为“PRIMARY”文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。
MSSQL 2014:无法为数据库中的对象分配空间,因为文件组已满
它发生在我的索引维护作业运行时。特别是在索引之一的索引重组期间。经过调查,我发现我的所有文件组至少有一个启用了自动增长的文件,并且驻留在各自驱动器上的所有启用自动增长的文件都有足够的可用空间。所以不存在空间问题或文件自动增长的问题(考虑到我在每个文件组中至少有一个文件启用了自动增长)。进一步深入研究后,可以从下面的 MS 链接https://msdn.microsoft 中找到。 com/en-us/library/aa337441.aspx
当索引位于多个文件上时,当其中一个文件已满时,ALTER INDEX REORGANIZE 会返回错误 1105。当进程试图将行移动到整个文件时,重组进程被阻止。要解决此限制,请执行 ALTER INDEX REBUILD 而不是 ALTER INDEX REORGANIZE 或增加任何已满文件的文件增长限制。
因此,为了解决我的问题,我继续重建修复了问题的索引。但是,我正在寻找避免这种情况的方法,因为将来可能会发生在不同的索引中,并且一直进行手动索引重建不是修复它的好方法吗?我很想听听您对此的建议。
是否可以过滤 sp_BlitzIndex 的结果以仅显示未使用和重复的索引?如果是这样,如何?
我还没有尝试过任何东西。只是想在表中插入 sp 输出,然后在那里过滤它。但我相信一定有更好的方法。
我知道这应该交给布伦特和团队。但是将其张贴在这里以获得一些更有趣的答案。
如何在 SQL Server 测试环境中模拟超过 2 个进程的死锁?有人可以帮我写代码吗?再次澄清我的问题,我不希望只有 2 个进程的死锁模拟。我知道如何用 2 个进程产生死锁,但无法用两个以上的进程产生死锁。
聚集索引 (CI) 查找和非聚集索引 (NCI) 查找有什么区别?一个比另一个表现更好吗?
我问这个的原因是因为我有一个包含 5000 万行和 150 列的表。它有一个名为ID
定义为聚集索引的列。上面还有一个具有相同索引键 ID 和七个include
-d 列的 NCI。在我看来,NC 索引在这里是重复的,可以安全地删除。
所以我想要一些专家的意见/建议,如果它可以安全地丢弃还是应该保持完整?
如何在以下命令中的文件名中附加日期时间:
COPY (select query) To '/tmp/test.csv' DELIMITER ',' CSV HEADER;
我想要像 test_date_tim.csv 这样的文件名。
如何where col % 5 = 4
在 SQL Server 中重写。重写这个的原因是因为我根据这个条件从表中选择了一些列。因为 % 在它导致索引扫描而不是查找的地方使用。这个你能帮我吗。
我正在使用以下从http://www.ludovicocaldara.net/dba/sql-server-last-database-backup/链接获取的备份脚本来审核我的服务器以进行备份。这很好用,除非我有溢出的备份。
对于 splitbackups,它会根据编号提供很多行。拆分备份文件。例如,如果我有 4 个拆分的完整备份文件和 4 个拆分的差异备份文件,它会提供 16 行输出。这是因为LEFT JOIN
用过。我需要帮助来修复脚本以删除所有重复项并提供正确的输出。例如,它应该只在输出中提供 4 个拆分的完整备份文件和 4 个差异备份文件。
WITH db
AS (SELECT [Instance] = @@SERVERNAME,
[Database] = name,
[RecoveryMode] = DATABASEPROPERTYEX(name, 'Recovery'),
[CreationTime] = crdate,
[Status] = DATABASEPROPERTYEX(name, 'Status')
FROM master..sysdatabases
WHERE name != 'tempdb'),
lastfull
AS (SELECT *
FROM
(
SELECT [Database] = s.database_name,
--[Type] = s.type,
[LastFullDate] = CONVERT( VARCHAR, s.backup_finish_date, 120),
--[LastFullSize] = s.backup_size,
[LastFullDevice] = f.physical_device_name,
--[LastFullDevTyp] = f.device_type,
[Nrank] = RANK() OVER(PARTITION BY s.database_name ORDER BY s.backup_finish_date DESC)
FROM msdb.dbo.backupset s,
msdb.dbo.backupmediafamily f
WHERE s.media_set_id = f.media_set_id
AND s.type = 'D'
-- and f.device_type = 7 -- only backup devices
) f
WHERE nrank = 1),
lastdiff
AS (SELECT *
FROM
(
SELECT [Database] = s.database_name,
--[Type] = s.type,
[LastDiffDate] = CONVERT( VARCHAR, s.backup_finish_date, 120),
--[LastDiffSize] = s.backup_size,
[LastDiffDevice] = f.physical_device_name,
--[LastDiffDevTyp] = f.device_type,
[Nrank] = RANK() OVER(PARTITION BY s.database_name ORDER BY s.backup_finish_date DESC)
FROM msdb.dbo.backupset s,
msdb.dbo.backupmediafamily f
WHERE s.media_set_id = f.media_set_id
AND s.type = 'I'
-- and f.device_type = 7 -- only backup devices
) d
WHERE nrank = 1),
lastlog
AS (SELECT *
FROM
(
SELECT [Database] = s.database_name,
--[Type] = s.type,
[LastLogDate] = CONVERT( VARCHAR, s.backup_finish_date, 120),
--[LastLogSize] = s.backup_size,
[LastLogDevice] = f.physical_device_name,
--[LastLogDevTyp] = f.device_type,
[Nrank] = RANK() OVER(PARTITION BY s.database_name ORDER BY s.backup_finish_date DESC)
FROM msdb.dbo.backupset s,
msdb.dbo.backupmediafamily f
WHERE s.media_set_id = f.media_set_id
AND s.type = 'L'
-- and f.device_type = 7 -- only backup devices
) l
WHERE nrank = 1)
SELECT db.[Instance] AS ServerName,
db.[Database] AS DatabaseName,
db.[RecoveryMode] AS ReconveyModel,
db.[CreationTime] AS DBCreationTime,
db.[Status] AS DatabaseStatus,
ISNULL(CONVERT( VARCHAR, lastfull.LastFullDate), 'Never') AS LastFullBackupDate,
ISNULL(lastfull.[LastFullDevice], 'None') AS LastFullBackupPath,
ISNULL(CONVERT( VARCHAR, lastdiff.LastDiffDate), 'Never') AS LastDiffBackupDate,
ISNULL(lastdiff.[LastDiffDevice], 'None') AS LastDiffBackupPath,
ISNULL(CONVERT( VARCHAR, lastlog.[LastLogDate]), 'Never') AS LastLogBackupDate,
ISNULL(lastlog.[LastLogDevice], 'None') AS LastLogBackupPath
FROM db
LEFT OUTER JOIN lastfull ON(db.[Database] = lastfull.[Database])
LEFT OUTER JOIN lastdiff ON(db.[Database] = lastdiff.[Database])
LEFT OUTER JOIN lastlog ON(db.[Database] = lastlog.[Database]);
编辑:
假设我正在按照以下方式进行完整和差异备份:
backup database AdventureWorks to disk =
'D:\MSSQL\AdventureWorks_1_041320161807.bak', disk =
'D:\MSSQL\AdventureWorks_2_041320161807.bak', disk =
'D:\MSSQL\AdventureWorks_3_041320161807.bak', disk =
'D:\MSSQL\AdventureWorks_4_041320161807.bak' with stats = 10;
backup database AdventureWorks
to disk = 'D:\MSSQL\AdventureWorks_1_041320161808.bak',
disk = 'D:\MSSQL\AdventureWorks_2_041320161808.bak',
disk = 'D:\MSSQL\AdventureWorks_3_041320161808.bak',
disk = 'D:\MSSQL\AdventureWorks_4_041320161808.bak'
with stats = 10, differential;
使用上面的脚本,我得到如下结果。请注意,它有 16 行。4*4。
我需要的是,脚本应该将输出显示为 4 个完整备份文件和 4 个差异备份文件。即只有文件的实际数量。目前由于 JOIN 它给出了 16 行。如果您需要进一步说明,请告诉我。
我试图在 SQL Server 2000 SP4 中运行以下代码,但出现错误。
Declare @Body varchar(8000);
Declare @TableHead varchar(8000);
Declare @TableTail varchar(8000);
Set NoCount On;
Set @TableTail = '</table></body></html>';
Set @TableHead = '<html><head>' +
'<style>
td {border: solid black 1px;padding-left:5px;padding-right:5px;padding-top:1px;padding-bottom:1px;font-size:11pt;}
tr.even {background-color:white;}
tr.odd {background-color:#eeeeee;}
</style>' +
'</head>' +
'<body><table cellpadding=0 cellspacing=0 border=0>' +
'<tr bgcolor=#FFEFD8><td align=center><b>Server Name</b></td>' +
'<td align=center><b>Product</b></td>' +
'<td align=center><b>Provider</b></td>' +
'<td align=center><b>Data Source</b></td>' +
'<td align=center><b>Is Linked?</b></td></tr>';
Select @Body = (Select
name As [TD],
product As [TD],
provider As [TD],
data_source As [TD align=center],
is_linked As [TD align=center]
From sys.servers
Order By is_linked, name
For XML Raw('tr'), Elements);
Set @Body = Replace(@Body, '_x003D_', '=');
Set @Body = Replace(@Body, '_x0020_', space(1));
Select @TableHead + @Body + @TableTail;
错误:
Msg 156, Level 15, State 1
Incorrect syntax near the keyword 'For'.
我从这里拿了这段代码:
并将其用作构建新报告的参考。我的环境中混合了 SQL Server 2000、2005、2008、2012 实例。此代码适用于其他服务器,但不适用于 2000 SP4。
请帮我解决这个问题。
我在 Windows server 2008 R2 ENT 上安装了 SQL Server 2008 R2 ENT。安装后我无法在本地登录 SQL Server。出现以下错误:
连接握手失败。操作系统调用失败:(80090331) 0x80090331(客户端和服务器无法通信,因为它们没有共同的算法。)。州 56。
该错误导致我阅读了这篇文章,并将我的数据库引擎更新为 10.50.6542.0。但仍然无法登录。我应该怎么做才能让我的 SSMS 在本地连接。第二个问题是 SQL 代理服务没有启动。它失败并出现以下错误:
代理无法启动(无法连接到服务器(本地),SQLserveragent 无法启动)。
如何解决这个问题?以下是我的环境详细信息:
频道状态:
SSL 2.0:客户端:DisabledByDefault = 1 启用 = 0 服务器:DisabledByDefault = 1 启用 = 0
SSL 3.0:客户端:DisabledByDefault = 1 启用 = 0 服务器:DisabledByDefault = 1 启用 = 0
TLS 1.0:客户端:DisabledByDefault = 0 启用 = 1 服务器:DisabledByDefault = 0 启用 = 1
TLS 1.1:客户端:DisabledByDefault = 0 启用 = 1 服务器:DisabledByDefault = 0 启用 = 1
TLS 1.2:客户端:DisabledByDefault = 0 启用 = 1 服务器:DisabledByDefault = 0 启用 = 1
如果您需要更多详细信息,请告诉我。
更新:
我在这方面取得了一些进展。我安装了 ADO.NET - SqlClient (.NET Framework 3.5/.NET Framework 2.0 SP2) 参考链接https://support.microsoft.com/en-us/kb/3135244。我现在可以在本地使用 SSMS 连接 SQL 服务器,也可以启动 SQL 代理服务。伊皮。
但现在新的问题出现了。我无法使用 Windows 身份验证远程连接服务器。当我尝试连接它时,我在 Windows 事件查看器日志中得到以下错误。此外,SQL Server 错误日志中没有错误。
日志名称:系统源:Schannel 事件 ID:36888 任务类别:无级别:错误关键字:用户:
SYSTEM 描述:生成了以下致命警报:40。内部错误状态为 1205。日志名称:系统源:
Schannel 事件 ID :36874 任务类别:无级别:
错误关键字:用户:系统描述:从远程客户端应用程序接收到 TLS 1.0 连接请求,但服务器不支持客户端应用程序支持的任何密码套件。SSL 连接请求失败。
在下面的查询中 & 表示什么?它的意义是什么?
select id, name
from test
where num & 1 = 1;
我想找出所有有列的表,让我们说测试。如何获得?我需要 DBName、TableName、testcolumnexist(是/否)、TableCreateDate 和 ProductName 详细信息。
棘手的部分是表名。我的表末尾附加了 ID。以下是整个场景:
其中 # 表示来自不同表主的 ID。即从 master 中选择 id,其中 id< 5)。
所以我的表就像 Log1、Details1、ID = 1 的 Data1、Log2、Details2、ID = 2 的 Data2 等等
输出:DBName、TableName、testcolumnexist(是/否)、TableCreateDate、ProductName
请注意,ProductName 列存在于主表中。
我正在尝试使用 SSMS 从不同的登陆服务器连接 3 个 SQL 服务器。问题是我能够连接 1 个服务器但无法连接其他 2 个。我得到的错误如下:
与服务器成功建立连接,但在登录过程中出现错误。(提供者:SSL 提供者,错误:0 - 现有连接被远程主机强行关闭。)
我无法弄清楚其他 2 台服务器出了什么问题,需要您的帮助。
登陆服务器详情:
SQL 服务器详细信息:
我能够从我的登陆服务器 ping 和 telnet 所有 3 台服务器。此外,尝试对 2 个我无法连接的服务器进行 SQL 身份验证,但它不起作用。禁用 TCP 烟囱,不起作用。相同的 3 个连接在我的其他登陆服务器上工作正常。所以不确定这个有什么问题。请帮我解决这个问题。
有人可以帮我用脚本获取 CPU、总物理内存、服务器类型(即物理/VM)、maxdop和最大服务器内存详细信息吗?我需要它来运行 50 台服务器。所有服务器都在同一个域中。所以连通性不是问题。PowerShell 解决方案将不胜感激。
如果您需要任何进一步的详细信息,请告诉我。
我们的任务是通过 LAN 以最有效和最快速的方式复制 2TB 的数据库文件/备份。我们正在团队中集思广益,以提出最佳解决方案。
这些文件是多个备份,并且已使用压缩。
有人可以建议最好的方法吗?
我有一个场景,用户想要通过链接服务器执行以下操作:
SELECT *
FROM [DBTEST].[AdventureWorks].sys.objects
WHERE object_id = OBJECT_ID(N'dbo.DatabaseLog');
链接服务器被配置为使用Be made using this security context
并且链接服务器登录对[DBTEST].[AdventureWorks]
数据库具有读取访问权限。
上述查询在通过链接服务器执行时不返回任何行。但是,当我直接登录到DBTEST
使用链接服务器登录并执行以下操作时,它确实返回一行:
SELECT *
FROM [AdventureWorks].sys.objects
WHERE object_id = OBJECT_ID(N'dbo.DatabaseLog')
我很困惑为什么它不能通过链接服务器工作,以及我需要做什么才能修复它。
一件更奇怪的事情是,即使我授予sa
链接服务器登录权限,它在通过链接服务器执行时仍然不返回任何行。
两台服务器都是 SQL Server 2008 企业版。