今天,我们的生产 sql 服务器的性能下降了。在发生这种情况时,我们记录了几个"The query processor could not start the necessary thread resources for parallel query execution"
错误。我所做的阅读表明,这与执行复杂查询时要使用的 CPU 数量有关。但是,当我在停电期间检查我们的CPU Utilization was only at 7%
. 还有什么其他的东西可以指代我还没有遇到过吗?这是性能下降的可能罪魁祸首还是我在追逐红鲱鱼?
我的 sp_configure 值如下:
name minimum maximum config_value run_value
cost threshold for parallelism 0 32767 5 5
Run Code Online (Sandbox Code Playgroud) 如果目标数据库中存在表,我正在尝试签入存储过程。如果没有,我将使用源数据库中的 information_schema 表创建表。但是,当我使用 sp_execute 尝试恢复表是否存在时,我收到错误过程需要“int”类型的参数“@handle”。
我没有使用@handle 参数。有人能告诉我这个错误是什么意思以及为什么我会收到它吗?我的代码的相关部分如下。
DECLARE @SQL NVARCHAR(MAX),
@Parameters NVARCHAR(4000),
@TableNotExists INT,
@SourceTable NVARCHAR(200),
@DestDB NVARCHAR(200)
BEGIN
SET @SourceTable = 'table'
SET @DestDB = 'database'
SET @Parameters = N'@SourceTableIN NVARCHAR(200), @TableNotExistsOut INT OUTPUT'
SET @SQL = N'USE [' + @DestDB + '] IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''BASE TABLE'' AND TABLE_NAME = @SourceTableIN)
BEGIN SET @TableNotExistOUT = 1 END'
EXEC sp_Execute @SQL, @Parameters, @SourceTableIN = @SourceTable, @TableNotExistsOUt = @TableNotExists OUTPUT
END
Run Code Online (Sandbox Code Playgroud) 我有一个能够删除任何数据库的 sql server 用户。我一直在运行下面的代码来检查用户在 SQL Server 中拥有的权限,但无法确定用户如何能够删除数据库。是否有 sql 脚本可以帮助我确定此用户如何删除 dbs?是否有命令拒绝他们删除任何数据库?(SSMS 未将用户显示为 dbcreator 角色的一部分)
select USER_NAME(p.grantee_principal_id) AS principal_name,
dp.type_desc AS principal_type_desc,
p.class_desc,
OBJECT_NAME(p.major_id) AS object_name,
p.permission_name,
p.state_desc AS permission_state_desc
from sys.database_permissions p
inner JOIN sys.database_principals dp
on p.grantee_principal_id = dp.principal_id
order by principal_name
Run Code Online (Sandbox Code Playgroud)
如果有帮助,上面查询的输出为用户提供了以下三个记录
class_desc object_name permission_name permission_state_desc OBJECT_OR_COLUMN xp_cmdshell EXECUTE GRANT DATABASE NULL CONNECT GRANT
DATABASE NULL CREATE DATABASE GRANT
我需要创建一个警报,当任何查询被阻止超过 60 秒时会通知我。例如,如果有人在表上打开了一个事务并且忘记运行提交或回滚。这可以从系统表中获取吗?
一点信息。
我正在运行 SQL SERVER 2008 R2 64 位。我安装了 Microsoft.ACE.OLEDB.12.0 提供程序。
在我的生产服务器上,我使用上面列出的提供程序为访问数据库设置了一个链接服务器,一切正常。
将 Access db 复制到我们的开发环境并尝试使用相同的提供程序设置链接服务器。测试连接成功返回从链接服务器中选择返回
消息 7399,级别 16,状态 1,第 1 行链接服务器“MYdb”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”报告错误。提供者没有提供有关错误的任何信息。消息 7330,级别 16,状态 2,第 1 行无法从链接服务器“MYdb”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”中获取一行。
两台服务器都运行相同版本的 SQL Server。两者都是 Windows NT 6.1 64 位操作系统。
当我将 AllowInProcess 设置为 1 时,测试连接失败。
任何帮助将不胜感激,因为谷歌让我失望。
谢谢,
克里斯
作为一个更大项目的一部分,我试图在 SQL Server 实例中的每个数据库上创建一个新视图。
我创建了一个存储过程,其中包括通过游标循环遍历实例中的数据库,然后尝试使用sp_executesql
. 不幸的是,我试图在其上创建视图的数据库中不存在存储过程。所以我试图让 sql server 使用该数据库,然后运行创建视图脚本。当我运行它时,我收到错误
'CREATE VIEW' 必须是查询批处理中的第一个语句。
关于我如何做到这一点的任何想法?这是sp_executesql
程序的一部分。
declare @DB VARCHAR(50)
declare @SQL NVARCHAR(max)
set @DB = '[dbname]'
SET @SQL = N'USE ' + @DB + N' CREATE VIEW vNonhiddenCategories
AS
SELECT categories.categoryid
FROM categories
--WHERE ... irrelevant remainder of view code ...
'
execute sp_executesql @SQL
Run Code Online (Sandbox Code Playgroud) 我已经使用服务的凭据设置了到 Adventure Works DW 数据库的数据源连接。
我正在使用该DimDate
表创建一个维度。为了简化事情,我只使用Calendar Quarter
, Calendar Year
, Day Number of Month
, English Month Name
, 和Date Key
列。
这些属性中的每一个都已设置为 AttributeHierarchyVisible = False
。
我将其Calendar Year
拖入Hierarchies
后跟Calendar Quarter
, English Month Name
,Day Number of Month
。
我将属性关系设置为:
日期键 -> 月份的天数 -> 英文月份名称 -> 日历季度 -> 日历年
所有关系都设置为 rigid
。
当我尝试部署此设置时,出现以下错误:
错误 2 内部错误:操作未成功终止。0 0
错误 3 服务器:当前操作被取消,因为事务中的另一个操作失败。0 0
我也收到此警告:
警告 1 OLAP 存储引擎中的错误:处理时发现重复的属性键:表:'dbo_DimDate',列:'CalendarQuarter',值:'2'。该属性是“日历季度”。0 0
我无法弄清楚发生了什么,或者为什么会出错。我正在使用的这本书给了我上面列出的步骤,到目前为止,谷歌让我失望了(一件非常可怕的事情)。
你们可以提供任何帮助来帮助我弄清楚我做错了什么,将不胜感激。
我们的生产数据库由另一家公司在他们的域中托管。我能够将 RDP 放入框中并使用他们提供给我的凭据登录,但是当我尝试使用 SSMS 从本地计算机上的本地计算机登录时,SSMS 会强制使用我的本地凭据。我已经尝试过,但找不到使用 SSMS 前端更改这些凭据的方法。
我尝试使用目标为的快捷方式
C:\...\runas.exe /netonly /user:DOMAIN\USERNAME "C:\...\ssms.exe"
Run Code Online (Sandbox Code Playgroud)
但是当 SSMS 出现时,它似乎仍在尝试使用我的本地凭据并且不允许我连接。有什么我想念的吗。我如何告诉 SSMS 它连接到不同的域帐户?
在我目前的工作地点,有人决定将 ID 放入逗号分隔的列中。我希望将这些分解为适当的多对多关系。然而; 引用此数据的应用程序不会立即更改。所以我需要修改一个视图以仍然显示逗号分隔的列。设置视图以显示逗号分隔列的最佳方法是什么?有没有一种不涉及离开原始列的方法?
表定义的精简版本如下。
ID
ProductName
FeatureIDs
ID ProductName FeatureIDS
1 Hot dog 1,5,4
2 Hamburger 1,3
3 Fish 2
ID
FeatureName
ID FeatureName
1 Mayo
2 TarTar Sauce
3 Pickle
4 Relish
5 Onion
Run Code Online (Sandbox Code Playgroud)
最终我想将这些组合成一个单一的产品表和多对多的关系
ID 产品名称 产品类型
其中产品类型将是“产品”或“功能”
ID productid featureid
对于映射表。
是的,设置的视图需要是可更新的视图。
我们每晚都将来自一堆数据库的数据整合到四个报告数据库中。
因为每晚都会导入整个数据集,所以我们不需要能够将数据恢复到某个时间点。因此数据库处于简单恢复模式。
然而,每次我们运行导入时,我们的数据库ldf
文件都会变得非常大(50+ Gig)。
有没有办法完全关闭日志记录或让 SQL Server 更快地清除这些日志文件?
我猜没有进行结算的log_reuse_wait_desc
是ACTIVE_TRANSACTION
。