小编IT *_*her的帖子

使用 SSMS 进行备份时出错

我正在使用 SSMS。我有大约 5 次登录。对于特定登录,我拥有除 sysadmin 之外的所有服务器角色。它是一个 sql 登录(不是 Windows 身份验证)。在用户角色中,它拥有几乎所有数据库的所有权限。对于某些数据库,它只有数据读取器。

现在,当我尝试使用 SSMS 备份数据库并尝试通过单击按钮选择备份目标时,出现以下错误:

"C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Backup

无法访问服务器上的指定路径或文件。验证您是否具有必要的安全权限以及路径或文件是否存在。

如果您知道服务帐户可以访问特定文件,请在“定位”对话框的“文件名”控件中键入文件的完整路径。”

即使我有 db_owner 和所有权限,我也会收到此错误。但是,如果我在文件名字段中手动选择路径,则它允许进行备份而不会出现任何错误。

那么为什么会发生呢?我希望该用户在没有这些错误消息的情况下进行备份。(但我不能为用户提供系统管理员)。我该如何解决?

我已经有一些文章指出使用 SQL 查询并sqlcmd进行备份。但我希望它使用 SSMS 工作。

sql-server backup ssms sql-server-2008-r2

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

从默认跟踪中按文件名提取自动增长事件

我使用下面的查询来获取 sql server 中数据库发生的自动增长事件。

DECLARE @trcfilename VARCHAR(1000);
SELECT @trcfilename = path FROM sys.traces WHERE is_default = 1
SELECT COUNT(*)as no_of_autogrowths,
sum(duration/(1000*60)) as time_in_min,
Filename
FROM ::fn_trace_gettable(@trcfilename, default)
WHERE (EventClass = 92 OR EventClass = 93)
GROUP BY  Filename
Run Code Online (Sandbox Code Playgroud)

它输出自动增长的数量、自动增长所用的时间和文件的逻辑名称。但我想要文件的物理名称(mdf 和 ldf 文件名)而不是逻辑名称。我不知道是否从 sys.traces 中我会得到物理名称,或者请帮助我用另一种方法来做到这一点。

sql-server sql-server-2008-r2 trace

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

分布式 - 跨多个数据库或服务器 - 事务

我对 SQL 中的事务有一些疑问。我执行以下步骤。

  1. 为 DB1 数据库打开连接 1
  2. 开始连接 1 的事务
  3. 在连接 1 上运行命令
  4. 为 DB2 数据库打开连接 2
  5. 开始连接 2 的事务
  6. 在连接 2 上运行命令
  7. 为连接 2 提交事务
  8. 为连接 1 提交事务

如果连接 1 上的提交事务失败(回滚),则连接 2 上的事务应该回滚。是否可以?怎么做?

sql-server sql-server-2008-r2 transaction rollback

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

查询执行时间不一致

我有一个查询有时需要很长时间才能执行。当我检查速度时,它需要 15 秒。但实际上它应该运行得更快。当我再次检查查询时,它在 11 秒内再次执行。然后我尝试删除在查询中使用的强制转换和执行时它只在 8 秒内运行。但是当我再次执行原始查询时,它花费的时间更少。我检查了几台运行查询的计算机。但在某些情况下,我也只在 1 或 2 秒内得到输出。所以执行时间不一致。所以我无法找到为什么会发生这种情况?

下面是我用来测试的查询

SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE ( Charindex('9000413237',CAST([company].dbo.[customer].[Phone no] AS VARCHAR(MAX)))>0 ) 
Run Code Online (Sandbox Code Playgroud)

这里的客户表大约有 30 列。其中“客户名称”的数据类型为 varchar(255),“Sl_No”的类型为 int,“Id”的类型为 int,“电话号码”的类型为 varchar(255)。

当我执行相同的查询(使用强制转换)时,即使在同一台 PC 上进行不同的试验,执行所需的时间也不同。它从 1 秒到 14 秒不等(我尝试了执行查询的试验次数)。时间的变化可能是由于网络延迟、缓存、其他用户使用率高的表等。但是有什么工具或方法可以让我找到执行时间(可能慢或快)的原因?

更新 我只是尝试使用查询来检查 IO 停顿

SELECT 
    mf.physical_name,
    ( io_stall_read_ms / ( 1.0 + num_of_reads )) as [avg read wait],
    ( io_stall_write_ms / ( 1.0 + num_of_writes )) as [avg write wait],
    i.name,
    fs.io_stall
    FROM    sys.dm_io_virtual_file_stats(NULL, NULL) AS fs
    INNER JOIN sys.master_files AS mf …
Run Code Online (Sandbox Code Playgroud)

performance index sql-server-2008-r2 query-performance

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

带有不区分大小写标签的 XML 查询

我有一个要求,我希望 XML 标记在我的 xml 查询中不区分大小写。

例如:

DECLARE @myTable TABLE ( yourXML XML )  

INSERT INTO @myTable SELECT '<z><a><b>1</b><c>2</c></a></z>'
INSERT INTO @myTable SELECT '<Z><A><b>1</b><c>2</c></A></Z>'   

SELECT * FROM @myTable WHERE ( [yourXML].exist('for $x in /z/a where  ( ($x/b[1]) = 1 )  return $x')>0 ) 
Run Code Online (Sandbox Code Playgroud)

返回输出为

yourXML
<z><a><b>1</b><c>2</c></a></z>
Run Code Online (Sandbox Code Playgroud)

但我希望在不考虑 XML 标记大小写的情况下显示输出。所以我想要的输出应该是

yourXML
<z><a><b>1</b><c>2</c></a></z>
<Z><A><b>1</b><c>2</c></A></Z>
Run Code Online (Sandbox Code Playgroud)

怎么做?

xml sql-server sql-server-2008-r2 xquery

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

获取插入的所有行的标识值

我可以Scope_Identity()用来获取插入到标识列中的最后一个标识值。但是如何获取插入语句中插入的所有行的标识值?

例子

insert into DestinationTbl select * from SourceTbl where [col1]='xyz'
Run Code Online (Sandbox Code Playgroud)

上述语句可能会在一个表中插入多行。所以我想要插入的所有行的标识值。怎么做?

sql-server t-sql sql-server-2008-r2 identity

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

浮点数据类型,小数点后有 2 位数字

在 SQL Server 中,float 数据类型在小数点后不显示尾随零

declare @num as float
set @num=5.20
select @num
Run Code Online (Sandbox Code Playgroud)

只会显示5.2 但我希望它显示为5.20

经过一番研究,我发现它可以通过使用来解决

select CAST(@num AS numeric(10,2))
Run Code Online (Sandbox Code Playgroud)

但这不是我期望的解决方案。有没有像设置数据类型或更改数据类型这样的方法,以便我可以实现相同的目标?(如果 float 中有任何变体可以做同样的事情会更好)

如果可能,那么我不需要更改 SQL 语句并包含强制转换等。所以请帮我解决这个问题。

sql-server datatypes sql-server-2008-r2

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

如果第一个条件失败,SQL 会检查每个 And 条件吗?

对于以下类型的查询,And如果第一个And条件失败,sql是否会为每个条件处理数据?如果某行的 Emp_ID 不是 12,那么它会检查 Emp_Name 的条件吗?那么SQL是如何处理这种查询的呢?

SELECT [Emp_ID],[Emp_Name],[Emp_Sal] FROM [gyh].[dbo].[Employee_Demo] where Emp_ID='12' And Emp_Name like '%ab%'
Run Code Online (Sandbox Code Playgroud)

performance sql-server execution-plan sql-server-2008-r2 query-performance

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

SQL Server 2008 R2 Express 单 CPU 内核使用情况和升级到 SQL Server 2014 Express 的需要

在我们的办公室,我们使用安装在 Windows Server 2012 中的 SQL Server 2008R2 Express。SQL Server 数据库同时被网络中的 60 多个用户访问。最近几天,我们遇到了 SQL Server 和我们使用 SQL Server 的程序的性能下降。

从过去几年开始,我们使用 Windows Server 2003 和 SQL Server 2008 R2 Express。几个月后,我们将服务器更改为 Windows Server 2012。

我可以使用性能计数器等分析 SQL Server 的性能。但在此之前我想知道以下细节

  1. SQL Server 2008 R2 Express 是否有任何限制,例如它只使用一个 CPU 核心?这可能是性能缓慢的原因吗?

  2. 在 Windows Server 2012 上使用旧版本 (SQL Server 2008 R2 Express) 时是否存在兼容性问题?

  3. 是否需要升级到 SQL Server 2014 Express?我会得到什么好处吗?

performance sql-server sql-server-express windows-server sql-server-2014

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

SQL Server 中等待时间的理想值

这与我自己的帖子有关

SQL server 每天早上 8:30 开始,晚上 9:30 左右停止。(所以等待时间每天都会重置) SQL server 将被大约 60 个用户同时使用(直接用于修改数据,也用于应用程序的后端数据库)我们在办公室使用)服务器有 8 GB 内存。大多数数据库每小时都会做一次日志备份。(备份由我们自己的备份工具完成,它可以自动进行 SQL 备份)

本文所述,我使用了以下查询。

select *
from sys.dm_os_wait_stats
WHERE [wait_type] NOT IN (
        N'CLR_SEMAPHORE',    N'LAZYWRITER_SLEEP',
        N'RESOURCE_QUEUE',   N'SQLTRACE_BUFFER_FLUSH',
        N'SLEEP_TASK',       N'SLEEP_SYSTEMTASK',
        N'WAITFOR',          N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
        N'CHECKPOINT_QUEUE', N'REQUEST_FOR_DEADLOCK_SEARCH',
        N'XE_TIMER_EVENT',   N'XE_DISPATCHER_JOIN',
        N'LOGMGR_QUEUE',     N'FT_IFTS_SCHEDULER_IDLE_WAIT',
        N'BROKER_TASK_STOP', N'CLR_MANUAL_EVENT',
        N'CLR_AUTO_EVENT',   N'DISPATCHER_QUEUE_SEMAPHORE',
        N'TRACEWRITE',       N'XE_DISPATCHER_WAIT',
        N'BROKER_TO_FLUSH',  N'BROKER_EVENTHANDLER',
        N'FT_IFTSHC_MUTEX',  N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
        N'DIRTY_PAGE_POLL',  N'SP_SERVER_DIAGNOSTICS_SLEEP')
order by wait_time_ms desc; 
Run Code Online (Sandbox Code Playgroud)

结果如下图(只显示前25行)

在此处输入图片说明

现在得到这个结果后,我很困惑这些值是真的很高还是正常情况。(我也获取了与 SQL 相关的性能计数器值,但无法使用它进行故障排除,因为大多数文章只描述了哪些性能计数器使用,而不是正确分析它或者我很难找到我的服务器的性能)那么这些的理想价值是多少?我的 sql server 是否有性能问题?如何决定?

performance sql-server sql-server-2008-r2 wait-types

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