标签: sql-server-2012

如何获取单个作业中每个单独步骤的运行持续时间(以分钟为单位)?

完整工作的Run_Duration内容。sysjobhistory有办法得到这个吗?[msdb].[dbo].[sysjobactivity]只有最后一步。

sql-server t-sql sql-server-2012 jobs

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

找到资源系统数据库

有一个名为资源数据库的数据库,我知道它是只读的,包含有关系统对象的信息,并且不保存任何用户相关的数据或元数据。

我正在使用 SSMS 来管理我的数据库实例,但我只能看到四个系统数据库 - master、model、msdb、tempdb。我想知道在哪里可以找到使用 SSMS 的资源数据库?或者数据库故意对用户不可见?

sql-server ssms sql-server-2012 system-databases

4
推荐指数
2
解决办法
1486
查看次数

为什么查询违反外键的记录会返回错误的结果?

在添加新外键之前对表进行一些预检查时,我们正在查询当前有多少行会违反新键。这是一个相当活跃的数据库,在有问题的表上有近乎恒定的插入。

FK 将从 MessagePatientIdentifier.MessageID 到 Message.MessageID。

我们使用的查询非常简单:

select * from MessagePatientIdentifier as mpi
where
    MessageID not in (select MessageID from Message)
Run Code Online (Sandbox Code Playgroud)

我们看到的问题是从 MessagePatientIdentifier 返回行

MessagePatientID                     | MessageID 
553bde76-47d4-4ec3-96d1-b5d2e98931e1 | 7d45464d-8cc4-4a2e-8828-020722165b39

Run Code Online (Sandbox Code Playgroud)

在这种情况下,当您然后时select * from Message where MessageID = 7d45464d-8cc4-4a2e-8828-020722165b39,该记录确实存在。

然后,我们继续前行,并试图相同的查询,但在一个表DOES有FK的地方,以同样的方式引用信息表。相同的结果...查询报告存在子表记录,而没有父表对应的父表(消息)记录。

MessageRecipID                       | MessageID 
26d6d632-87b3-407e-aeb0-04552981e5f8 | 750f0fb4-3e6c-485d-996e-f061f8caa360

Run Code Online (Sandbox Code Playgroud)

然后,如果你再次select * from Message where MessageID = 750f0fb4-3e6c-485d-996e-f061f8caa360,这将返回记录。

这些数据来自 Mirth Server 的存储过程以及 BizTalk WCF-SQL 发送端口。proc 插入消息记录,获取 newuniqueidentifier作为输出变量,然后使用它来调用辅助存储过程以插入MessagePatient.MessageIDMessageRecip.MessageID

这是预期的行为吗,我只是没有了解 SQL 的内部工作原理?从技术上讲,我相信 BizTalk 会在事务中运行所有内容,因此它不应该不同步,即使它做了,如果不是从消息插入中获取 MessageID …

foreign-key stored-procedures uniqueidentifier sql-server-2012

4
推荐指数
1
解决办法
85
查看次数

如何防止 sysadmin 服务器角色执行存储过程

我有一个使用 SQL Server 身份验证的 SQL Server 默认实例和两个用户 User1 和 User2。

User1 具有公共服务器角色,而 User2 具有公共服务器角色 + sysadmin 服务器角色。

我创建了一个数据库 sptest1。在该数据库中,我创建了一个存储过程,sp_viewtbl并创建了一个架构。使用模式我已禁用为 User1 执行存储过程并且它可以工作。

如何拒绝具有 sysadmin 服务器角色的 User2 执行存储过程?

假设我创建了 User3 并授予了 sysadmin 和 public 权限。那么如何防止新用户执行相同的存储过程呢?sp_viewtbl即使他们具有系统管理员权限,我也必须防止其他人登录。

sql-server permissions role sql-server-2012

4
推荐指数
1
解决办法
685
查看次数

通过电子邮件发送报告的最佳方法是什么?

我被要求为一些人创建一些 sql server 报告(创建一个报告并通过电子邮件发送它们)。我以为会是 2 或 3 个,但现在他们知道我可以做到,每周我都需要再创建 1 或 2 个报告。

我使用 SQL Agent 和一些步骤来创建一个表,填充所需的结果,然后将它发送到一个 xls 文件中。那真的不是问题,但我想知道什么可以更好地用于此任务,因为现在我的 SQL 代理上有 20 多个作业。一切都井井有条,等等,但我仍然不喜欢看它。我已经有很多 DBA 工作,我不想混杂。

报告服务是一种可行的方法吗?我可以正常创建一个查询,他们将它发送到一个 excel 文件并通过电子邮件发送它而不使用 C# 或 Visual Studio 吗?

sql-server-2012 reporting enterprise-edition powerbi-report-server

4
推荐指数
1
解决办法
585
查看次数

DIFF 提升为 FULL

我们使用 Ola Hallengren 的DatabaseBackup存储过程将 SQL Server 2012 实例上的 SharePoint 数据库负载备份到 Azure blob 存储中。我们已经这样做了很长一段时间,没有任何问题。然而,在过去的 6 周里,我们DIFFs被随机提升FULL,我们无法找出原因。

这是代理步骤的输出

BACKUP DATABASE [Database] TO URL = N'https://strorgage.blob.core.windows.net/server/instance/Database/2020/11/diff/Database_FULL_20201105_200000.bak' 
WITH NO_CHECKSUM, COMPRESSION, CREDENTIAL = N'*storeageaccountname*'
Run Code Online (Sandbox Code Playgroud)

如果您查看生成的 URL,您会注意到该过程存储在 DIFF 目录中,但创建了一个完整的备份文件。

https://strorgage.blob.core.windows.net/server/instance/Database/2020/11/diff/Database_FULL_20201105_200000.bak
                                                                        --^           --^
Run Code Online (Sandbox Code Playgroud)

DatabaseBackup (Ola proc) 是从 2019-06-14 开始的,所以它需要升级才能公平,但它已经运行了超过 18 个月。

我们不直接调用 Ola 代码,因为我们有一个构建 Azure 虚拟路径名的小包装程序,但本质上这就是我们调用 Ola 代码的方式。

这是一个问题,因为某些未知原因 DIFF 备份被提升为 FULL,这会导致每天 PB 级而不是 GB 级的 Azure blob 备份。

EXECUTE dbo.DatabaseBackup
    @Database = @DatabaseName,
    @URL = @BackupPath,
    @Credential = @StorageAccount,
    @BackupType …
Run Code Online (Sandbox Code Playgroud)

sql-server backup sql-server-2012 ola-hallengren

4
推荐指数
1
解决办法
154
查看次数

数据加密的良好实践

我想知道(更好的想法/最佳实践......)我可以用什么来加密我的数据。

我过去曾使用过 TDE,但我真的不喜欢它。因为如果证书和服务器出现问题,我将无法恢复备份。

我在一次又一次的测试中进行测试,我只是不安全。

还有哪些其他选项可以保护我的数据库/数据/备份文件?

我也尝试过屏蔽数据,但是 1)它用于 sql server 2016+(现在我们使用的是 2012)。和 2)它只是创建了另一列,数据被屏蔽,原始数据仍然存在。

这项任务的好选择是什么?

我想保护我的备份,所以没有人可以在另一台服务器上“窃取和恢复”它,我想防止数据被窃取。

我已经在使用登录和 ETC 的良好安全措施。只有我有 sa 通行证,我创建了一个函数,它每个月都会更改通行证,等等。

sql-server sql-server-2012 transparent-data-encryption

4
推荐指数
1
解决办法
151
查看次数

在 SQL Server Management Studio 2012 中恢复注册的服务器

我的电脑死机了,所以它被重新安装。

以前我安装了 SQL Server 2008 R2。在新系统上,我有 SQL Server 2012。

我有旧RegSrvr.xml文件(包含已注册的 SQL Server 列表)。

如何获取从 2008 R2 到 2012 的服务器列表?

更新: 在执行本地服务器组 -> 任务 -> 导入并选择RegSrvr.xml文件时,单击确定,显示“导入成功” - 但未添加任何服务器或文件夹,并且RegSrvr.xml未修改 2012 安装的文件

来自 xml 文件的示例

 <document>
  <docinfo>
    <aliases>
      <alias>/RegisteredServersStore/ServerGroup/DatabaseEngineServerGroup/ServerGroup/Company1/RegisteredServer/stage</alias>
    </aliases>
    <sfc:version DomainVersion="1" />
  </docinfo>
  <data>
    <RegisteredServers:RegisteredServer xmlns:RegisteredServers="http://schemas.microsoft.com/sqlserver/RegisteredServers/2007/08" xmlns:sfc="http://schemas.microsoft.com/sqlserver/sfc/serialization/2007/08" xmlns:sml="http://schemas.serviceml.org/sml/2007/02" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <RegisteredServers:Parent>
        <sfc:Reference sml:ref="true">
          <sml:Uri>/RegisteredServersStore/ServerGroup/DatabaseEngineServerGroup/ServerGroup/Company1</sml:Uri>
        </sfc:Reference>
      </RegisteredServers:Parent>
      <RegisteredServers:Name type="string">stage.server.dk</RegisteredServers:Name>
      <RegisteredServers:Description type="string" />
      <RegisteredServers:ServerName type="string">stage.server.dk</RegisteredServers:ServerName>
      <RegisteredServers:UseCustomConnectionColor type="boolean">false</RegisteredServers:UseCustomConnectionColor>
      <RegisteredServers:CustomConnectionColorArgb type="int">-986896</RegisteredServers:CustomConnectionColorArgb>
      <RegisteredServers:ServerType type="ServerType">DatabaseEngine</RegisteredServers:ServerType>
      <RegisteredServers:ConnectionStringWithEncryptedPassword type="string">server=stage.server.dk;uid=username;password=AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAegY4QOvPGEGcK2Xdr+jDjQQAAAACAAAAAAADZgAAwAAAABAAAADesdxAGO4GO879z1yS2DZeAAAAAASAAACgAAAAEAAAAGAvgtRJfPRL/puHnREmKu8YAAAAUxRIQVDZHywb7rOYL9MRqG0B2Jvi8kyfFAAAANs53tVPbVux2j56oRU/2oGtmQc9;pooling=false;packet size=4096;multipleactiveresultsets=false</RegisteredServers:ConnectionStringWithEncryptedPassword>
      <RegisteredServers:CredentialPersistenceType type="CredentialPersistenceType">PersistLoginNameAndPassword</RegisteredServers:CredentialPersistenceType>
    </RegisteredServers:RegisteredServer>
  </data>
</document>
Run Code Online (Sandbox Code Playgroud)

sql-server-2008-r2 sql-server-2012

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

SQL-Server 版本 2008R2 和 2012 之间有什么不同

尊敬的 SQL Server 专家:

你能告诉我SQL-Server 2008 R2SQL-Server 2012版本之间的区别吗?我用2008版设计了我的产品,但是当我尝试购买许可证时,微软表示他们不会再出售它,而是购买 2012 版。

所以我需要证明我们的系统可以在 2012 上运行。我知道它向后兼容,但我需要官方证明。请帮我。

sql-server sql-server-2008-r2 license sql-server-2012

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

SQL Server 2012 - 位列上的频繁 SELECT 和 UPDATE。索引没有帮助

我有一个包含大约 200 万行的 SQL Server 表,该表存储简短的文本文档。这是我的架构:

CREATE TABLE Documents (
    documentId bigint IDENTITY NOT NULL,
    content nvarchar(MAX) NOT NULL,
    isIndexed bit NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

我有一个单独的基于 Lucene 的索引器进程来执行此操作:

SELECT TOP 1 documentId, content FROM Documents WHERE isIndexed = 0
Run Code Online (Sandbox Code Playgroud)

然后在执行此操作之前执行索引操作:

UPDATE Documents SET isIndexed = 1 WHERE documentId = @documentId
Run Code Online (Sandbox Code Playgroud)

最初这工作正常。当表中的每个文档都没有被索引时(即所有isIndexed值都是 0),那么每次检索大约需要 5 毫秒。

然而,随着越来越多的文档被索引,检索时间慢慢增加。目前大约是 150 毫秒 - 速度降低了 30 倍。我注意到 UPDATE 语句似乎总是在 2 毫秒内运行,所以我知道这不是问题。

从一开始,表在 isIndexed 列上一直有一个非聚集索引,但实际执行计划显示 SQL Server 使用索引扫描(而不是搜索)。

我可以做些什么来加速系统?

我知道现有的“isIndexed”列本身很糟糕,但由于索引器的工作方式,它无法直接通过 documentId 请求文档。由于这个原因和其他原因,我不能接受任何不能解决手头直接问题的答案。

performance index sql-server sql-server-2012

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