我需要从 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 实例都已添加为远程服务器。
SQL Server 2005 SP4 32 位
我有一个每晚运行的 DBCC CHECKDB 作业。昨晚,在工作开始后不久,我收到了以下错误。数据库未处于可疑模式,当我现在运行它时 CHECKDB 恢复干净。数据库是完全可访问的。我应该担心吗?我不想在这一点上回到备份。
2013-04-02 02:10:55.53 spid56 Error: 1203, Severity: 20, State: 1.
2013-04-02 02:10:55.53 spid56 Process ID 56 attempted to unlock a resource it
does not own: PAGE: 34:1:388664. Retry the
transaction, because this error may be caused
by a timing condition. If the problem persists,
contact the database administrator.
2013-04-02 02:10:55.58 spid56 Error: 3314, Severity: 17, State: 3.
2013-04-02 02:10:55.58 spid56 During undoing of a logged operation in
database 'MY_DATABASE_NAME', …Run Code Online (Sandbox Code Playgroud) 参数化LIKE语句时,我在 SQL Server 2005 上遇到了针对堆表的意外表扫描......但是当与变量相同的值被硬编码时,会发生预期的索引查找。
这个问题只发生在这种特定的情况下......所以我对如何解决这个问题并不感到困惑,我对为什么会发生这种情况感到困惑。
以下 T-SQL 应在 SQL Server 2005 上重现该问题:
IF (OBJECT_ID('tempdb.dbo.#tblTest') IS NOT NULL)
DROP TABLE dbo.#tblTest
GO
CREATE TABLE dbo.#tblTest (
ID INT IDENTITY(1, 1),
SerialNumber VARCHAR(50)
)
GO
-- Populate the table with 10,000 rows
SET NOCOUNT ON
DECLARE @i INT
SET @i = 0
WHILE @i < 10000
BEGIN
INSERT INTO dbo.#tblTest VALUES(CAST(@i AS VARCHAR(10)))
SET @i = @i + 1
END
GO
-- To recreate the issue, the …Run Code Online (Sandbox Code Playgroud) 根据查询性能和多语句表值函数等文章,SQL Server 假设多行表值函数返回一行。如果它实际上返回许多行,这会导致为调用语句选择一个糟糕的执行计划。
添加SCHEMABINDING到函数是否会导致函数返回值集的基数估计更正确?
如果我们假设我们将一个UserId传递给这个函数并返回一个RecordId值的表,该表允许用户访问,并且一些用户只被允许查看一些记录,而一些用户被允许查看很多甚至所有记录,函数或调用语句(或包含它们的过程)是否会从使用中受益RECOMPILE?SCHEMABINDING函数中的使用会改变这个答案吗?
我意识到我可以通过实验来解决这个问题,但我希望有人已经找到了答案。指向有详细记录的地方的指针会有所帮助。
当我想查找特定值时,我使用以下脚本来搜索所有存储过程的文本。
SELECT ROUTINE_NAME, ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE @searchText
ORDER BY ROUTINE_NAME
Run Code Online (Sandbox Code Playgroud)
我最近发现ROUTINE_DEFINITION在 4000 个字符后停止,所以一些程序没有在应该返回的时候返回。
如何查询存储过程的全文以获取值?
sql-server-2005 sql-server stored-procedures information-schema
完成第 1 步后,作业当前转到第 2 步 - osql 命令以在另一台服务器上启动 Sql 代理作业。但是,在第 1 步完成时,我还想在与第 1 步 SQL 代理作业相同的服务器上启动并发 SQL 代理作业。现在,作业是级联的,但我真的希望“作业 2”和“作业 3”同时运行。关于如何使步骤不连续的任何想法?
我有一张桌子:OrderDetails。
5 年来,只发生了奇怪的死锁。如果它发生了,它发生在OrderDetails表上的索引上现在突然间,死锁无处不在 - 发生的时间很短。我们没有对应用程序或数据库进行任何更改 - 每周都会重建索引。
问题是OrderDetails现在桌子有时会被锁住,所有的地狱都崩溃了
有人可以帮忙看看他们是否从日志中发现任何东西:我怎样才能摆脱整个OrderDetails表上的 objectLock ?为什么表会锁定 - 过去只有索引会导致死锁。这是否意味着索引未能找到合适的记录,现在整个表都被锁定了?
这是一个Update和一个Select在这里死锁,并且被锁定的行不相关 - 它们没有相同的参考号或OrderID
spid18s,Unknown,waiter id=process91bb58 mode=X requestType=convert
spid18s,Unknown,waiter id=process9a9018 mode=S requestType=convert
spid18s,Unknown,waiter-list
spid18s,Unknown,owner id=process9a9018 mode=IS
spid18s,Unknown,owner id=process91bb58 mode=IX
spid18s,Unknown,owner-list
spid18s,Unknown,objectlock lockPartition=0 objid=1194487334 subresource=FULL dbid=5 objectname=CompZ.dbo.OrderDetails id=lock32163640 mode=IX associatedObjectId=1194487334
spid18s,Unknown,resource-list
spid18s,Unknown,Proc [Database Id = 5 Object Id = 711009614]
spid18s,Unknown,inputbuf
spid18s,Unknown,OrderNoRef = @OrderNoRef and ClientID = @ClientID and OrderNo <> @OrderNo
spid18s,Unknown,where
spid18s,Unknown,select Distinct OrderNoRef …Run Code Online (Sandbox Code Playgroud) 我的表有一个单列的数据:
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
我想要这样的输出:
1 2 3 4 5-first row
6 7 8 9 10 - second row
Run Code Online (Sandbox Code Playgroud)
另一个有两列这样的:
Column 1 Column 2
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i
10 j
Run Code Online (Sandbox Code Playgroud)
我希望它显示如下:
1 a 2 b 3 c 4 d 5 e-first row
6 f 7 g 8 h 9 i 10 j - second row
Run Code Online (Sandbox Code Playgroud) 我有一个使用完整恢复模型的 SQL Server 2005 数据库。如果我执行以下命令:
ALTER DATABASE test SET RECOVERY SIMPLE;
ALTER DATABASE test SET RECOVERY FULL;
Run Code Online (Sandbox Code Playgroud)
或者
BACKUP LOG test WITH truncate_only;
Run Code Online (Sandbox Code Playgroud)
然后尝试运行日志备份:
BACKUP LOG test TO DISK = 'backupfile.bak'
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
无法执行 BACKUP LOG,因为当前没有数据库备份。
问题:
如何在不运行备份日志命令的情况下检查我是否无法进行日志备份?
我想加快以下代码
delete from ssn_sdo
where
(art_id=@art_id and skl_id=@skl_id and @level=0 )
or (art_id=@art_id and skl_id=@skl_id and @level=1 and tip=@tip)
or (art_id=@art_id and skl_id=@skl_id and doc_id = @doc_id)
Run Code Online (Sandbox Code Playgroud)
我的服务器是 MS SQL-Server 2005。
art_id,skl_id和doc_id是整数,而tip是varchar(10)类型。
我想在ssn_sdo表上创建一个索引,所以这个删除会更快。
我正在考虑做的是制作三个索引,每个索引都适用于每种情况:
doc_id (ASC), art_id (ASC), skl_id (ASC)
skl_id (ASC), art_id (ASC), tip (ASC)
skl_id (ASC), art_id (ASC),
Run Code Online (Sandbox Code Playgroud)
或者有没有更好的方法来制作一个包含所有三种情况的索引。
我对索引很小心,因为我不想减慢此表中的插入速度。
performance sql-server-2005 database-design sql-server index-tuning
sql-server-2005 ×10
sql-server ×8
backup ×2
deadlock ×1
errors ×1
functions ×1
index-tuning ×1
maintenance ×1
performance ×1
t-sql ×1