我有一个奇怪的情况。使用sp_whoisactive我可以看到:
好的,通过这个查询,我可以看到是什么触发了(这个词在英语中存在吗?)它:
SELECT c.session_id, c.properties, c.creation_time, c.is_open, t.text
FROM sys.dm_exec_cursors (SPID) c --0 for all cursors running
CROSS APPLY sys.dm_exec_sql_text (c.sql_handle) t
Run Code Online (Sandbox Code Playgroud)
结果:
这是一个简单的select. 为什么要使用 f etch_cursor?
另外,我也看到了很多“空白”的 sql_texts。这与这个“光标”有关系吗?
DBCC INPUTBUFFER (spid) 给我看这个:
有这个问题 在这里(我做的),但我不知道这是否是同样的事情。
编辑1:
使用 kin 提供的查询,我看到了这一点:
编辑2:
使用活动监视器,我可以看到:
这是最昂贵的查询(第一个是故意的,我们知道)。
再一次,我想知道,为什么这select * from...是FETCH CURSOR……的原因。
编辑3:
这个“ select * from...”是从另一台服务器(通过linked server)运行的。
好吧,现在我无法理解@kin 所说的内容。
这是execution plan查询的(在数据库的同一服务器中运行):
这是现在,通过链接服务器在另一台服务器上运行的执行计划:
好的,也不是问题。现在!执行计划,通过**activity monitor**(相同select * from):
它没有发生在我身上。但我正在考虑这个问题。
我在弄乱我的训练环境,误点了数据库名称,然后我触摸了字母A。

假设我按下了回车键。现在数据库叫A,不记得原来的名字了。CTRL + Z 不起作用。

在这样的情况下,在生产环境中该怎么办?
我知道这不可能发生,因为数据库没有设置为 SINGLE USER。但如果发生了。该怎么办?为了论证起见,假设它是一个现在没有人使用的数据库。
我正在将数据库从 迁移SQL Server 2012到SQL Server 2014同一服务器上。
我正在一个明显加密的数据库上配置 LOG SHIPPING:
设置日志传送时,我收到此消息(当它开始从备份恢复数据库时):
我是这里的新 DBA,没有关于主密钥、加密密钥等的报告。
我正在设置从 SQL2012 到 SQL2014 的日志传送(使用 norecovery)。如果我将此数据库设置为Encryption enabled - false并尝试使用日志传送向导恢复数据库,会出现什么问题?
有一些关于这个问题的问题,比如This one,但他们都说我需要密码。
我刚刚master > security > certificates在主服务器(2012)上找到了这个证书:
互联网上有一些代码示例,但我真的不能相信它们(我认为这不是太简单):
`USE MASTER
GO
ALTER DATABASE DatabaseName
SET ENCRYPTION OFF
GO
USE DatabaseName
GO
DROP DATABASE ENCRYPTION KEY
GO`
Run Code Online (Sandbox Code Playgroud)
编辑1:
在这个问题中, Dylon 说:
如果您收到指纹错误,则说明未从源服务器的证书/密钥备份正确创建证书。
我对这个主题感到困惑,我想要的只是禁用加密,恢复另一台服务器上的数据库以记录传送,并在某一天激活加密。
编辑2:
在Database > tasks > manage database encryption有一些选项太:
禁用此功能,我将能够再次备份数据库,并在新实例上恢复它?
sql-server migration log-shipping transparent-data-encryption
我是一家大公司的 JR DBA。我是 6 个月前被聘用的,我学东西的速度非常快(我是这里唯一的 DBA)。
老 DBA 将服务器和 SQL Server 实例留给我处理。
这是一个非常棒的结构(集群等)。
但是,他使用脚本和大量编程来进行备份、清理任务和所有其他 DBA 任务。一切都很好。我在这里和那里修复了一些东西,但一切都非常好。
我正在自己学习 SQL Server,并且正在阅读有关MAINTENANCE PLAN.
使用它是一个不错的选择吗?如果我被新公司录用,使用维护计划是一个不错的选择(对我来说,看起来太“简单”了,不想看起来像一个糟糕的 DBA)。
谢谢。
(作为补充,他使用脚本将数据库名称放在一个表上,然后他使用脚本查找该表并将其用于作业。我可以通过一个简单的维护计划来做到这一点。但他是一名高级 DBA。他告诉我他喜欢它,使用维护计划不是问题。我只是想要一些意见)
我有一个 proc,循环遍历数据库(插入在修复数据库中......选择使用循环),进行插入(将隐藏名称以确保安全):
insert into Main_Database..Table(16 Fields)
select ( there are 16 fields here, DateDiff(s, DtTrabalhoInF8, DtTrabalhoFi) as TempoSegundos
from [Database_name].dbo.View as T1 with (nolock)
where DtTrabalho >= '2015/06/06' and
not exists(select 1 from PainelControle.dbo.tblLogProjetos T2 Where t2.BancoDados collate SQL_Latin1_General_CP1_CI_AS = t1.BancoDados collate SQL_Latin1_General_CP1_CI_AS and t2.codlog = t1.codlog)
Run Code Online (Sandbox Code Playgroud)
问题是:
如果我运行它,它会在 1 秒内运行:
insert into Main_Database..Table(16 Fields)
select ( there are 16 fields here, DateDiff(s, DtTrabalhoInF8, DtTrabalhoFi) as TempoSegundos
from [Database_name].dbo.View as T1 with (nolock)
where DtTrabalho >= '2015/06/06'
Run Code Online (Sandbox Code Playgroud)
问题在这里:
and
not …Run Code Online (Sandbox Code Playgroud) 使用sp_helpindex My_table我有这个列表:

但我的表只有这些索引:
为什么会这样?我正在使用查询在特定表中搜索“相等索引”。这个查询返回了很多我什至没有在表中的索引。
WITH IndexColumns AS (
SELECT '[' + s.Name + '].[' + T.Name + ']' AS TableName,
i.name AS IndexName, C.name AS ColumnName, i.index_id,ic.index_column_id,
COUNT(*) OVER(PARTITION BY t.OBJECT_ID, i.index_id) AS ColCount
FROM sys.schemas AS s
JOIN sys.tables AS t ON t.schema_id = s.schema_id
JOIN sys.indexes AS i ON I.OBJECT_ID = T.OBJECT_ID
JOIN sys.index_columns AS IC ON IC.OBJECT_ID = I.OBJECT_ID
AND IC.index_id = I.index_id
JOIN sys.columns AS C ON C.OBJECT_ID = IC.OBJECT_ID
AND C.column_id = IC.column_id …Run Code Online (Sandbox Code Playgroud) 请,如果这里不是发布此类问题的地方,请告诉我,我将删除它。
在 Glenn berry 的诊断查询中,有一个查询来显示数据库使用了多少 CPU。这是查询:
-- Get CPU utilization by database (Query 24) (CPU Usage by Database)
WITH DB_CPU_Stats
AS
(SELECT DatabaseID,
DB_Name(DatabaseID) AS [Database Name],
SUM(total_worker_time) AS [CPU_Time_Ms]
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY (SELECT CONVERT(int, value) AS [DatabaseID]
FROM sys.dm_exec_plan_attributes(qs.plan_handle)
WHERE attribute = N'dbid'
) AS F_DB
GROUP BY DatabaseID)
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [CPU Rank],
[Database Name], [CPU_Time_Ms] AS [CPU Time (ms)],
CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms]) OVER() * 100.0 AS …Run Code Online (Sandbox Code Playgroud) 我做了这个查询,列出表、它的列、数据类型等:
select t.name as 'Table',
c.name 'Column',
ty.name 'Data_Type',
c.max_length as 'Max_Lenght',
c.is_nullable as 'Null',
c.is_identity as 'Identity'
from sys.tables t
join sys.columns c on t.object_id=c.object_id
join sys.types ty on c.system_type_id=ty.system_type_id
order by 1
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
问题 1:
如何'Is primary key?'向其中添加列?我找不到可以帮助我的表(我看了看sys.indexes, sys.foreign_keys, INFORMATION_SCHEMA.table_constraints)。
问题 2:
在 中sys.columns,int 值具有max_lenghtas 4,还有一些其他字段。这是什么4?每个数据 4kb?datetime还有decimal。
谢谢。
我在面试中被问到这个问题,我不知道答案是什么。
我知道我们有 Windows 身份验证模式和 SQL Server 身份验证。但是面试官说我们在使用Windows认证的时候有两个协议是Windows验证的。
我只是在互联网上找不到任何关于此的信息。
我有一张这样的表:
TB1:
COD | A001 | A002 | A003
1 cars baby nasa
Run Code Online (Sandbox Code Playgroud)
然后是第二张桌子:
TB2:
COD | NO_COL_TB1 | DESCRIPTION |
1 | A001 | Something
2 | A002 | lasagna
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的是这样的事情(显然这不起作用)
select A001 as (select description from TB2 WHERE no_col_tb1= A001 )
,A002 AS (select description from TB2 WHERE no_col_tb1= A002 )
from TB1
Run Code Online (Sandbox Code Playgroud)
我尝试使用内部连接和一些动态 sql,但我无法思考这个逻辑。有一些关于此的问题,但没有一个可以帮助我。我认为这是不可能用单个语句完成的,只能用动态 SQL 来完成。
编辑:
正确的结果是:
SELECT COD,
TB1.A001 AS 'Something',
TB1.A002 AS 'Lasagna'
FROM TB1
Run Code Online (Sandbox Code Playgroud)
结果将是:
COD |SOMETHING | LASAGNA |
1 cars baby
Run Code Online (Sandbox Code Playgroud) sql-server ×7
performance ×2
cursors ×1
dmv ×1
index ×1
log-shipping ×1
metadata ×1
migration ×1
process ×1