免责声明:我不知道我在这里谈论的是什么,或者我正在做的事情是否正确。
长话短说,我的上司问我是否可以在另一个地理站点的另一个 SQL Server 实例上复制我们的内部数据库并使它们保持同步。
就上下文而言,他们最近扩大了业务,并在距离主楼(A 场)约 15 英里的地方开设了一座新大楼(我们将称之为 B 场)。两个站点都通过 VPN 连接。
在站点 A,我们安装了 MSSQL 2012 标准版,其中包含我们的内部数据库。
当站点 B 的用户通过 VPN 连接到数据库时,他们报告说建立连接和打开客户端应用程序需要将近 5 分钟的时间。我明天会检查这个,因为我以前从未听说过这个问题。
我的上司似乎认为最好的主意是以某种方式复制/镜像(我不确定这里的术语)站点 B 中服务器上的数据库,并以某种方式使它们保持同步。
这是复制的用途吗?如果是,我可以从哪里开始学习如何复制数据库。
否则,如果这是一个非常糟糕的主意,我还有什么其他选择?
tl;dr - 我可以在两个不同的建筑物中拥有两个保持同步的数据库副本吗?
我刚开始学习 MS 70-463 仓库实现,在视频课程中,导师正在针对 SQL Server 2012 评估版,但我已经有了 SQL Server 2012 Express。
有人能告诉我这对我想学习的课程是否足够吗?是否存在我无法在 70-463 课程中执行的功能?
我必须提供有关文件系统使用情况的报告。
我正在收集有关文件服务器使用情况的统计数据,具体到单个文件级别,以便我们可以查看谁在使用哪些文件/文件夹、他们使用了多少存储空间、他们拥有多少文件、创建时间和上次使用时间。
为此,我有 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 Express 实例来执行一些故障排除,例如恢复 Master 数据库。
我在 SQL Server 配置管理器中找不到“启动参数”选项。
我发现了一些博客,例如http://mssqlfun.com/2014/09/04/how-to-start-sql-server-in-single-user-mode/,但是我无法将-m参数添加到'启动参数'。
请参阅下面的我的 SQL Server 配置管理器的屏幕截图:
我的工作环境是:
有没有可能通过控制台连接的方法?任何想法或建议将不胜感激。
我可以从这个 T-SQL 中看到启动参数:'select * from sys.dm_server_registry;',但是我看不到 SQL Server 配置管理器中的设置。
我希望在抛出自定义错误消息时通知操作员。我的理解是我需要向 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) 场景:我有一个带有索引的繁重 OLTP 表。我在一天或更短的时间内看到了许多插入、更新和删除以及索引碎片。在索引构建的第一天,优化器使用索引,在第二天或第三天,优化器完全跳过它。这是完全相同的查询。
我脑子里的问题:为什么有些查询计划会跳过索引,因为创建索引是为了帮助优化这些计划?
这篇文章的问题:优化器是否可以跳过一个严重碎片化的索引,例如我们有10亿条记录并建立了一个索引,然后两个小时后,所有十亿条记录被删除,我们有5亿条新记录?
我开始认为向该表添加索引根本无济于事,因为表的性质(数据输入快,数据输出快),但只是想了解为什么有一天,优化器会在其计划中使用该指数,但第二天不会。
我有下表:
----------------------------------------------
| 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) 在过去的一年中,我们遇到了许多不同的查询同时失败并出现以下错误(或不同资源调控器组中的变体)的情况:资源池“默认”中的系统内存不足,无法运行此错误询问。
最近我们越来越频繁地遇到它。关于导致问题的原因以及如何解决的任何想法?
@@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) 我们有几个由作业调用的存储过程,它们遵循特定的模式(旨在最小化阻塞)。其中一些 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. 但是,最后一条语句有时会在不到一秒的时间内运行,有时会挂起,即使每次执行的行数都相同。什么可能导致这种情况?
附加信息:
挂起期间:
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
对于 SQL Server 2012 及更高版本,如SQL Server 安装中的新增功能所述:
BUILTIN\administrators和本地系统( NT AUTHORITY\SYSTEM ) 不会在 sysadmin 固定服务器角色中自动配置。
就我而言,这已经成为一个问题:我有一个 WiX 安装程序,它使用Custom ActionC++ 代码来设置数据库数据(创建数据库、视图、过程、数据等)。Custom Action以 user 身份运行NT AUTHORITY\SYSTEM,但此帐户没有执行CREATE DATABASE脚本的权限。
安装软件时赋予sysadmin角色是否正确NT AUTHORITY\SYSTEM?或者也许有更好的解决方案?
如果正确,是否可以找到正确的用户名NT AUTHORITY\SYSTEM?我需要这个名字才能更改权限*。在不同的语言环境中,此名称是不同的,例如,NT AUTHORITY\SYSTEM或NT AUTHORITY\???????。
添加NT AUTHORITY\SYSTEM到sysadmin角色:
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-2012 ×10
sql-server ×9
alerts ×1
index ×1
insert ×1
memory ×1
optimization ×1
performance ×1
powershell ×1
raiserror ×1
replication ×1
scripting ×1
startup ×1
t-sql ×1