这似乎是一个基本问题,但我找不到任何答案 - 我需要能够从链接服务器获取服务器名称/实例等。我尝试了几件事:
select <linked server>.@@SERVERNAME;
select <linked server>.SERVERPROPERTY('ServerName');
Run Code Online (Sandbox Code Playgroud)
......但没有快乐。有任何想法吗?
这是SQL 2008 R2
& 2014
(2008R2
是链接服务器)
编辑:错误是:
消息 102,级别 15,状态 1,第 2 行“@@SERVERNAME”附近的语法不正确。
在我的 SQL Server 2012 x64 Std 实例上,由于事务日志昨天被填满,我有一个大事务失败,它无法回滚,SQL Server 已重新启动特定的数据库以执行恢复。
DB 大约为 750GB,tlog 达到 170GB(正在运行非常大的 ETL 作业)。该作业仅运行了几个小时,但到目前为止恢复已经花费了 24 小时以上(完成了 70%,在第 3 阶段,共 3 阶段)。
我不明白为什么要花这么长时间?磁盘上似乎没有任何压力,sys.dm_exec_requests
显示它正在等待PAGEIOLATCH_EX/SH
,这是我所期望的。这次我可以恢复整个数据库......
如果任何人都可以提供任何线索,将不胜感激。
编辑:根据要求,获取错误日志的输出:
Recovery of database 'MyDB' (6) is 77% complete (approximately 28100 seconds remain). Phase 3 of 3. This is an informational message only. No user action is required.
Recovery of database 'MyDB' (6) is 77% complete (approximately 28095 seconds remain). Phase 3 of 3. This is an informational message only. No …
Run Code Online (Sandbox Code Playgroud) 我通过远程查询各种事物来监控 MySQL 数据库。我最近遇到了一个问题,其中一个表已损坏,但直到每日 mysqldump 失败我才知道它。有没有办法检查损坏(无需在每个表上运行 CHECK TABLE)?当我注意到 information_schema.tables 有一个 table_comment 列,当它损坏时,我想我已经想通了:
TABLE_COMMENT: Table './demo/test' is marked as crashed and should be repaired
Run Code Online (Sandbox Code Playgroud)
结果,当我尝试在该列上搜索时,即 WHERE TABLE_COMMENT LIKE '%marked as crashed%',没有返回任何内容!
我需要能够从存储过程中查询这个,有什么建议吗?
使用 SQL Server 2012 Standard - 我正在根据另一个表的内容对一个表进行删除。这花费了相当长的时间(5 小时)并且对我来说似乎不是最佳选择,希望能提供一些优化语句的输入:
delete from [dbo].[tbl1]
where exists (
select *
from [dbo].[tbl2] t
where [dbo].[tbl1].[col1] = t.[col1]
and [dbo].[tbl1].[col2] = t.[col2]
and [dbo].[tbl1].[col3] = t.[col3]
)
Run Code Online (Sandbox Code Playgroud)
各列如下:
tbl1.col1 varchar(10)
tbl1.col2 datetime
tbl1.col3 varchar(60)
tbl2.col1 varchar(10)
tbl2.col2 datetime
tbl2.col3 varchar(30)
Run Code Online (Sandbox Code Playgroud)
我意识到数据类型 col3
不同,我知道这很糟糕,但这是否意味着无法使用索引?
每个表上都有一个非唯一聚集索引(此查询未涵盖)和两个表上的非聚集索引,涵盖 where 子句中包含的所有三列。
tbl1
包含约 12 亿行,tbl2
包含约 3000 万行。我预计将从中删除大约 3000 万行tbl1
。
任何帮助表示赞赏!
编辑:仅供参考,tbl1
并且tbl2
位于不同的文件组上,但位于同一个磁盘 (SAN) 上。另外,这里是执行计划:
如果我有一些像这样的 T-SQL 代码:
While @done<1
Begin
WAITFOR DELAY '00:00:30';
Set @done=<some select statement>
End
Run Code Online (Sandbox Code Playgroud)
这可能会增加等待CXPACKET
吗?据推测,其他处理器将在WAITFOR
运行时等待?
好的,在我开始之前,我知道你不应该这样做......
我继承了一个 SQL Server 实例 (2008 R2 SP2 x64),它有一个带有非常大事务日志的数据库(完整模式,没有 tlog 备份),并且日志位于压缩文件夹中(不要问)。我需要解决这个问题,并认为我最好的方法是分离数据库(没有理由不检查点)并重新附加 mdf 忽略 ldf,以便在适当的文件夹结构中创建一个新的。然后我可以实施一个不错的备份策略。
我真的不想备份这个 tlog,因为它很大,而且在一个压缩文件夹中,所以谁知道它到底有多大。另一种选择是简单地截断 tlog,但这已被弃用......也许将 tlog 备份到 /dev/null (无论 Windows equiv 是什么)?
显然,我会在任何事情之前进行完整备份 - 无论如何,这些每天都会发生。
我想我要问的是,这里最安全的方法是什么?
编辑:实际上,我只是想 - 如果我每天进行完整备份,那么 tlog 不会在 BU 之后立即没用吗?
sql-server ×5
delete ×1
exec ×1
mysql ×1
mysqldump ×1
openrowset ×1
optimization ×1
parallelism ×1
recovery ×1
wait-types ×1