AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-807

marc_s's questions

Martin Hope
marc_s
Asked: 2016-06-18 02:59:08 +0800 CST

用于集成测试的 SQL Server 数据库快照

  • 14

我正在尝试为我们的集成测试定义一种使用测试数据库(在 SQL Server 中)的方式。

我的想法是在集成测试程序集启动时执行这些步骤:

  • 创建一个完全空的数据库
  • 运行“创建数据库对象”脚本来创建所有相关的数据库对象(表、视图、序列等)
  • 填写“基础数据”(查找值等)
  • (db)_Basis为未来的集成测试拍摄称为“基线”的数据库快照

现在,在每个测试类(包含 1-n 个测试)之前,我计划简单地执行“从快照还原”以返回到数据库的定义明确、或多或少“空”的状态。到目前为止,它就像一个魅力。

但是,有一组集成测试需要在大型测试数据库上运行 - 所以我希望在每个测试夹具(具有 n 个单独测试的类)之前执行此操作

  • 从(db)_Basis快照恢复数据库
  • 将这 50'000+ 行数据插入数据库
  • 创建另一个快照(db)_With_Testdata快照

然后对于每个测试,将数据库重置为定义良好的(db)_With_Testdata快照版本,运行测试,验证结果等等。

问题是:我似乎不能同时拥有两个数据库快照 - 一旦我这样做,我就无法将我的数据库恢复到其中任何一个......我不断收到此错误:

消息 3137,级别 16,状态 4,第 9 行
数据库无法还原。主名称或快照名称指定不正确,未删除所有其他快照,或者缺少文件。

消息 3013,级别 16,状态 1,第 9 行
RESTORE DATABASE 异常终止。

这真的是 SQL Server 数据库快照的工作原理吗?似乎非常限制.....如果我不能直接回到原始的“(db)_Basis”快照,我会理解 - 但仅仅因为我现在有两个快照,我什至不能回到最近的一个?!?!?

sql-server snapshot
  • 2 个回答
  • 2895 Views
Martin Hope
marc_s
Asked: 2016-06-01 21:17:05 +0800 CST

序列 - 无缓存与缓存 1

  • 25

SQL Server 2012+ 中SEQUENCE声明的使用NO CACHE和声明的使用之间有什么区别吗?CACHE 1

序列#1:

CREATE SEQUENCE dbo.MySeqCache1
AS INT
    START WITH 1
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 9999
    NO CYCLE
    CACHE 1;
GO

序列#2:

CREATE SEQUENCE dbo.MySeqNoCache
AS INT
    START WITH 1
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 9999
    NO CYCLE
    NO CACHE;
GO

两者有什么区别吗?在 SQL Server 2012+ 环境中使用时它们的行为会有所不同吗?

sql-server sql-server-2012
  • 1 个回答
  • 5722 Views
Martin Hope
marc_s
Asked: 2013-12-03 07:23:07 +0800 CST

在现有数据库之上快速恢复备份 - 错误“正在使用数据库”

  • 4

我正在编写一组脚本(在 SQL Server Management Studio 中)来修复客户数据库(SQL Server 2008 R2)中的某些数据不一致。

我得到了一个.bak包含数据库的文件,并将其恢复到我的系统中,例如SampleDatabase. 现在我正在编写我的脚本,一段时间后,我已经解决了大部分问题。

所以现在我想.bak再次恢复那个原始文件,以确保我的所有脚本都针对原始数据运行,并做他们应该做的事情。我关闭 SQL Server Management Studio 中的所有 Windows,在我的数据库中打开一个全新的查询窗口master,然后发出我的RESTORE命令:

RESTORE DATABASE [SampleDatabase] 
FROM DISK = N'c:\tmp\sample.bak'
WITH FILE = 1,  
MOVE N'Sample_PRIMARY' TO N'c:\mssql\Sample_PRIMARY.MDF',  
MOVE N'Sample_LOG' TO N'C:\mssql\Sample_LOG.LDF',
NOUNLOAD, REPLACE, STATS = 5

不幸的是,我现在收到一条错误消息:

消息 3101,级别 16,状态 1,行 2
无法获得独占访问,因为数据库正在使用中。
消息 3013,级别 16,状态 1,第 2 行
RESTORE DATABASE 异常终止。

这似乎有点奇怪,因为我确保我已将所有 SSMS Windows 都关闭到该数据库中 - 为什么它仍在使用中?

我怎样才能尽快解决这种情况?我知道现在唯一可行的解​​决方案是重新启动MSSQLSERVER服务 - 但这是一个相当冗长且有些麻烦的过程......

是否有另一种更有效、更简化的方法让这个数据库“停止使用”,这样我就可以再次在它上面恢复备份以检查我的脚本?

sql-server-2008-r2 restore
  • 2 个回答
  • 3545 Views
Martin Hope
marc_s
Asked: 2013-11-23 11:52:04 +0800 CST

集群与事务复制与可用性组

  • 48

假设您需要确保依赖 SQL Server 2012 作为其数据库后端的应用程序全天候可用,即使一台服务器机器出现故障。

作为开发人员而不是 DBA,我很难理解何时使用哪种方案来实现故障转移/高可用性:

  • Windows 故障转移群集中的两台(或更多)服务器,SQL Server 作为群集实例
  • 两个(或更多)通过事务复制保持最新的 SQL Server 实例
  • SQL Server 可用性组中的两个(或更多)SQL Server,配置为同步提交模式

这些场景中的哪一个适用于什么样的工作负载,这些场景可以处理什么样的故障/中断?它们甚至具有可比性/可交换性吗?

sql-server clustering
  • 4 个回答
  • 36025 Views
Martin Hope
marc_s
Asked: 2012-08-15 05:52:25 +0800 CST

找出用于给定存储过程的设置

  • 5

作为我上一个问题的后续行动:

有没有办法需要找出在我的数据库中创建给定过程时的设置ANSI_NULLS?ANSI_PADDING

似乎我的客户有几个存储过程和一些触发器已经“调整” - 但不幸的是,使用了这些数据库设置的“错误”集。我可以找出受影响的触发和触发器,还是需要使用正确的设置重新创建它们?

sql-server sql-server-2008
  • 2 个回答
  • 10356 Views
Martin Hope
marc_s
Asked: 2012-08-14 04:56:39 +0800 CST

SQL Server:不使用 ANSI_NULLS 的默认数据库设置的原因?

  • 3

我遇到过一个客户遇到此错误的案例 - 偶尔:

消息 8624,级别 16,状态 21,第 1 行
内部查询处理器错误:查询处理器无法生成查询计划。如需更多信息,请联系客户支持服务。

他们正在使用我们的软件,并在 SQL Server 2008 R2 (RTM) 和兼容性级别 100 (SQL Server 2008) 上运行它。然而,该数据库最初是在 2000 或 2005 机器上创建的(无法再复制),然后最近移至 2008 R2。

有问题的存储过程有一个丑陋的INSERT语句,它从给定表的十个(是的!)“副本”中获取数据,所有副本都RIGHT OUTER JOIN相互连接(同一个表 - 十个 JOIN 反对它)。

我发现似乎最合适的一种解决方案与各种设置有关 - 建议使用:

set ANSI_NULLS ON
set ANSI_PADDING ON
set ANSI_WARNINGS ON
set CONCAT_NULL_YIELDS_NULL ON
set QUOTED_IDENTIFIER ON
set ARITHABORT ON

set NUMERIC_ROUNDABORT OFF 

好的——当然——我可以在我创建(或更改)的每个存储过程之前设置这些。

我对数据库专家的问题是:当我将这些设置为我的数据库的默认设置时有什么风险吗?

例如

ALTER DATABASE MyDB SET ANSI_NULLS ON

并完成它?想法?洞察力?建议?

sql-server-2008-r2
  • 1 个回答
  • 2844 Views
Martin Hope
marc_s
Asked: 2012-07-24 10:39:31 +0800 CST

处理 CXPACKET 等待 - 设置并行成本阈值

  • 12

作为我之前关于对 Sharepoint 站点进行性能故障排除的问题的后续,我想知道是否可以对 CXPACKET 等待做些什么。

我知道下意识的解决方案是通过将 MAXDOP 设置为 1 来关闭所有并行性 - 听起来是个坏主意。但另一个想法是在并行性开始之前提高成本阈值。执行计划成本的默认值 5 相当低。

所以我想知道是否已经编写了一个查询,可以找到执行计划成本最高的查询(我知道您可以找到执行时间最长的查询等等 - 但是执行计划成本是否可以在某处检索,也是?),这也会告诉我这样的查询是否已并行执行。

有没有人手头有这样的脚本,或者可以指出相关 DMV、DMF 或其他系统目录视图的方向来找出这个?

sql-server-2008 performance
  • 4 个回答
  • 3082 Views
Martin Hope
marc_s
Asked: 2012-07-24 08:46:57 +0800 CST

尝试使用 SQL Server 等待和队列调整 Sharepoint 站点

  • 6

我对 Waits 和 Queues 的这种性能调整很陌生——很有趣,但也不总是那么直观……

现在,我的一个客户有一个 SQL Server 2008 64 位企业版,目前分配了 16 GB 的 RAM,运行在一个有 64 GB RAM 的物理服务器上(同一台服务器上还有其他不断变化的 SQL Server 实例)机也一样)。

他正在运行的这个应用程序是一个 Sharepoint 2010 解决方案,在大多数情况下,它对 Sharepoint 网站表现良好。除了搜索,搜索速度非常慢。

现在从 SQL Server 的角度来看,我观察了几天的等待统计数据,前三种等待类型是:

1) CXPACKET 约为 49%
2) SOS_SCHEDULER_YIELD 约为 10.5%
3) OLEDB 约为 9.5%

这似乎非常一致——随着时间的推移没有大的变化。

  • PAGEIOLATCH_SH 排在第七位 - 占总等待时间的 2.5%,平均资源等待时间为 14 毫秒。
  • ASYNC_IO_COMPLETION 排在八位——不到总等待时间的 2%,但平均资源等待时间高达 38 秒(是的,秒——不是毫秒!)

信号等待时间极短,因此这似乎并不表示 CPU 压力。那么是什么导致了这种模式 - 我们可以做些什么来 (a) 找到更多相关信息,或 (b) 找到加快速度的解决方案?

有什么想法吗?见解?想法?我对任何事情都持开放态度——我们不能改变的是基本架构(单独的 SQL Server 实例,在物理服务器之间移动——以及基于 Unix 的 SAN,它不能保证数据分离并登录到单独的物理磁盘上)

再次说明:这是一个SharePoint站点 - 据我所知,尝试通过索引或重构数据库来解决问题是困难和不可能的。

sql-server-2008 sharepoint
  • 1 个回答
  • 984 Views
Martin Hope
marc_s
Asked: 2012-06-30 07:15:54 +0800 CST

为服务器端跟踪设置过滤

  • 6

我正在尝试在 SQL Server 2008 R2 中设置服务器端跟踪。虽然我选择事件和数据列没有问题,但过滤似乎有点奇怪......

我试图在 SQL 批处理或存储过程的持续时间上设置过滤(过滤任何 >= 1000 毫秒),但我也想过滤所涉及的数据库名称。

当我将跟踪定义从 SQL Profiler 导出到*.sql文件时,我似乎没有发现对数据库名称的任何过滤:

-- lots of other stuff up here - setting up trace events and so on...

-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint

exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 100479e4-6eeb-4608-af17-64141f1631ec'
set @bigintfilter = 1000000
exec sp_trace_setfilter @TraceID, 13, 0, 4, @bigintfilter

....

那是怎么回事?为什么我可以指定要过滤的数据库名称 - 但跟踪定义最终不包含它?

  • 这是否意味着服务器端跟踪总是只检查它正在创建的数据库?
  • 但是为什么我可以按数据库名称指定过滤器呢?
  • 这是否也意味着无法对例如死锁进行跨数据库服务器范围的跟踪?

更新:经过一番折腾,我得出以下结论:

  • 在我的情况下,数据库名称的过滤器未应用于Create Trace脚本,因为我最终只选择了Locks / Deadlock Graph事件 - 并且该事件没有将 aDatabase Name作为事件列公开

  • 如果我选择其他事件,例如RPC completed将公开为事件列,我可以过滤并且该过滤器也正确添加到脚本中。Database NameDatabase NameCreate Trace

我无法弄清楚我是如何在 上实际定义过滤器的Database Name,因为通常情况下,如果事件不公开列,则该列在Column filter对话框中也不可用......

无论如何-出于我无法理解的任何原因(至少现在),Deadlock Graph都不会暴露Database Name,因此我也无法过滤该属性....

感谢所有帮助并提供有见地的评论!

sql-server-2008-r2
  • 2 个回答
  • 4807 Views
Martin Hope
marc_s
Asked: 2012-04-19 21:37:41 +0800 CST

SQL Server - 服务器端跟踪

  • 4

由于那里有一些很棒的帖子,我已经成功地在客户的 SQL Server 实例上开始了一些服务器端跟踪,但是由于这真的是我第一次在“现实生活”中进行跟踪,所以我想知道一些事情。

1) 我在创建跟踪的脚本中定义了跟踪文件的“基本”名称。我每天早上 6 点开始追踪,晚上 7 点再次关闭。我真正喜欢做的是将跟踪文件的基本名称设置为包含日期,例如,我希望将其设为

 (some directory)\MyTrace-2012-Apr-19

等等 - 这样每天的跟踪文件就很容易识别。有没有办法做到这一点?我是否必须每天实际创建和删除跟踪才能得到这个?

2) 如果我每天打开和关闭跟踪,我昨天 ( MyTrace.trc) 的跟踪文件是否会在今天重复使用,直到达到其定义的最大大小?还是 SQL Server 会在每天启动时创建一个新的跟踪文件 ( MyTrace_1.trc, )?MyTrace_2.trc

3) 此外,即使在晚上 7 点之后,我也无法尝试获取该跟踪文件 - 似乎它仍被某个进程锁定,我不能将它复制到其他地方......我假设一旦跟踪已停止,文件将“免费”可用——我错了吗?

sql-server sql-server-2008
  • 1 个回答
  • 308 Views
Martin Hope
marc_s
Asked: 2012-02-23 05:57:10 +0800 CST

事务隔离级别是否也会影响索引?

  • 6

下面是为 SQL Server 专家准备的:如果我将 SQL Server 2008 事务隔离级别设置为READ UNCOMMITTED,这是否也会影响索引页?

例如,使用,或对索引有ISOLATION LEVEL READ UNCOMMITTED什么影响(如果有的话) ?ALLOW_PAGE_LOCKSALLOW_ROW_LOCKS

ALTER INDEX IX_FirstName ON Employee
SET (ALLOW_PAGE_LOCKS=OFF, ALLOW_ROW_LOCKS=OFF)

我似乎无法在任何地方找到明确的答案 - 关于事务隔离级别的 MSDN 文档实际上只讨论了数据页......

sql-server sql-server-2008
  • 1 个回答
  • 343 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve