我有一个 Sql 脚本文件,它执行一系列操作。我在脚本中有事务,所以如果发生什么事,整个脚本都会回滚。
我的问题是说脚本成功执行并且在测试应用程序时发现了某些错误。
现在我想在说 x 天后恢复脚本中发生的所有操作。这是一个事务性数据库,我不必担心任何新的数据添加,因为这只是一个暂存环境。我关心的是恢复 SQL 脚本本身所做的所有结构或数据修改。有人可以告诉我有哪些选择。
我是否需要在回滚脚本中为原始脚本所做的操作编写完全相反的语句。
示例:
主脚本 -Insert Into Customers values(1,'Test','USA') 回滚脚本 - 从 id = 1 的客户中删除 .. 等其他事务(我已经简化了这一点,我在SQL 脚本文件)
谢谢
谢谢
我需要将查询提示(如NOWAIT或NOLOCK)应用于CROSS APPLY此查询中的 。我该怎么做:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT *
FROM sys.objects obj WITH (NOLOCK)
INNER JOIN sys.stats stat WITH (NOLOCK) ON stat.object_id = obj.object_id
CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) sp
Run Code Online (Sandbox Code Playgroud)
我无权访问函数内容(出于显而易见的原因。)
我继续从问题中删除了repro,以使其更清楚。我不太关心重现阻塞的能力。(它也发生在客户环境中,以及第 2548 期的 First Responder Kit 中。)
如何向 ola.hallengren 备份脚本添加加密。
简而言之我想实现这个目标
BACKUP DATABASE [MyTestDB]
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\MyTestDB.bak'
WITH
COMPRESSION,
ENCRYPTION
(
ALGORITHM = AES_256,
SERVER CERTIFICATE = MyTestDBBackupEncryptCert
),
STATS = 10
Go
Run Code Online (Sandbox Code Playgroud) 我正在运行一些测试以找出更新统计信息后查询计划何时失效。我用于测试的机器是 SQL Server Developer 2016 SP1 CU7。
我在BrentOzar.com上找到了一篇关于如何跟踪重新编译的文章,但我从未得到重新编译。
Auto Update Statistics并且Auto Create Statistics都启用
这是我的测试:
/* Create a table and put over 1k rows in it (to get past the 500 row stats threshold) */
CREATE TABLE dbo.MyTable (ID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED, StringField VARCHAR(50));
GO
INSERT INTO dbo.MyTable(StringField)
SELECT 'Stuff' FROM sys.all_objects;
GO
/* Start a trace monitoring recompiles */
exec sp_BlitzTrace @Action='start', @TargetPath='c:\temp\', @SessionId=@@SPID, @TraceRecompiles=1;
GO
SELECT * FROM dbo.MyTable WHERE StringField = …Run Code Online (Sandbox Code Playgroud) 对于我们的一个 SQL 服务器,有一个过程会造成阻塞混乱:
大多数情况下,该存储过程在一秒内完成,但不知何故使事务保持打开状态。我从 sp_whoisactive 看到的是 status = sleep 并打开 tran 1 持续大约 5-6 分钟。在这段时间内,出现了起伏的阻塞链。
这个 SP 没有像 BEGIN 和 END TRAN 这样的任何事务。它做了一些基本的 select col,col2,col3.... into #temptables from table1 inner join table 2 ... 然后从 #temptable 中选择
当我们从应用程序检查为什么可能有一个事务保持打开状态时,我正在阅读这些场景以在 SP 本身中使用 XACT ABORT ON。但是当不涉及事务时,XACT ABORT 设置如何在这种情况下提供帮助?
请指教
我在 AWS Aurora Postgres 15.5 上有一个 Stack Overflow 数据库的公共副本:
users 表有这个索引:
create index users_length_displayname on users(length(displayname));
Run Code Online (Sandbox Code Playgroud)
但是当我运行以下任一查询时:
select * from users where length(displayname) > 35;
select length(displayname) from users where length(displayname) > 35;
Run Code Online (Sandbox Code Playgroud)
他们不使用功能索引,正如他们的查询计划所证明的那样:
那么,呃,为什么?
SQL Server 中是否有一种方法/任何函数/DMV 可以提供谁执行了特定数据库的存储过程?
当 sp_BlitzIndex 做索引建议时,我脑子里的问题如下:
是的,建议的索引在执行 select 语句时会带来很多速度优势。但是这些索引还有另一个成本,即删除、插入、更新查询
sp_BlitzIndex 脚本是否也考虑了删除、插入、更新成本?还是仅评估 select 语句会带来多少速度优势?
此外,我如何通过 sp_BlitzIndex 列出坏索引?他们是如何确定坏的?
非常感谢您的回答
没有执行计划仅在 DMV sys.dm_exec_query_plan 的 query_plan 列中返回空值。关于为什么的任何线索?我使用 sp_blitzcache 'reads' 和 'duration' 来显示长时间运行的查询,但没有执行计划返回。
sql-server ×7
t-sql ×2
backup ×1
cross-apply ×1
hints ×1
performance ×1
postgresql ×1
statistics ×1