我需要从 sql server 2005 实例(本地服务器)在 150 多个 sql server 实例(sql server 2000,远程)上手动运行作业。所有这些实例的工作都是一样的。作业只是调用一个没有参数的存储过程,这在所有实例中也是一样的。这些工作按计划进行。但是现在他们希望我根据请求为所有实例或指定实例手动运行作业。
这方面的最佳做法是什么?我试过 openrowset 来调用远程存储过程。但是每次运行作业都需要几分钟,所以如果我使用循环来运行所有这些作业,它将一个接一个地运行,这是很长的时间。理想情况下,它应该能够在每个实例上运行存储过程,而无需等待它完成。更理想的是,它应该能够在每个实例上运行作业而无需等待它完成,因此它可以在每个实例的作业历史记录中留下记录。
并且存储过程来自第三方,因此无法更改。
更新:
由于“人们”要求从 SSRS 报告中对其进行初始化,因此使用 SSRS 在服务器上调用一些 T-SQL/proc 是最合适的。我现在遇到的问题是,在使用 OPENQUERY 或 OPENROWSET 从本地服务器调用远程 SQL Server 2000 实例上的 msdb.dbo.sp_start_job 时,我遇到了无法跟随错误。
处理对象“exec msdb.dbo.sp_start_job @job_name = 'xxx'”。链接服务器“xxx”的 OLE DB 提供程序“SQLNCLI”指示对象没有列或当前用户没有该对象的权限。
我想这可能是因为 sp_start_job 不返回任何内容,因为我可以使用 OPENQUERY/OPENROWSET 调用其他远程 proc 没有问题。那么有什么解决方法吗?
更新:
我发现它在 t-sql 中实际上非常简单。
EXEC [linkedServerName].msdb.dbo.sp_start_job @job_name = 'test2'
所以我不需要使用 OPENROWSET/OPENQUERY atually 因为所有远程 SQL Server 2000 实例都已添加为远程服务器。
有一个通宵工作运行很长时间。我已经使用探查器来获取跟踪并确定了一个占用大部分执行时间的语句(在存储过程中)。现在我需要查看语句的执行计划,这样我才能知道我能做什么。但是我无法重新运行查询,因为它使用了在 proc 中创建的临时表。并且proc的逻辑相当复杂并且很难重现(涉及从文件系统获取数据以及通过链接服务器与Oracle数据库交换数据)。我并不是说复制是不可能的,而是相当耗时。那么有没有办法可以查看 proc 或语句的执行计划?
我已在 SSMS 的 Azure sql 数据库中创建了一个用户。现在尝试向该用户授予对数据库中某些表的选择权限。安全控制选项似乎与本地 SQL Server 有很大不同。如何在 Azure 数据库上执行这些操作?
我已经在本地 SQL Server 上尝试过了,效果很好。但在 azure sql 数据库上运行这些时出现错误。
USE [master]
GO
CREATE LOGIN [jnj_user] WITH PASSWORD=N'P2ssw0rd123', DEFAULT_DATABASE=[CRM], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [CRM]
GO
CREATE USER [jnj_user] FOR LOGIN [jnj_user]
GO
Run Code Online (Sandbox Code Playgroud)
错误:
Msg 40517, Level 16, State 1, Line 3
Keyword or statement option 'default_database' is not supported in this version of SQL Server.
Msg 40508, Level 16, State 1, Line 5
USE statement is not supported to switch between databases. …
Run Code Online (Sandbox Code Playgroud)