标签: sql-server-2012

如何在 2 个地理站点上复制数据库?

免责声明:我不知道我在这里谈论的是什么,或者我正在做的事情是否正确。

长话短说,我的上司问我是否可以在另一个地理站点的另一个 SQL Server 实例上复制我们的内部数据库并使它们保持同步。

就上下文而言,他们最近扩大了业务,并在距离主楼(A 场)约 15 英里的地方开设了一座新大楼(我们将称之为 B 场)。两个站点都通过 VPN 连接。

在站点 A,我们安装了 MSSQL 2012 标准版,其中包含我们的内部数据库。

当站点 B 的用户通过 VPN 连接到数据库时,他们报告说建立连接和打开客户端应用程序需要将近 5 分钟的时间。我明天会检查这个,因为我以前从未听说过这个问题。

我的上司似乎认为最好的主意是以某种方式复制/镜像(我不确定这里的术语)站点 B 中服务器上的数据库,并以某种方式使它们保持同步。

这是复制的用途吗?如果是,我可以从哪里开始学习如何复制数据库。

否则,如果这是一个非常糟糕的主意,我还有什么其他选择?

tl;dr - 我可以在两个不同的建筑物中拥有两个保持同步的数据库副本吗?

replication sql-server sql-server-2012

6
推荐指数
1
解决办法
650
查看次数

MS 70-463 的 SQL Server 版

我刚开始学习 MS 70-463 仓库实现,在视频课程中,导师正在针对 SQL Server 2012 评估版,但我已经有了 SQL Server 2012 Express。

有人能告诉我这对我想学习的课程是否足够吗?是否存在我无法在 70-463 课程中执行的功能?

data-warehouse sql-server sql-server-2012

6
推荐指数
1
解决办法
117
查看次数

如何收集 NTFS 文件属性并插入到 SQL Server 表中

我必须提供有关文件系统使用情况的报告。

我正在收集有关文件服务器使用情况的统计数据,具体到单个文件级别,以便我们可以查看谁在使用哪些文件/文件夹、他们使用了多少存储空间、他们拥有多少文件、创建时间和上次使用时间。

为此,我有 2 个 powershell 脚本。

第一个读取文件系统并捕获我想要的属性并将它们保存到文件中。

dir -rec G:\ | Select LastWriteTime, Directory, Name, Extension, Length, @{Name="Owner";Expression={get-acl $_.FullName| select Owner}} | export-csv FileInfo.csv
Run Code Online (Sandbox Code Playgroud)

第二个脚本读取 csv 文件并将数据插入表中。

一旦数据在 SQL 中,我可以解析文本并将其拆分为不同的列,然后生成各种报告并以不同的方式分析数据。我的方法有效,但很麻烦。

有没有更好的方法来收集 NTFS 信息并将其保存到 SQL Server 中?有哪些替代方案?情报局?

编辑:这一切可以组合在一起在一个过程中一起运行吗?

sql-server powershell sql-server-2012

6
推荐指数
1
解决办法
1276
查看次数

如何在单用户模式下启动 Express SQL Server 实例?

我想在单用户模式下启动我的 SQL Server Express 实例来执行一些故障排除,例如恢复 Master 数据库。

我在 SQL Server 配置管理器中找不到“启动参数”选项。

我发现了一些博客,例如http://mssqlfun.com/2014/09/04/how-to-start-sql-server-in-single-user-mode/,但是我无法将-m参数添加到'启动参数'。

请参阅下面的我的 SQL Server 配置管理器的屏幕截图:

在此处输入图片说明

在此处输入图片说明

我的工作环境是:

  1. MS SQL Server 2012 Express 11.1.3000.0
  2. 视窗服务器 2012 R2
  3. SQL Server 2012 Express 安装在域中
  4. 操作系统在 VMware 下运行

有没有可能通过控制台连接的方法?任何想法或建议将不胜感激。

我可以从这个 T-SQL 中看到启动参数:'select * from sys.dm_server_registry;',但是我看不到 SQL Server 配置管理器中的设置。

sql-server sql-server-2012 troubleshooting startup

6
推荐指数
1
解决办法
2741
查看次数

如何在 SQL Server 2012 中针对自定义错误消息创建 SQL 代理警报?

我希望在抛出自定义错误消息时通知操作员。我的理解是我需要向 sys.messages 添加一条消息,然后我可以RAISERROR或者THROW那个错误 ID。在消息 ID 上创建警报并将其设置为发送给操作员应该会创建这些通知。

我在消息 ID 50005 上创建了 SQL 代理警报,并使用以下 T-SQL 创建消息:

EXEC sp_addmessage @msgnum = 50005,
          @severity = 16,
          @msgtext = N'%s';
GO
Run Code Online (Sandbox Code Playgroud)

然后,如果我执行这个:

RAISERROR (50005, -- Message id.
       16, -- Severity,
       1, -- State,
       N'My custom message');
THROW 50005, 'My custom message', 1;
GO
Run Code Online (Sandbox Code Playgroud)

我从RAISERROR和得到以下输出THROW

Msg 50005, Level 16, State 1, Line 68 我的自定义消息

但是,当我查看警报的历史记录时,它显示它尚未触发,并且操作员未收到电子邮件更新。

我的代理警报如下所示:

代理警报设置

编写警报脚本会生成以下内容:

USE [msdb]
GO
EXEC msdb.dbo.sp_update_alert @name=N'Alert DBA on custom errors', 
    @message_id=50005, …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2012 sql-server-agent alerts raiserror

6
推荐指数
1
解决办法
4546
查看次数

查询优化器会忽略碎片索引吗?

场景:我有一个带有索引的繁重 OLTP 表。我在一天或更短的时间内看到了许多插入、更新和删除以及索引碎片。在索引构建的第一天,优化器使用索引,在第二天或第三天,优化器完全跳过它。这是完全相同的查询。

我脑子里的问题:为什么有些查询计划会跳过索引,因为创建索引是为了帮助优化这些计划?

这篇文章的问题:优化器是否可以跳过一个严重碎片化的索引,例如我们有10亿条记录并建立了一个索引,然后两个小时后,所有十亿条记录被删除,我们有5亿条新记录?

我开始认为向该表添加索引根本无济于事,因为表的性质(数据输入快,数据输出快),但只是想了解为什么有一天,优化器会在其计划中使用该指数,但第二天不会。

index sql-server optimization sql-server-2012

6
推荐指数
1
解决办法
590
查看次数

选择不同的行但计算所有行

我有下表:

----------------------------------------------
| ID | interestingData |      timestamp      |
----------------------------------------------
|  1 |       400       | 2016-01-23 17:01:00 |
----------------------------------------------
|  1 |       400       | 2016-01-24 17:01:00 |
----------------------------------------------
|  1 |       350       | 2016-01-25 17:01:00 |
----------------------------------------------
|  2 |       23        | 2016-01-23 17:01:00 | 
----------------------------------------------
|  2 |       34        | 2016-01-24 17:01:00 | 
----------------------------------------------
|  2 |       12        | 2016-01-25 17:01:00 | 
----------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我们的PK在哪里(ID, timestamp)。我正在尝试确定一个查询,该查询将为我提供唯一 ID 和最新的有趣数据,其中有趣数据超过了阈值。当然,这将通过以下方式完成:

SELECT DISTINCT ID
FROM table
WHERE interestingData > threshold
ORDER …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

6
推荐指数
1
解决办法
1075
查看次数

资源池中的系统内存不足,无法运行此查询

在过去的一年中,我们遇到了许多不同的查询同时失败并出现以下错误(或不同资源调控器组中的变体)的情况:资源池“默认”中的系统内存不足,无法运行此错误询问。

最近我们越来越频繁地遇到它。关于导致问题的原因以及如何解决的任何想法?

@@version 返回:

Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) 2015 年 10 月 20 日 15:36:27 版权所有 (c) Microsoft Corporation 企业版:Windows NT 6.1(内部版本 7601)上的基于核心的许可(64 位) : 服务包 1)

全部同时发生的示例错误:

Error: 701, Severity: 17, State: 54.
There is insufficient system memory in resource pool 'default' to run this query.
Error: 701, Severity: 17, State: 123.
There is insufficient system memory in resource pool 'dm' to run this query.
Error: 701, Severity: 17, State: 89.
There is insufficient …
Run Code Online (Sandbox Code Playgroud)

sql-server memory sql-server-2012 resource-governor

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

为什么过程有时会挂起执行 SELECT...INTO #Temp2 FROM #Temp1 JOIN LocalTable...?

我们有几个由作业调用的存储过程,它们遵循特定的模式(旨在最小化阻塞)。其中一些 proc 有时会挂起,运行 CPU、tempdb 分配、读取和写入,直到被终止。图案是:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
CREATE #RemoteTemp...;
INSERT INTO #RemoteTemp EXEC MyLinkedServer.DbName.SchemaName.ProcName;
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
SELECT...INTO #MixedTemp FROM #RemoteTemp JOIN LocalTable...;
Run Code Online (Sandbox Code Playgroud)

然后我们使用#MixedTemp. 但是,最后一条语句有时会在不到一秒的时间内运行,有时会挂起,即使每次执行的行数都相同。什么可能导致这种情况?

附加信息:

  • 1117 和 1118 已启用。
  • 这个 8 核实例的 8 个 tempdb 文件。
  • 没有发生 tempdb 自动增长。

挂起期间:

  • Sch-S 锁定本地表。
  • 在正在读取的临时表上:

    Lock resource_type="HOBT.BULK_OPERATION" request_mode="S"
    request_status="GRANT" request_count="1" Lock resource_type="OBJECT"
    request_mode="X" request_status="GRANT" request_count="1"
    
    Run Code Online (Sandbox Code Playgroud)
  • 在插入的临时表上:

    Lock resource_type="OBJECT"
     request_mode="X" request_status="GRANT" request_count="1"
    
    Run Code Online (Sandbox Code Playgroud)

从 sp_lock(6 和 7 是连接到临时表的数据库,2 是 tempdb):

spid   dbid   ObjId       IndId  Type …
Run Code Online (Sandbox Code Playgroud)

performance sql-server stored-procedures insert sql-server-2012

6
推荐指数
1
解决办法
1013
查看次数

向“NT AUTHORITY\SYSTEM”授予系统管理员权限

对于 SQL Server 2012 及更高版本,如SQL Server 安装中的新增功能所述:

BUILTIN\administrators本地系统( NT AUTHORITY\SYSTEM ) 不会在 sysadmin 固定服务器角色中自动配置。

就我而言,这已经成为一个问题:我有一个 WiX 安装程序,它使用Custom ActionC++ 代码来设置数据库数据(创建数据库、视图、过程、数据等)。Custom Action以 user 身份运行NT AUTHORITY\SYSTEM,但此帐户没有执行CREATE DATABASE脚本的权限。

  1. 安装软件时赋予sysadmin角色是否正确NT AUTHORITY\SYSTEM?或者也许有更好的解决方案?

  2. 如果正确,是否可以找到正确的用户名NT AUTHORITY\SYSTEM?我需要这个名字才能更改权限*。在不同的语言环境中,此名称是不同的,例如,NT AUTHORITY\SYSTEMNT AUTHORITY\???????


添加NT AUTHORITY\SYSTEMsysadmin角色:

IF NOT EXISTS
(
    SELECT name
    FROM master.sys.server_principals 
    WHERE IS_SRVROLEMEMBER ('sysadmin', name) = 1 
    AND name LIKE 'NT AUTHORITY\SYSTEM'
)
EXEC …
Run Code Online (Sandbox Code Playgroud)

sql-server scripting sql-server-2012

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