背景故事:我正在尝试将多个 SQL 2012 数据库的副本还原到不同的环境,但应用程序需要它们(大致)及时“同步”。
(当然,理想的方法是使用完整和日志备份使用完整恢复模式,然后使用相同的时间戳进行时间点恢复。但在我的情况下,我不需要它们完全同步,只需在大约 10 分钟左右,我宁愿只处理完整备份和还原。我确实可以控制完整备份的运行时间,但问题是数据库的大小非常不同,因此完整备份运行的时间很长时间长短不一样。)
所以我的问题是:我应该同步完整备份的开始时间吗?还是结束时间?
换句话说,当我恢复完整备份时,我最终会看到备份开始时或完成时的样子吗?
我的理解是所有备份都包含到备份操作完成的时间/点的数据。
管理 SQL 数据库基础结构 - 考试参考书 70-764说:
完整:这包含数据库的全部内容以及在备份操作期间对数据库所做的任何更改。因此,完整备份表示备份操作完成时的数据库。
(强调我的)
然而,对于差异备份,本书暗示了一些不同的东西:
差异:这仅包含上次完整数据库备份与执行差异备份操作的时间点之间的差异。
这样对吗?或者这只是不精确的语言?这里的“执行”是指差异备份开始或完成的时间吗?
对于其他备份类型(日志、部分、文件备份),本书并没有完全说明这一点?
我有一个 SQL 2012 服务器,它每 5 分钟左右抛出以下错误:
错误:17886,严重性:20,状态:1。
服务器将断开连接,因为客户端驱动程序在会话处于单用户模式时发送了多个请求。当客户端在会话中仍有批处理运行时发送重置连接的请求,或者当会话正在重置连接时客户端发送请求时,会发生此错误。请联系客户端驱动程序供应商。
我会提醒所有 Sev 20 错误,所以我不能忽略这一点。
好消息是我有一些关于如何修复它的线索(似乎是连接字符串问题):
在坏消息是,我不知道哪个应用程序导致错误!
该服务器拥有 50 多个数据库,来自各种商业供应商、承包商或内部开发人员。该错误不包含有关哪个 spid 或登录名或主机名或数据库导致问题的详细信息。
我尝试在sp_WhoIsActive发生错误时查看活动的 spid(使用),但是服务器上的活动太多而无法突出显示(我也不知道我在寻找什么)。与运行 SQL 探查器相同 - 在不知道如何过滤的情况下,我只是看到服务器持续处理的大量数据。
我试图通过找出哪些应用程序团队进行了最近的更改来缩小范围,但到目前为止还没有成功。
有任何想法吗?
我们在 Windows 2003 上有一个 SQL 2008 Analysis Services 实例,它在高峰活动期间几乎每天都遇到性能问题(查询超时)。从同一应用程序查询的第二个相同实例(使用循环 IP 进行负载平衡)没有相同的问题。我们甚至切换了两个实例,问题似乎“停留”在物理服务器上。我们知道这不是 SSAS 配置问题。立方体每天重建一次。
以下是我们能够确定的:当Memory\System Cache Resident Bytes perfmon 计数器意外下降时发生超时(我们称之为“缓存刷新”)。例如,今天早上它在大约 2 分钟内从大约 14GB 下降到 8.4GB。发生这种情况时,Memory:Page Reads/sec从 0 跳到 800-1200,事情开始横盘整理。
您可以看到对 MSOLAP 计数器的直接影响:存储引擎查询\数据读取/秒从 50,000 危险地下降到 5,000(这些显然不是物理读取,它们是从系统缓存中读取;这可以通过类似的下降得到证实)进程(msmdsrv)\IO 读取操作/秒)。存储引擎查询\平均时间/查询从 500-2000 攀升至 20,000-50,000,并且查询开始超时。线程\处理池忙线程从 ~50 跳到最大配置值 240,并且线程\处理池作业队列长度开始攀升。
在接下来的 30 分钟左右,查询会继续超时,直到(我认为)文件缓存被丢失的数据重新填充。Memory\Page Reads/sec回落到接近零,事情似乎恢复到“正常”。
在整个过程中,Process(msmdsrv):Working Set (~10.5GB) 、Process(Total):Working Set (~13.9GB) 或MSOLAP:Memory\Memory Usage KB (~50GB)没有显着变化。这是一台具有 128GB RAM 的 48 核服务器,仅运行 SSAS(另一台没有问题的服务器是 24 …
我有一个参与镜像会话的数据库,有些东西严重崩溃,数据库卡在“恢复中”,不允许我删除它,因为它认为数据库正在使用中,尽管我看不到什么。
我运行它,但未列出受影响的数据库:
SELECT DB_NAME(dbid) as 'DBName'
, loginame as 'Login'
, COUNT(dbid) as 'Connections'
FROM sys.sysprocesses
WHERE dbid > 0
GROUP BY dbid, loginame
Run Code Online (Sandbox Code Playgroud)
我也运行EXEC sp_who2,数据库也没有列出
我跑
ALTER database careplans set offline with ROLLBACK IMMEDIATE;
DROP database careplans;
我收到错误消息“ALTER DATABASE 失败,因为无法在数据库‘careplans’上放置锁。稍后再试。”
这不会带来任何结果:
select * from sys.sysprocesses where dbid = DB_ID( 'careplans')
Run Code Online (Sandbox Code Playgroud)
这给了我“无法放置锁”错误:
ALTER DATABASE careplans
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
Run Code Online (Sandbox Code Playgroud)
这给了我“无法获得独占访问权限,因为数据库正在使用中”。错误:
RESTORE DATABASE CarePlans WITH RECOVERY
Run Code Online (Sandbox Code Playgroud)
以下任何一项都会给我“无法放置锁”错误:
ALTER DATABASE careplans SET SINGLE_USER WITH NO_WAIT
ALTER DATABASE careplans SET …Run Code Online (Sandbox Code Playgroud) 我有一个 50GB 的 SQL 2008 数据库(其中只有 36 个是数据)和一个每晚重建的 24GB 分析服务器多维数据集。
多维数据集重建每晚都在使用 SQL 服务器上越来越多的 TempDB。昨晚 TempDB 数据文件在用完 TempDB 驱动器上的所有空间之前增长到大约 100GB。
我可以添加更多空间,但如果我更了解这里发生的事情,我会感觉更好:
编辑:我能想到的这个特定数据库的唯一显着区别是他们为他们的最终数据集使用了一些非常大、非常复杂的嵌套视图。如果这些复杂的视图是用于构建多维数据集的视图,这能解释 tempDB 的高使用吗?
可能更多的是 SQL Management Studio 问题而不是 SQL 本身,但是当我运行以下简单查询时:
SELECT results = 'Foo' + CHAR(13) + CHAR(10) + 'Bar'
Run Code Online (Sandbox Code Playgroud)
根据我选择“结果到网格”还是“结果到文本”,我似乎会得到不同的结果。
将 SSMS 设置为“结果到文本”后,我得到(如预期):
results
--------
Foo
Bar
(1 row affected)
Run Code Online (Sandbox Code Playgroud)
但是将 SSMS 设置为“结果到网格”,然后复制并粘贴结果,我得到
Foo Bar
Run Code Online (Sandbox Code Playgroud) 我处于需要查询数据库中的数据的情况,但正在努力解决如何正确形成查询的问题。基本上我需要从下表中获取数据:
Table: Contact
contact_id INT [Primary Key]
first_name VARCHAR(50)
last_name VARCHAR(50)
Table: Contact_Phone
contact_id INT [Foreign Key/Composite Primary Key]
phone_number VARCHAR(15) [Composite Primary Key]
extension VARCHAR(10), NULL
Table: Contact_Fax
contact_id INT [Foreign Key/Composite Primary Key]
fax_number VARCHAR(15) [Composite Primary Key]
Table: Contact_Email
contact_id INT [Foreign Key/Composite Primary Key]
email VARCHAR(100) [Composite Primary Key]
Run Code Online (Sandbox Code Playgroud)
现在并不是我Contacts桌子上的每个联系人都有电话、传真或电子邮件。有些人只有一部电话或传真。其他人只是一封电子邮件。我知道有一个联系人只有一个电话号码。
现在我的问题是,如果我尝试对所有这些表进行简单的查询以查找特定的联系信息,如果其中任何一个都没有条目(例如,我的一个没有传真或电子邮件的联系人) 然后我根本没有返回任何数据。
所以问题是,我如何将这个查询放在一起,以便如果我试图查找特定联系人的信息,即使其中一个发生,我仍然能够看到所有数据(电话/传真/电子邮件)是空白?