如何确定 MongoDB 文档插入验证失败的原因?我得到的只是一个写着“文档验证失败”的 writeError,这不是很有帮助。
(这种情况经常发生,我想了解如何正确调试这些,而不是寻求特定示例的帮助。)
我知道我可以使用sys.fn_my_permissions
以下方法查询有效权限:
USE myDatabase;
SELECT * FROM fn_my_permissions('dbo.myTable', 'OBJECT')
entity_name | subentity_name | permission_name
------------------------------------------------
dbo.myTable | | SELECT
dbo.myTable | | UPDATE
...
Run Code Online (Sandbox Code Playgroud)
这告诉我当前用户myTable
在数据库中是否具有 SELECT、INSERT、UPDATE 等权限myDatabase
。
是否可以很容易地找出为什么用户拥有这些权限?例如,我希望有一个fn_my_permissions_ex
输出附加reason
列的函数:
USE myDatabase;
SELECT * FROM fn_my_permissions_ex('dbo.myTable', 'OBJECT')
entity_name | subentity_name | permission_name | reason
------------------------------------------------------------------------------------------------------------------------------------
dbo.myTable | | SELECT | granted to database role public
dbo.myTable | | UPDATE | member of group MYDOMAIN\Superusers, which belongs to database role db_datawriter
... …
Run Code Online (Sandbox Code Playgroud) 在讨论这个问题的递归 CTE 解决方案时:
@ypercube偶然发现了一个令人惊讶的异常,这导致我们调查类型修饰符的处理。我们发现了令人惊讶的行为。
即使被指示不要这样做。最基本的例子:
SELECT 'vc8'::varchar(8)::varchar
Run Code Online (Sandbox Code Playgroud)
人们可能会期望varchar
(没有修饰符),至少我会。但结果是varchar(8)
(带修饰符)。下面的小提琴中有许多相关的案例。
不需要,所以这在相反的一面出错:
SELECT ARRAY['vc8']::varchar(8)[]
, ARRAY['vc8']::varchar(8)[] || 'vc8'::varchar(8)
Run Code Online (Sandbox Code Playgroud)
第一个表达式varchar(8)[]
按预期产生。
但是第二个,在连接另一个之后varchar(8)
被淡化到只是varchar[]
(没有修饰符)。来自array_append()
,下面小提琴中的示例的类似行为。
在大多数情况下,所有这些都无关紧要。Postgres 不会丢失数据,并且当分配给列时,该值无论如何都会被强制转换为正确的类型。然而,相反方向的错误最终会导致一个令人惊讶的异常:
鉴于此简化表:
CREATE TABLE a (
vc8 varchar(8) -- with modifier
, vc varchar -- without
);
INSERT INTO a VALUES ('a', 'a'), ('bb', 'bb');
Run Code Online (Sandbox Code Playgroud)
虽然此 rCTE 对varchar
列有效vc
,但对 …
我是一名使用 SQL Server 2014 实例开发 Web 应用程序的开发人员。我使用 Visual Studio 2010 sp1 进行开发。对于我目前正在处理的任务,我想使用 SQL Server 远程调试器来调试我们通过 ORM(实体框架)调用的非常大的存储过程。为此,我打开 SQL Server Management Studio 2014 并在新的查询窗口中键入以下内容:
EXEC [dbo].[MoveAllInvoiceStage]
Run Code Online (Sandbox Code Playgroud)
当我按下调试按钮时,我收到以下错误:
====================================
无法启动调试器
====================================
数据为空。不能对 Null 值调用此方法或属性。(系统.数据)
------------------------------ 节目地点:
在 System.Data.SqlTypes.SqlBinary.get_Value() 在 Microsoft.SqlServer.Management.UI.VSIntegration.DebugSession.DebugCallbacks.OnSqlInitializeDebuggingEvent(ISqlInitializeDebuggingEvent sqlInitializeDebuggingEvent) 在 Microsoft.SqlServer.Management.UI.VSIntegration.DebugSession.DebugCallbacks.Microsoft.VisualStudio .Debugger.Interop.IDebugEventCallback2.Event(IDebugEngine2 debugEngine, IDebugProcess2 debugProcess, IDebugProgram2 debugProgram, IDebugThread2 debugThread, IDebugEvent2 debugEvent, Guid& riidEvent, UInt32 属性)
接下来是一个对话框,上面写着:
无法启动程序“MSSQL:://<servername>/<databasename>/sys/=0”。
我正在使用具有 sysadmin 角色的 Windows 登录名连接到数据库服务器,并且所有必要的防火墙规则都已在服务器和我的 PC 上就位。我确保满足此处列出的要求。
当数据库服务器托管 SQL Server 2008 R2 实例时,远程调试器正在工作,但似乎在将实例升级到 SQL Server 2014 后停止工作。我仍然可以在本地 SQL Server 2014 实例(托管远程数据库)。只有远程调试会产生此问题。
我已经确认另一台 …
我正在使用 SQL Server 2008 R2,它根据我的查询自动锁定数据库项目。
有时这种死锁 - 具有不同查询的两个线程永远不会结束。
有什么方法可以调试 SQL Server 如何锁定和解锁资源?我尝试过 SQL Trace,但它没有关于资源锁的信息。
我遇到了远程调试问题。我有一个非域服务器和一个非域客户端 PC。客户端 PC 可以成功连接到服务器和实例,它甚至可以作为服务器本地管理员帐户的上下文运行 SSMS。但即使设置了所有这些,当我尝试在 SSMS 中调试时,我还是收到以下错误:
无法启动 T-SQL 调试。无法附加到 SQL Server 进程
我已遵循此资源中的所有这些步骤和检查:
测试 1:当您在本地连接到同一实例时,问题不会重现
测试 2:检查 TCP 139、TCP 445、UDP 137 和 UDP 138 是否从双方(服务器和客户端)打开(例如:配置 Transact-SQL 调试器)
测试 3:检查 SQL management Studio 是否已通过“运行管理员...”启动
测试 4:检查 SQL 服务帐户是否可以连接到客户端计算机。使用T-SQL调试时,SQL服务账号会与机器主机Management Studio进行通信。使用域账号设置SQL服务是一个额外的原因
测试 5:检查 SSMS 和 SQL 服务器服务是否在同一个域中。如果没有,请设置与 SQL Server 使用的帐户和密码相同的帐户和密码。
测试 6:检查您的域帐户是否为 sysadmin。
测试 7:检查 Kerberos 是否已正确启用并且 SPN 是否适合您的实例。- SQL 网络接口库无法注册 SPN - SQL Server 2008 连接问题:无法生成 SSPI 上下文
测试 8:从服务器端检查以下服务是否已启动 …
我们有一组相当复杂的存储过程,它们以全天候计划处理事务队列。这些脚本使用许多打印语句来记录正在执行的操作以帮助调试。
我想在生产中运行时保留此信息(作为 SQL Server 代理作业),以帮助在出现问题时进行故障排除。我看过这个网站,它有一个相当好的保存打印输出的方法,但它也有一些缺点(在脚本完成之前输出不可用等)。它还需要我没有经验的 SSIS 或 DTS。
我想过将所有打印语句更改为将语句插入到日志表中。问题是我们需要调试信息的大部分工作都在事务控制之下,如果出现错误,所有日志信息都将与实际事务一起回滚。
有没有人有更好的解决方案或如何使用我在上面看到的任何一个解决方案的想法?
T-SQL Debugger 的默认端口是 135,是否可以更改此端口?在我的公司中,此端口位于禁止端口的特殊列表中,因此我们需要在另一个端口号上打开该服务。
我正在关注这篇文章:
用于 SQL Server 2008 的 Transact-SQL 调试器——Bill Ramos 的第 2 部分
我想在 TSQL 中调试。当我开始调试时,会弹出以下消息框。在 SSMS v17.2 中
然后我看到这个消息:
在 Microsoft Visual Studio 2015 服务器资源管理器中,同样的错误:
然后我看到这个消息:
谢谢你!
BOL 文档说运行调试器需要 sysadmin 权限。
我 90% 肯定没有解决此要求的方法,但我想我会问以防万一有人找到了一种方法来授予调试器权限而不授予系统管理员权限。
当您有一个开发团队需要逐步执行带有变量等的复杂游标循环以调试某些方面时,人们会怎么做?
大多数商店甚至不允许开发人员在开发服务器上拥有系统管理员权限,并且许多商店不允许开发人员使用他们自己的开发人员 sql server 版本在他们的本地机器上保留企业数据的副本,例如由于 PII 和数据安全原因。
不知道为什么调试器会这样设置。
所以,我很好奇其他人如何处理类似场景中的 Debugger 权限请求。
你在你的环境中做什么?
我在捕获 SQLSTATE 和 SQLCODE 的过程中添加了一个 EXIT 处理程序,甚至找到了获取过程名称的方法,但我还需要知道错误发生的位置。建议非常感谢。
declare EXIT handler for SQLEXCEPTION
begin
select sysibm.routine_specific_name, SQLSTATE, SQLCODE
into v_sp_name, v_sqlstate, v_sqlcode
from sysibm.sysdummy1;
call dbms_output.put_line('Error in '||v_sp_name ' ['||v_sqlstate, v_sqlcode||']');
end;
Run Code Online (Sandbox Code Playgroud) 在 Windows Server R2 Standard 上的 SQL Server 2012 Enterprise 的 SSMS 中,每次我尝试设置数据收集集选项“非缓存 - 按相同计划收集和上传数据”的子选项“按需”时,我是得到错误:
没有计划,收集集无法启动。指定集合集的时间表
标题:Microsoft SQL Server 管理工作室
对象“磁盘使用情况”上的“更改”操作在执行期间失败。(Microsoft.SqlServer.Management.Sdk.Sfc)
执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)
捕获错误#:14684,级别:16,状态:1,在过程:
sp_syscollector_start_collection_set,行:203,与消息:捕获错误#:14693,级别:16,状态:1,在过程:
sp_syscollector_start_collection_set,行:108,与消息:没有计划就无法启动集合集。指定集合集的计划。(Microsoft SQL Server,错误:14684)
现在,除了启用和禁用已经存在的故障数据收集之外,我看不到如何以任何方式重新设置或重新配置数据收集。
任何想法如何使它工作?
首先,我想了解是我搞砸了它(尽管我在不同的机器上尝试过)还是其他人?
更新:
Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)
企业版:Windows NT 6.1 上的基于核心的许可(64 位)(内部版本 7601:Service Pack 1)(管理程序)
我们在生产中使用了 Oracle 11g。应用系统仍在积极开发中。获取导致任何错误的 SQL 语句将非常方便。
Oracle 是否提供标准函数来跟踪和记录这些语句和附加(调试)信息?