小编Rac*_*SQL的帖子

sp_WhoIsActive (SQL Server 2008 R2) 上有很多“FETCH API_CURSOR0000...”

我有一个奇怪的情况。使用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):

这到底是怎么回事?

sql-server-2008 process execution-plan cursors

9
推荐指数
1
解决办法
5333
查看次数

意外更改数据库名称 (SQL Server 2008)

它没有发生在我身上。但我正在考虑这个问题。

我在弄乱我的训练环境,误点了数据库名称,然后我触摸了字母A。

案件

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

案例2

在这样的情况下,在生产环境中该怎么办?

我知道这不可能发生,因为数据库没有设置为 SINGLE USER。但如果发生了。该怎么办?为了论证起见,假设它是一个现在没有人使用的数据库。

sql-server-2008 sql-server

8
推荐指数
3
解决办法
2118
查看次数

将“启用加密”设置为 FALSE...会出现什么问题?

我正在将数据库从 迁移SQL Server 2012SQL 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

7
推荐指数
1
解决办法
6603
查看次数

DBA 任务 (SQL Server 2008) - 建议 - 维护计划

我是一家大公司的 JR DBA。我是 6 个月前被聘用的,我学东西的速度非常快(我是这里唯一的 DBA)。

老 DBA 将服务器和 SQL Server 实例留给我处理。

这是一个非常棒的结构(集群等)。

但是,他使用脚本和大量编程来进行备份、清理任务和所有其他 DBA 任务。一切都很好。我在这里和那里修复了一些东西,但一切都非常好。

我正在自己学习 SQL Server,并且正在阅读有关MAINTENANCE PLAN.

使用它是一个不错的选择吗?如果我被新公司录用,使用维护计划是一个不错的选择(对我来说,看起来太“简单”了,不想看起来像一个糟糕的 DBA)。

谢谢。

(作为补充,他使用脚本将数据库名称放在一个表上,然后他使用脚本查找该表并将其用于作业。我可以通过一个简单的维护计划来做到这一点。但他是一名高级 DBA。他告诉我他喜欢它,使用维护计划不是问题。我只是想要一些意见)

sql-server database-recommendation

6
推荐指数
1
解决办法
1683
查看次数

6GB 表 - 37Mi 行 - 'System.OutOfMemoryException' - SQL 2008 R2

我有一个 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)

performance sql-server-2008-r2 query-performance

6
推荐指数
1
解决办法
207
查看次数

为什么我的 SP_HELPINDEX 显示了很多索引?

使用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)

index sql-server sql-server-2008-r2

6
推荐指数
1
解决办法
892
查看次数

Glenn Berry 查询中的疑问(每个数据库的 CPU)

请,如果这里不是发布此类问题的地方,请告诉我,我将删除它。

在 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)

performance sql-server-2008-r2 dmv

6
推荐指数
2
解决办法
430
查看次数

将 [是主键列] 添加到此查询

我做了这个查询,列出表、它的列、数据类型等:

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

谢谢。

sql-server metadata sql-server-2014

6
推荐指数
1
解决办法
455
查看次数

SQL Server Windows 身份验证使用的两种协议是什么?

我在面试中被问到这个问题,我不知道答案是什么。

我知道我们有 Windows 身份验证模式和 SQL Server 身份验证。但是面试官说我们在使用Windows认证的时候有两个协议是Windows验证的。

我只是在互联网上找不到任何关于此的信息。

sql-server

6
推荐指数
1
解决办法
1088
查看次数

是否可以根据 select+where 的结果为列添加别名?

我有一张这样的表:

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-2008 sql-server

6
推荐指数
1
解决办法
3725
查看次数