我刚刚在仅安装了 VS2019 的计算机上安装了 SSMS 18 GA,当我尝试打开 SSMS 时,会出现启动画面,但随后进程退出。
使用-log
参数运行 ssms 会显示一条错误消息:
包 [Task Scheduler Package] 的 CreateInstance 失败:源:“mscorlib”描述:无法加载文件或程序集“Microsoft.VisualStudio.Shell.Interop.8.0,版本=15.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其中之一它的依赖。定位的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040) System.IO.FileLoadException:无法加载文件或程序集“Microsoft.VisualStudio.Shell.Interop.8.0,版本=15.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)文件名:'Microsoft.VisualStudio.Shell.Interop.8.0,版本=15.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a' ---> System.IO.FileLoadException:无法加载文件或程序集“Microsoft.VisualStudio.Shell.Interop.8.0,版本=8.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一. 定位的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)文件名:'Microsoft.VisualStudio.Shell.Interop.8.0,版本=8.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'
警告:程序集绑定日志已关闭。要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 设置为 1。注意:有一些与程序集绑定失败日志记录相关的性能损失。要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。
在 System.Reflection.RuntimeAssembly.GetType(RuntimeAssembly assembly, String name, Boolean throwOnError, Boolean ignoreCase, ObjectHandleOnStack type) at System.Reflection.RuntimeAssembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase) at System.Activator.CreateInstance(String assemblyString, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfoculture, Object[] activationAttributes, Evidence securityInfo, StackCrawlMark& stackMark) at System.Activator.CreateInstance(String assemblyName, String typeName) at …
我有一个由大约 50 个客户端通过 TCP 上的 TDS 访问的数据库,它似乎没有释放日志空间。进程数保持在预期的 50 个左右,其中一些进程很长(> 120 天)。
数据库现在有 40 gb 的日志空间(它只有 14 gb 数据),39 gb 空闲空间。由于驱动器的空间限制,我想缩小到更合理的(10gb-ish)。当我执行时DBCC SHRINKFILE('db_log', 10000)
,它返回日志末尾正在使用的错误。
为了自由访问日志的末尾,我尝试使用以下命令将数据库置于单用户模式:
ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE db SET MULTI_USER
GO
Run Code Online (Sandbox Code Playgroud)
但脚本返回以下消息重复数百次:
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
Run Code Online (Sandbox Code Playgroud)
这让我相信在某个地方,我会留下一些未提交的交易。我不知道有任何过程会故意一次打开这么多交易,所以我认为它们必须随着时间的推移而积累,永远不会被关闭。
问题:如何定位有问题的进程或脚本,或者为什么没有发布日志?
sys.dm_tran_active_transactions
显示合理的 18 笔交易,目的是可以理解的。 sp_who
只显示我知道的过程。
SQL Server 版本:
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Apr 2 2010 15:48:46
Copyright (c) Microsoft Corporation …
Run Code Online (Sandbox Code Playgroud) 我的一位开发人员认为COALESCE(column, default value) = default value
现在可以使用了。那正确吗?
我进行了以下测试,并认为这意味着这COALESCE
是不可分割的。
USE tempdb;
SELECT @@VERSION;
-- Microsoft SQL Server 2016 (RTM-CU3-GDR) (KB3194717) - 13.0.2186.6 (X64) Oct 31 2016 18:27:32 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows 10 Pro 6.3 <X64> (Build 14393: ) (Hypervisor)
CREATE TABLE Test
(
ID int primary key clustered,
Mod6 int null,
INDEX IX_Mod6 NONCLUSTERED (Mod6)
);
INSERT INTO Test (ID, Mod6)
SELECT object_id as ID, case when name like '%k%' then null else …
Run Code Online (Sandbox Code Playgroud) 想象一下,我有一个模式,其中包括Products
,Orders
,和OrderLineItems
,与Products
作为一个系统版本态表。
架构:
CREATE TABLE dbo.Products
(
ProductID INT NOT NULL IDENTITY PRIMARY KEY,
Name nvarchar(255) not null,
SysStart DATETIME2 (7) GENERATED ALWAYS AS ROW START NOT NULL,
SysEnd DATETIME2 (7) GENERATED ALWAYS AS ROW END NOT NULL,
PERIOD FOR SYSTEM_TIME ([SysStart], [SysEnd])
)
WITH (SYSTEM_VERSIONING = ON(HISTORY_TABLE = dbo.Products_History, DATA_CONSISTENCY_CHECK = ON));
GO
CREATE TABLE dbo.Orders
(
OrderID int not null identity primary key,
OrderDate datetime2 (7) not null
);
CREATE TABLE …
Run Code Online (Sandbox Code Playgroud) 我们有一个特定的 SQL Server,它在接受连接时会间歇性地超时。该问题全天都是一致的,但发生率非常低。如何继续排除故障?
连接超时已过期。尝试使用登录前握手确认时超时时间已过。这可能是因为登录前握手失败或服务器无法及时响应。尝试连接到此服务器所花费的持续时间是 - [Pre-Login] 初始化 = 0; 握手=15002;(Microsoft SQL Server,错误:-2)
服务器配置:
测试脚本(每秒执行一次):
$failed = $false;
$loginDuration = (Measure-Command {
$ncon = New-Object System.Data.SqlClient.SqlConnection `
@( 'Data Source=1.2.3.4,16143;Database=Test;User=Test;Password=****;Pooling=false;' );
try
{
$ncon.Open();
$cmd = New-Object System.Data.SqlClient.SqlCommand `
@( 'SELECT @@VERSION', $ncon );
$cmd.ExecuteNonQuery();
$ncon.Dispose();
}
catch
{
$failed = $true;
}
}).TotalMilliseconds;
Write-Metric …
Run Code Online (Sandbox Code Playgroud) 我支持使用 SQL Server 2016 后端的第三方应用程序。我们没有源代码访问权限,第三方支持响应缓慢。大多数情况下,我可以索引和魔术来摆脱它向数据库抛出的有时可怕的查询,但是在很多情况下,我几乎无能为力(在时间、金钱和存储的限制下) )。查询是错误的。
有没有办法在行政上将应用程序提交的查询替换为其他查询?如果应用程序名称匹配,我正在想象对批处理执行的某种正则表达式匹配。
例子:
-- Submitted by application
update Table set IsBilled = 0 where ID = '{EFD5F13C-6123-4913-B530-8941FC71B969}'
-- What I want the query to be (to avoid spurious updates to Table)
-- (Table is large, and the application is submitting this query on every page view)
update Table set IsBilled = 0 where ID = '{EFD5F13C-6123-4913-B530-8941FC71B969}' and IsBilled = 1
-- Proposed regex
-- Match
update Table set IsBilled = 0 where ID …
Run Code Online (Sandbox Code Playgroud)