我正在尝试做一些非常简单的事情,但有一个问题:
declare @cmd varchar(1000)
set @cmd='restore verifyonly from disk =''\\server\backup_folder\''?'''
exec sp_msforeachdb @cmd
Run Code Online (Sandbox Code Playgroud)
显然它不起作用。我需要运行备份文件的名称Verifyonly(在上面的代码中,我使用的是数据库名称)。
有没有办法自动化Verifyonly,在所有备份文件中运行?
如何在我的代码中使用已创建的备份文件的名称?
非常感谢。
(人们MsForeachdb说不安全。我会尝试搜索另一个选项,例如Foreachdb)
SQL 服务器 2008
EDIT1:嗯,正如我在这里看到的,我认为这不是verifyonly一个好主意,但知道如何去做会很好(仅用于知识)
我真的在寻找这个答案有一段时间了。我敢打赌这里有一个帖子,但是,我真的找不到(即使在 google 上)。
我认为这是一项简单的任务。
我想列出特定用户的所有数据库。
有没有办法做到这一点?
它可以是视图或游标。我就是想不出什么。
我在一家新公司,我看到的第一件事是他们甚至不知道他们有多少个实例。他们没有密码,老 DBA 不知道他在做什么。
长话短说,我几乎可以在每台服务器上创建我自己的 sysadmin 帐户(我将所有数据库仅移动到 1 或 2 个实例),但有些我做不到。
在mssqltips 的这个链接中,有一个名为PsExec的工具。按照教程,我可以运行该程序并使用NT AUTHORITY\SYSTEM. 但它不起作用。NT AUTHORITY\SYSTEM是Public,我无法使用 sysadmin 添加我的帐户。该程序是否只能与 SQL 2008 一起运行?
没有办法停止服务器,因为我们的数据库在巴西各地运行。
这里的帖子数不胜数,但几乎每个人都需要重新启动SQL Server。
如何在不存在 sysadmin 帐户的情况下将 sysadmin 添加到 SQL Server 2008 中的用户(这个是关于该程序的,但正如我所说,它对我不起作用(他使用的是 2008))。
在这个视频中,他使用了这个-M方法。有人已经在 SQL Server 2014 上测试过了吗?我想知道,我会尝试。
我可以与NT AUTHORITY\SYSTEM用户连接,但是当我尝试创建 sysadmin 登录名或更改 sa 密码时,它说我无权这样做。然后,看看 nt 权利,它是公开的。我可以-m在我的机器上使用这个技巧来更改 sa 登录名,但我想要一些不需要关闭 SQL 的东西。
我已经配置了从服务器到同一台服务器的日志传送,只是使用了不同的实例。
Primary server 是这样配置的:
LSBACKUP_MyDatabase - 每 25 分钟
Secondary server:
LSCOPY_MyDatabase - 每 1 分钟
LSRESTORE_MyDatabase - 每 10 分钟
发生的情况是,主要备份作业运行良好(还有更多历史记录,我只显示最后 2 个)。
在文件夹中,我可以看到 TRN 文件。
在第二个实例,LSCOPY并且LSRESTORE是OK了。它正在复制文件,但问题就在这里。还原作业正在报告此“消息”(作业成功运行,因此我认为这不是错误):
信息
2015-12-29 09:10:02.41 跳过日志备份文件。辅助数据库:'MyDatabase',文件:'\ServerIP\instancia g\BACKUP\Log_Sp_Secundario\MyDatabase_20151229104500.trn'
2015-12-29 09:10:02.41 找不到可以应用于辅助数据库“MyDatabase”的日志备份文件。
2015-12-29 09:10:02.42 恢复操作成功。辅助数据库:'MyDatabase',恢复的日志备份文件数:0
2015-12-29 09:10:02.42 删除旧的日志备份文件。主数据库:'MyDatabase'
2015-12-29 09:10:02.42 恢复操作成功。辅助 ID:'5a0a361c-039c-40a3-9c39-af5e338c7f72'
然后,当我单击查看LSALERT_作业的历史记录时,它会报告错误并显示以下消息:
消息以用户身份执行:CMDO\gdladmin。日志传送辅助数据库 VMWGDLPRD04\GDLIC2014.GDL_IC 的还原阈值为 45 分钟,并且不同步。8323 分钟内未执行任何还原。恢复的延迟为 0 分钟。检查代理日志和日志传送监控信息。[SQLSTATE 42000](错误 14421)。步骤失败。
根据 Microsoft 的支持页面之一,此查询可显示日志之间是否存在间隙。没有了:
SELECT
s.database_name,s.backup_finish_date,y.physical_device_name
FROM
msdb..backupset AS s INNER JOIN
msdb..backupfile AS f ON …Run Code Online (Sandbox Code Playgroud) 今天我收到一个错误 (DTSER_FAILURE),但我可以通过编辑维护计划来修复它(这个错误是由于维护计划搜索已删除的数据库,而我在设置中使用了“选定的数据库”)。
但是在互联网上,我读了一些帖子说我应该SP_CONFIGURE 'ALLOW UPDATES',0。
这个选项有什么影响?
我在 Microsoft 页面上读到此选项无效并且已弃用。
sql-server backup maintenance-plans sql-server-2014 sp-configure
我有一个包含数百万行的表。我正在删除where year(data) in (2013,2014,2015)。需要4个多小时。我现在试图只删除 2013 年,但它仍然非常非常慢(每年都有超过 600.000 行,并且有一varbinary列用于存储 .PDF 文件)。
我知道索引会降低删除的性能。该Disable表中的两个索引都将是一个好主意,然后重新启用它们?
如果我创建一个视图并从视图中删除它会更快吗?
编辑:
我做了这个查询以通过前 1 删除它:
delete top (1) from MyTable where year(data) in ( 2013)--,2014,2015)
while @@rowcount > 0
begin
delete top (1) from MyTable where year(data) in ( 2013)--,2014,2015)
end
Run Code Online (Sandbox Code Playgroud) 好吧,幸运的是我在我的测试环境中遇到了这个错误。我非常害怕这个错误,以至于我禁用了我在生产环境中使用的所有登录触发器。
我创建了著名的登录触发器,并将数据库置于离线模式,只是为了处理其他事情。然后我发现因为触发器找不到表,所以我不能再访问实例了。有很多与此相关的问题,但即使做了我能找到的一切,我仍然无法访问该实例,即使使用 SQLCMD 也无法访问。
我这样做:
sqlcmd -S server\instance -U sa -P <pass> -A
Run Code Online (Sandbox Code Playgroud)
如果我不使用,-A我会收到著名的错误:
logon failed for sa due trigger execution.
Run Code Online (Sandbox Code Playgroud)
如果我使用-A:
Sqlcmd:错误:Microsoft ODBC Driver 11 for SQL Server:SQL Server 网络接口:获取专用管理员连接 (DAC) 端口时出错。确保 SQL Browser 正在运行,或检查端口号 [xFFFFFFFF] 的错误日志。. Sqlcmd:错误:用于 SQL Server 的 Microsoft ODBC 驱动程序 11:登录超时已过期。Sqlcmd:错误:Microsoft ODBC Driver 11 for SQL Server:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。
为什么我无法连接到sql server
sql server express 在这里。
我可以启用 SQL Browser,但我仍然无法访问它。
我不认为这个问题是重复的,因为不是关于触发器,而是关于为什么我无法使用 SQLCMD 访问服务器。我几乎知道如何解决这个问题。我只是不知道如何在不触发触发器的情况下访问 sql server。
这对我来说真的是一个令人困惑的话题。
我可以理解 BLOB 是什么,我可以轻松使用它。我能理解 FILESTREAM 是什么。我可以轻松地在数据库中实现,我可以备份数据库并使用为存储这些文件而创建的文件夹来恢复它。像这样的事情,我想,我能理解。
我不明白的是:
.PDF仅使用数据库中的 VARBINARY(MAX) 列插入(例如)与将其存储.PDF在 FILESTREAM 数据库中有什么区别。我知道 BLOB varbinary(max).PDF是在数据库内部。如果我物理删除.PDF,我仍然可以使用存储在 varbinary(MAX) 列中的值来恢复它吗?
当我在.PDF文件流中插入这个文件时,我可以在文件夹中看到它(为文件组创建的那个),如果我插入 100 个文件,我可以在文件流文件夹中看到 100 个文件,但是当我运行DELETE FROM并删除 100 行时数据库,我仍然可以在文件流文件夹中看到这些文件。为什么会发生这种情况?我认为,为了保持一致性,这些文件也会被删除。
对于这两种情况,在.PDFBLOBVARBINARY(MAX)或 FILESTREAM 中插入文件后,我还需要原始文件吗?因为它在数据库中,所以我可以很容易地恢复它。
我以 .PDF 为例
我可以使用和实施这两种方法,但我仍然不清楚它们会发生什么。对我来说,它是一样的,但是一个存储在数据库之外,另一个存储在数据库内。
我正在尝试为我们的 Azure 服务器(用于 sql 数据库)创建一些作业。
我正在互联网上阅读它,并试图在这里找到一些问题但没有成功。
有一个链接说我需要在市场上下载一些东西。我什至无法通过寻找找到这样的应用程序。
有没有办法像我们在 SQL Server 上创建作业一样创建作业?
这里有很多关于 DBA EXCHANGE 的问题。但他们都帮不了我。
我有两个问题:
1)使用sp_whoisactive,我发现了很多sys.sp_reset_connection;1(我知道它们是sp_reset_connections因为我使用了dbcc inputbuffer(SPID):

这是“主服务器”,因此其他服务器( 3,4,7 )在这里不断请求某些数据库的信息(我看到的是,每个请求都是针对 MASTER 数据库的)。

2)他们为什么要花这么多时间?
看这里的一些答案,发现系统在等待CPU。但所有 CPU 都是空的。这怎么会是问题?
在幕后,SQL Server 使用 sp_reset_connection 逻辑来“重置”SQL Server 的连接状态,这比建立全新的连接更快。较旧的驱动程序将过程调用作为单独的 TDS 往返发送到 SQL Server。
较新的客户端驱动程序在下一个命令中添加了一个标志位,从而避免了额外的网络往返。
很好……但我还是不知道该怎么办。
这不会给我带来问题。我只想知道如何解决这个问题。
sql-server ×7
backup ×2
permissions ×2
blob ×1
connections ×1
dac ×1
filestream ×1
log-shipping ×1
security ×1
sp-configure ×1
trigger ×1
varbinary ×1