我创建了一个扩展事件会话,我想在其中查看使用 nolock 提示的所有查询。我决定使用它而不是 sql trace 来最小化可能的性能影响。会话的创建类似于以下语句:
CREATE EVENT SESSION [SCOMDB_debug] ON SERVER
ADD EVENT sqlserver.deprecation_announcement(
ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)),
ADD EVENT sqlserver.rpc_completed(
ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
ADD EVENT sqlserver.rpc_starting(
ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
ADD EVENT sqlserver.sp_statement_completed(
ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
ADD EVENT sqlserver.sp_statement_starting(
ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
ADD EVENT sqlserver.sql_batch_completed(
ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
ADD EVENT sqlserver.sql_batch_starting(
ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
ADD EVENT sqlserver.sql_statement_starting(SET collect_statement=(1)
ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%')))
ADD TARGET package0.event_file(SET filename=N'M:\MSSQL11.SCOMDB\MSSQL\Log\SCOMDB_debug.xel',max_file_size=(500))
WITH (MAX_MEMORY=40960 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
Run Code Online (Sandbox Code Playgroud)
结果是数据库实例(用于 SCOM 数据库)变得非常缓慢,应用程序几乎无法使用。
等待统计信息中充满了 SOS_SCHEDULER_YIELD …
我有两张表,一张表存储各种用户的 GPS 数据,另一张表存储基于 GPS 经纬度值和时间戳差异的用户空闲时间。
表T1内容:
id uid latitude longitude received_time imno
435 25 13.041868 80.198868 2014-08-07 15:53:00 352944054874253
436 25 13.041862 80.198868 2014-08-07 15:54:00 352944054874253
437 25 13.041869 80.198868 2014-08-07 15:55:00 352944054874253
438 25 13.041887 80.198871 2014-08-07 15:55:38 352944054874253
439 25 13.041887 80.198871 2014-08-07 15:55:42 352944054874253
440 25 13.041887 80.198871 2014-08-07 15:55:47 352944054874253
441 25 13.041887 80.198871 2014-08-07 15:55:52 352944054874253
442 25 13.041887 80.198871 2014-08-07 15:56:00 352944054874253
Run Code Online (Sandbox Code Playgroud)
我必须比较具有相同纬度和经度值的行。
如果前一行的经纬度与下一行的经纬度相同,则计算时间戳差,直到下一行的经纬度值不相等。
例如,从 ID 438 到 442,纬度和经度值相同,所以我必须计算:
timediff = 442 received - …Run Code Online (Sandbox Code Playgroud) 我正在尝试使处于恢复挂起状态的 SQL Server 数据库联机并可访问。SQL Server 服务使用一个 Active Directory 帐户,该帐户是域管理员并且是sysadminsql server 上的成员。SQL Server 帐户应该拥有 SQL 文件夹中的权限,因为它是域管理员。但是,它不是 SQL Server 中的本地管理员。
错误消息是:
消息 5120,级别 16,状态 101,第 1 行无法打开物理文件“F:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DBName.ndf”。操作系统错误 5:“5(访问被拒绝。)”。消息 5120,级别 16,状态 9,第 1 行无法打开物理文件“F:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DBName.ndf”。操作系统错误 5:“5(访问被拒绝。)”。
尽管
alter database [DBName] set online;
Run Code Online (Sandbox Code Playgroud)
导致以下错误:
消息 945,级别 14,状态 2,第 1 行由于无法访问的文件或内存或磁盘空间不足,无法打开数据库“databs”。有关详细信息,请参阅 SQL Server 错误日志。消息 5069,级别 16,状态 1,第 1 行 ALTER DATABASE 语句失败。
你能想到解决办法吗?
我是一名应用程序员。我们有一个 SQL Server 2012 实例,它承载着许多相关的数据库(大约 12 个数据库)。供应商对数据库和应用程序之一进行了一些更改,他们希望我们重新启动数据库服务器。我做了一些研究,发现除非在服务器配置中进行了更改,否则重新启动数据库服务器总是不是一个很好的选择。有没有办法只重启那个数据库?那会有帮助吗?
在修补或升级 TDE 加密数据库时,是否应该考虑任何注意事项?在职责分离的情况下,执行补丁或升级过程的人员是否需要访问 TDE 加密数据库的密钥或证书,或者可以在没有密钥的情况下修补数据库。答案很重要,因为我们是一家合法商店,希望应用程序管理员加密数据库并将数据库维护功能外包给 dba,以便在无法访问“应用程序数据”的情况下修补和升级数据库。你能解释一下吗?
我有一个填充物化视图的耗时查询。它已经运行了 18 个小时 - 这是意料之外的。
SELECT STATUS
FROM V$SESSION
WHERE SID=194;
Run Code Online (Sandbox Code Playgroud)
上面的查询将会话显示为“ACTIVE”。我想知道这是否足以证明查询仍在运行,以及是否有任何其他方法可以仔细检查会话是否已死。
更新
会话并没有死;但一直在等待:
SQL*Net more data from dblink
Run Code Online (Sandbox Code Playgroud)
我按照 Phil 的建议使用了 sql trace 得出了这个结论。
我们可以配置基于证书的身份验证来连接(登录)sql 客户端吗?或使用相互身份验证(sql server 和 sql client)连接 sql 客户端的任何其他方法?
这是一个有助于我理解的理论问题。在sql server中从完全恢复模式切换到简单恢复模式的过程是什么?
是不是流程如下:
我想我的主要问题是关于第 1 点。如果我不进行 trans log 备份,将 SIMPLE 丢弃最终 trans log 中的任何数据,或者切换到 SIMPLE 备份 trans log(我认为不会)。
此外,我认为最好的做法是在切换到 SIMPLE 后执行完整备份,以便可以在检查点将新事务从 trans 日志推送到数据文件。
我昨天修改了一个维护计划,今天早上(通过使用来自 sysjobs 的最后修改日期)发现与维护计划相关的所有作业都被禁用。
我无法弄清楚为什么会这样。SQL 作业所有者是sa,我只是用维护计划更改了维护清理任务并保存了作业。
我有一个由其他视图(View-B View-C)组成的视图A,我想列出View-A使用的所有表(其中包括View-B和View-C中使用的表)。当我使用此代码时...
-- Get base tables for 'View-A' in Database-A
USE Database-A
GO
SELECT view_name, Table_Name
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE View_Name = 'View-A'
ORDER BY view_name, table_name
GO
Run Code Online (Sandbox Code Playgroud)
...我只得到了 View-A 立即使用的表以及其他视图的名称(View-B、View-C)。有没有办法递归获取 View-B 和 View-C 也使用的表的名称?
sql-server ×7
recovery ×2
security ×2
backup ×1
corruption ×1
encryption ×1
metadata ×1
mysql ×1
oracle ×1
session ×1
ssl ×1
transparent-data-encryption ×1
upgrade ×1