我有一个 postgres 实例,我需要找出谁/什么正在连接。安装的 postgres 版本是 9.0.1。该实例位于 Linux 机器上,我相信是 SUSE。如果它已经记录了这一点,我可以在哪里查看?如果没有,我可以启用什么?我需要原始主机名和/或 ip,除此之外我不需要任何其他信息。
Eric Swiggum's questions
下面是我TRY/CATCH
在带有错误处理的存储过程中的逻辑片段(我没有包括所有DECLARE
语句)。这是在存储过程中运行的,但是我只是通过 SSMS 在会话中测试它(这会影响行为吗?)。我确实偶然发现了这个线程,但是我是否必须竭尽全力才能简单地捕获错误?
BEGIN TRY
DECLARE @sql varchar(1000);
SET @sql = 'select 1/0';
EXEC(@sql);
-- On Error the remaining TRY/CATCH below is compeltely ignored I discovered.
DECLARE @error int;
SET @error = @@error;
IF @error > 0
BEGIN
SET @raisemessage = 'SQL Backup Error: ' + cast(@rc as varchar(10));
RAISERROR (@raisemessage, 16,1);
END
END TRY
BEGIN CATCH
SET @errormessage = ERROR_MESSAGE();
IF @errormessage is null
SET @errormessage = ''
SET @errorstring = @errorstring + 'Database: ' + @name + ' Error: ' + @errormessage + char(10) + char(10);
END CATCH
谁能解释这个 TRY/CATCH 块的缺点?这在 T-SQL 中不起作用吗?
我已经获得了一个特定的域帐户来处理来自我的系统管理员的备份。我有点困惑,因为过去从未向我提供单独的域帐户来处理备份。我仍然想使用代理来处理这个问题,所以我认为他们正在考虑以下内容:
如果您在代理帐户下运行作业,则代理必须是域帐户。将该帐户添加到 sysadmin 服务器角色并授予它对目录和网络共享的完全控制权。
所以我已经完成了我认为上面所描述的事情,我添加了域帐户作为登录名,我创建了一个凭据和代理,并将作业步骤创建为 CmdExec 以在代理下运行,但我仍然得到:
操作系统错误 5(拒绝访问。)。
直到我授予对运行 SQL Server 服务的服务帐户的访问权限,我才能备份到此网络共享。我也担心恢复,我想利用 Agent 来处理清理任务并将文件移动到不同的目录,因为它们变老了。
所以我不确定这里发生了什么,但我认为服务帐户至少需要写访问权限?一位系统管理员说他知道有人将备份过程作为“单独的服务”进行,我不太明白,除非它像 ApexSQL 备份之类的东西......
所以我确定我的 SQL Server 的不稳定行为是因为 .Net SqlClient 数据提供程序的默认设置为SET ARITHABORT OFF
. 话虽如此,我已经阅读了各种讨论实现这一点的最佳方式的文章。对我来说,我只想要一个简单的方法,因为 SQL Server 正在受苦,而且我的查询调整还没有完全超越应用程序(显然SET
在 sp 中添加不起作用)。
在 Erland Sommarskog 关于该主题的精彩文章中,他基本上建议采取安全的方法,通过更改应用程序来发出SET ARITHABORT ON
连接。但是,在来自 dba.stackexchange question的这个答案中,Solomon Rutzky 提供了实例范围和数据库范围的方法。
在此实例范围内设置我在这里遗漏了什么后果?正如我所看到的......因为SSMS默认设置了这个,我认为为所有连接设置这个服务器范围ON
没有什么害处。ON
归根结底,我只需要这个 SQL Server 的执行高于一切。
对于作为存储过程一部分的 UPDATE 语句,我在测试/产品之间看到 2 个非常不同的查询计划。显然表大小不同(大约 1000 万行差异)。基本上区别在于 Prod 我看到一组昂贵的排序,然后是索引更新(nc 索引)
而在测试中,我根本看不到这些运算符集!只有聚簇索引更新。我已经验证了 NC 索引存在等。我不知道发生了什么?!我已经验证了索引、sp、我已经尝试过 RECOMPILE、参数的不同值等。一定有我遗漏的东西,我什至检查了约束,一切都匹配。
有什么想法吗?我以前从没见过这个。难道 SQL 只是抓住了一个糟糕的执行计划!?
UPDATE 的结构如下:UPDATE [tablename] SET [column]=123 FROM ...
我猜仍然需要 .NET Framework 3.5 才能将数据库邮件与 SQL Server 2017 一起使用?因为我不得不在不久前在 Server 2016 上安装的 SQL Server 2016 中包含此内容。
我无法通过网络找到明确的答案,令人惊讶的是,也许它没有说出来。
这是一个愚蠢的问题,但是,我正在为一个客户端安装多个 SQL Server,但它们还没有为我创建的 SQL Server 域服务帐户。他们很快就会为我准备好一个...在安装期间定义服务帐户与事后通过配置管理器添加它们真的有什么不同吗?
可能更多的是个人喜好/节省时间的问题,但我想知道是否还有其他问题。我只是更喜欢在安装过程中完成尽可能多的工作,而不是事后返回并添加域帐户。
我最近将 SQL Server 从 2008 R2 升级到 2016,SQL Server 上的一个 SSIS 包(在 msdb 中)包含 ActiveX 脚本任务。所以我导出包并从 ActiveX 脚本任务中获取代码并在常规脚本任务中更新它,非常简单的包。我将 SSIS 包导入回 SQL Server(在 msdb 中)并认为一切都很好。如作业所示,它已成功执行并完成。后来我被告知没有发生任何应该完成的包。我什至在 Integration Services 中手动执行了该包,但仍然只运行了大约 0.15 秒(此作业应花费大约 5 秒)并显示它已成功完成。当从 VS 2015(带 SSDT)项目运行时,该包实际上做了它应该做的事情,但在 SQL Server 上什么也不做。有没有人经历过这个!?!我记得一些关于 32 位运行时与 64 位运行时的事情,但我想先在这里检查一下。任何解决方案?我什至也从头开始了一个新项目。
我们在 SQL 2014 实例上设置 FileTable 共享时遇到了困难,在放弃尝试以我们的实例名称命名它之后,我们将共享的名称保留为 mssqlserver,但它终于上线了,在线意味着如果你右键单击FileTable 表上的 SSMS 您可以“探索 FileTable 目录”,但它似乎在一段时间后再次随机离线,并且您会收到通常的预设错误消息:
因此,在服务器级别神奇地禁用/启用 FILESTREAM 之后,通过 t-sql/ssms/配置管理器在数据库级别它恢复了一些方法,但是我必须在所有这些位置弄乱设置才能恢复!似乎没有什么神奇的步骤可以让它回来。
有没有人经历过这个?重新启动服务/服务器会对此有所帮助吗?如果没有,修复sql server会有帮助吗?
我使用 SQL Server 已经有一段时间了,我了解使用 TempDB 可能遇到的各种问题。但是,对于这个最新的问题,如果我的问题得到了正确的解决,那么一个带有 BEGIN TRANSACTION 的语句是否有可能使用悬空的 tempdb 表/对象(无提交)可以保持 tempdb LOG 文件“打开”并且不允许 tempdb 清除自己的日志?这会导致 tempdb 日志文件最终填满并导致 SQL Server 出现问题。我很难相信 SQL Server 中没有某种保护措施可以以某种方式允许 tempdb LOG 不受影响 如果没有,我觉得这令人不安……
可以一次完成选择多个可用输入列并将它们映射到各自的目的地吗!?!?!而不是一次选择 1 个输入!我试过按住 control 和 Shift 键来选择多个并将它们拖过去,但只有你点击的那个复制过来。这对于具有多个列的表来说是一个巨大的浪费时间,无论出于何种原因,SSIS 都不会自动映射它们,即使列名匹配!我在 SSIS 2008 R2 顺便说一句。
下面的图片只是一个例子来说明我在说什么,它不是我个人的例子:(
来源:ggpht.com)
有人能告诉我这个选项的实际作用吗?如果我在已建立的生产环境中突然取消选中它会产生什么影响?
我在网上搜索了一段时间,并没有找到我满意的答案。我正在提供新光盘的 VM 上测试 SQL Server。
如果磁盘延迟减少,吞吐量不应该增加吗?磁盘延迟和吞吐量之间是否存在直接关联?似乎如果我有更快的磁盘,我应该会看到吞吐量增加。