我正在尝试获取有关索引的信息。根据几个网站,下面的 TSQL 查询应该将索引信息加入索引表,返回索引和相关信息。下面的查询被简化为裸连接,因为我目前正在尝试返回数据,然后从那里返回我需要的内容:
SELECT *
FROM sys.indexes i
INNER JOIN sys.dm_db_index_usage_stats s ON i.object_id = s.object_id
Run Code Online (Sandbox Code Playgroud)
此查询不返回任何内容。然而,在几个数据库中有数百个表至少有一个索引,根据网上的各种文章,这个查询应该返回这些索引(因为它连接到对象 ID)。此外,如果我尝试将查询更改为以下查询,它也不会返回任何内容:
SELECT *
FROM DATABASENAME.sys.indexes i
INNER JOIN DATABASENAME.sys.dm_db_index_usage_stats s ON i.object_id = s.object_id
Run Code Online (Sandbox Code Playgroud)
为什么这个查询不返回数据?
添加
如果我运行以下查询,我会从这两个SELECT查询中收到数据:
SELECT *
FROM sys.indexes
SELECT *
FROM sys.dm_db_index_usage_stats
Run Code Online (Sandbox Code Playgroud)
问题(在原始查询上)是object_id连接。但是,我不知道为什么我在一个表中的对象在另一个表中不存在。
最终:Martin 最初给出了正确答案——即使数据是从sys.dm_db_index_usage_stats表中返回的,它也在msdb数据库中,而不是我正在寻找的特定数据库中。我再次对表运行查询,并在表中找到了数据库 ID。不确定为什么该sys.dm_db_index_usage_stats表没有保留先前对该数据库查询的数据。
是否有任何边缘情况建议在存储过程开始时显式检查、删除和创建临时表,而不是仅仅创建它们?
同样,是否存在在存储过程结束时显式删除它们比让 SQL Server 清理它们更可取的情况?
sql-server stored-procedures sql-server-2012 tempdb sql-server-2014
我需要检查datecom小于datelivr
create table Commande
(
Numcom int identity primary key,
Datecom date,
Datelivr date,
Codecli int foreign key references clients (Codecli)
)
alter table Commande
add constraint date_check check(datediff(day,Datecom,Datelivr) > 0)
Run Code Online (Sandbox Code Playgroud)
但我收到错误消息:
ALTER TABLE 语句与 CHECK 约束“date_check”冲突。冲突发生在数据库“tp4”,表“dbo.Commande”中。
这怎么会发生?
我有一些流程需要在开始之前采取不同的步骤。例如:
禁用对外键的检查约束:
select 'alter table '+fk.table_schema+'.'+fk.table_name
+' NOCHECK CONSTRAINT '+fk.CONSTRAINT_NAME
from SAProduct.information_schema.table_constraints fk
join SAProduct.information_schema.tables t
on t.table_schema = fk.table_schema
and t.table_name = fk.table_name
WHERE constraint_type='FOREIGN KEY'
Run Code Online (Sandbox Code Playgroud)
这将产生一个很大的语句列表,我只复制 3 个:
use saproduct
go
alter table dbo.tblProdClassificationCode NOCHECK CONSTRAINT FK_tblProdClassificationCode_tblProdClassification
alter table dbo.tblProdClassificationCodeDescr NOCHECK CONSTRAINT fk_ProdClassificationCodeDescr_ProdClassificationCode
alter table dbo.tblProdClassificationCodeGenerate NOCHECK CONSTRAINT fk_ProdClassificationCodeGenerate_ProdClassification
Run Code Online (Sandbox Code Playgroud)
如果我要一次性运行它,我将如何找到我的位置?我正在处理哪张桌子,下一张是哪一张?
删除也是一样的:
select 'DELETE FROM '+table_schema+'.'+table_name
from saproduct.information_schema.tables
where table_name like 'tbl%'
Run Code Online (Sandbox Code Playgroud)
上面的脚本将生成以下语句集:
use saproduct
go
DELETE FROM dbo.tblBLanguage
DELETE FROM dbo.tblBLgCategoryXRef
DELETE FROM dbo.tblBLgSegmentXRef
DELETE FROM dbo.tblProdClassification
DELETE …Run Code Online (Sandbox Code Playgroud) 我现在正在阅读SQL Server 2012 Internals书。SOS 缩写词有几个短语,例如“SOS 调度程序”(在关于调度程序的章节中)、“SOS 内存节点”(在关于空闲缓冲区列表和惰性写入器的章节中)。但我在任何地方都找不到意思。
我正在测试登录触发器以限制与某些 IP 的连接。看起来触发器不正确。现在我无法登录到服务器,即使是SA.
有没有办法来解决这个问题?
我在 sqlskills.com 上使用此博客作为练习在事务日志备份中查找相关 LSN 以进行时间点恢复的指南。
备份事务日志后,我尝试使用以下命令读取它:
SELECT COUNT(*) FROM fn_dump_dblog (
NULL, NULL, 'DISK', 1, 'D:\TEMP\test_tlog2.bak',
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, …Run Code Online (Sandbox Code Playgroud) sql-server-2008 sql-server sql-server-2008-r2 restore transaction-log
我需要对 AlwaysOn 进行一些基准测试,无论是否启用 TDE。我看到的所有说明都涉及将加密数据库添加到可用性组,但我没有提到为 AG 中已有的数据库启用加密。
我可以将服务器证书恢复到所有节点,然后从主节点启用 TDE 吗?我希望我不需要从 AG 中删除数据库,对其进行加密,然后重新初始化所有节点,因为数据库大约为 100 GB。如果需要,我们可以这样做,但这肯定会减慢我们的测试速度。
更新
我只是在一些实验室虚拟机上尝试过这个。我能够在主节点上创建一个证书,在所有辅助节点上恢复它,然后使用这个证书在主节点上创建一个数据库加密密钥。之后我所要做的就是ALTER DATABASE AdventureWorks SET ENCRYPTION ON在主服务器上,一两分钟后,sys.dm_database_encryption_keys 在所有节点上都显示了 encryption_state = 3。
那么,后续问题:是否有任何理由认为我不应该使用此程序?SQL Server 似乎对结果很满意,但我还没有看到任何地方讨论过这种方法。在处理加密和高可用性问题时,我不想让事情碰运气。
sql-server sql-server-2012 availability-groups transparent-data-encryption
我正在尝试配置对我的 SQL Server 命名实例(名为 SQL2012)的 TCP 访问。我使用管理工作室连接到数据库引擎。我输入服务器名称:“tcp:localhost\SQL2012”,然后收到此错误消息:
(提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)
SQL Server 团队的这篇文章似乎非常有用,他们建议使用 PortQry 测试 SqlBrowser 服务。当我这样做时,我会得到以下信息:
Querying target system called:
localhost
Attempting to resolve name to IP address...
Name resolved to 127.0.0.1
querying...
UDP port 1434 (ms-sql-m service): LISTENING or FILTERED
Sending SQL Server query to UDP port 1434...
Server's response:
ServerName MSWART7
InstanceName SQL2012
IsClustered No
Version 11.0.5058.0
tcp 52329
?K K P?K 5 - 2 1 qK 1 4 rK 8 7 0? 1 …Run Code Online (Sandbox Code Playgroud) sql-server ×10
alter-table ×1
connectivity ×1
constraint ×1
ddl ×1
index ×1
monitoring ×1
restore ×1
ssms ×1
t-sql ×1
tempdb ×1
transparent-data-encryption ×1
trigger ×1