查询系统版本控制的时态表FOR system_time ALL似乎省略了开始时间和结束时间相等的行。
例如:
/* Create a simple system-versioned table */
CREATE TABLE [dbo].[svt_test](
[string] [VARCHAR](30) NOT NULL,
[validFrom] [DATETIME2](7) GENERATED ALWAYS AS ROW START NOT NULL,
[validTo] [DATETIME2](7) GENERATED ALWAYS AS ROW END NOT NULL,
CONSTRAINT [PK_svt_test] PRIMARY KEY CLUSTERED
(
[string] ASC
),
PERIOD FOR SYSTEM_TIME ([validFrom], [validTo])
)
WITH
(
SYSTEM_VERSIONING = ON ( HISTORY_TABLE = [dbo].[svt_test_history] )
);
/*
Insert and immediately delete a row.
May have to try multiple times to get a …Run Code Online (Sandbox Code Playgroud) 我正在为备份到基于云的服务的人寻找问题。显然,客户的服务器在对基于云的服务的数据存储执行一些维护时崩溃,这使数据存储处于损坏状态。同时,客户的服务器因崩溃而无法恢复。
基于云的服务的开发人员必须编写一个脚本来查找属于数据库备份的数据块,并将它们拼接成一个文件。
这导致了一个备份 (.bak) 文件,我可以判断其中包含数据(我可以在其上运行“字符串”并查看标题,以及文件名、表名、数据行等),但不会' t 由 SQL Server 处理。我得到:
restore headeronly from disk = 'c:\restore.bak'
Msg 3241, Level 16, State 0, Line 1
The media family on device 'c:\restore.bak' is incorrectly formed. SQL Server cannot
process this media family.
Msg 3013, Level 16, State 1, Line 1
RESTORE HEADERONLY is terminating abnormally.
Run Code Online (Sandbox Code Playgroud)
死机上的源实例和我测试恢复的源实例都是 SQL Server 2008 R2,因此不幸的是,版本不匹配不是错误的根源。
我在十六进制编辑器 (xvi32) 中与另一个数据库的有效备份文件进行了比较,并注意到有效的备份文件以字节 0 处的字符串“tape”开头,但损坏的文件还有一些其他数据,对于 158 字节没有明显意义在那之前。我从损坏的备份中删除了 158 个字节,直到字符串“tape”,这让我走得更远。现在 'RESTORE FILELISTONLY' 起作用了,而在它之前抛出了与上面相同的错误。
“RESTORE HEADERONLY”现在显示“不完整”而不是抛出错误 3013。如果我在进程监视器中跟踪它,我可以看到它尝试在偏移量 7168 处读取 512 个字节,然后尝试在偏移量结束后读取另外 512 个字节文件。该文件几乎肯定是不完整的;根据基于云的服务中的报告工具,它最初是 95.8 …
我正在处理一个项目,我需要查找与记录发出 HTTP 请求的 IP 地址关联的主机名。查找目前作为日常 ETL 工作的一部分发生。当前的方法是使用标量 CLR 函数(与此类似的代码发布在网络上的许多地方,下面发布了我的修订;我不确定原作者是谁):
using System.Data.SqlTypes;
using System.Net;
using System.Security;
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Server;
public partial class udfn_GetHostName
{
[Microsoft.SqlServer.Server.SqlFunction]
public static string udfn_GetHostname(string IPAddr)
{
try
{
/*
Using deprecated method intentionally.
GetHostEntry() is now recommended.
But it does some irritating things like returning an error if a PTR
record points to a name that doesn't have an A record.
*/
IPHostEntry IpEntry = Dns.GetHostByAddress(IPAddr);
// Test whether the record returned has at least …Run Code Online (Sandbox Code Playgroud) 我从客户那里得到的一个常见请求是帮助找出哪些查询或客户对 SQL Server 使以太网链路饱和的贡献最大。
理想情况下,我会查看一些计数器或 DMV,显示按查询、客户端、应用程序、数据库等聚合的网络 I/O。
由于似乎没有直接的方法来做到这一点,作为替代,我通常会查看 sys.dm_exec_query_stats 中的 *_rows 列(我认为这些列仅存在于 2008 R2+ 中),并查找似乎涉及 BLOB。
有没有更好的方法来解决这个问题?
fn_dblog()以这种格式显示交易 ID:
0000:00049d43
Run Code Online (Sandbox Code Playgroud)
并sys.dm_tran_database_transactions以这种格式显示交易 ID:
9811233
Run Code Online (Sandbox Code Playgroud)
我相信上面的例子显示了不同格式的相同交易ID。
有没有办法在两种格式之间进行转换?fn_dblog()或者这实际上是两个不同的实体——在这种情况下,是否有办法与交易相关的DMV进行匹配?