标签: sql-server

如何在 Sql Server 中存储“n”天的 Web 服务器日志?

为了更快的报告和性能分析,我们希望将我们的 Web 服务器日志插入到 Sql Server 中。这将使我们能够近乎实时地查看流量模式、问题和减速情况。

我们有一个守护进程,它监听来自负载均衡器的请求/响应事件并批量插入数据库。

但是,我们每天会获得大约 1 GB 的日志,而且我们只需要保留大约一周的时间(至少以这种原始形式)。

存储这些数据的最佳方法是什么,删除旧条目的最佳方法是什么?

我们已经讨论过将每天的数据存储在它自己的表中,例如,Log_2011_04_07将拥有当天的所有条目,然后删除最旧的表。可以创建一个视图来跨越所有日表,以便于查询。可行吗?

sql-server-2008 sql-server logs web-server

18
推荐指数
2
解决办法
1297
查看次数

是否可以在 sql-server 中备份和恢复部分数据库?

我们有一个 sql-server 2005 数据库,我们定期将它从我们的客户站点转移到我们的站点。这需要很长时间,因为我们没有直接连接,必须通过基于 Web 的文件传输应用程序传输文件。数据库目前大约有 10GB,但我们不需要所有数据 - 大部分数据位于审计表和包含可以重新生成的计算值的表中。

我曾考虑创建一个文件组来保存审计表,并希望我可以备份和恢复主文件组。我可以正常备份,但在恢复时出现错误,提示我没有将其恢复到同一个数据库。是否可以使用文件组将数据库的一部分还原到不同的服务器?有一个更好的方法吗?

sql-server-2005 sql-server backup export

18
推荐指数
2
解决办法
1万
查看次数

类型字段的 INT 或 CHAR

表格或Type字段的最佳设计是什么?换句话说,鉴于此架构:intchar(1)

create table Car
(
    Name varchar(100) not null,
    Description varchar(100) not null,
    VehType .... not null
)
Run Code Online (Sandbox Code Playgroud)

VehType成为 anint或 a是否更有效(在性能方面)char(1)?假设你有五种类型的汽车,你应该使用递增值 0 -> 4,还是类型的字符(比如;'v'、's'、'c'、't'、'm')?

如果不止于此,我将使用单独的 Type 表并具有外键关系,但我认为没有必要这样做。

我注意到sys.objects目录视图为type字段使用了一个字符。有什么原因吗?我是否只是在稀薄的空气中抓住了它,这是我更舒服的吗?

database-design sql-server datatypes

18
推荐指数
1
解决办法
6041
查看次数

SQL Server 2005/2008 UTF-8 排序规则/字符集

我在 SQL Server 2005/2008 中找不到直接设置UTF-8相关的选项Collations/Charsets,与可以在其他 SQL 引擎中设置的选项相同,但在 SQL Server 2005/2008 中只有拉丁语和 SQL 排序规则。

是否有一些选项可以在 Win2008 操作系统上的 SQL Server 引擎(两个版本)2005/2008 中强制/安装这些排序规则/字符集

sql-server-2005 sql-server-2008 sql-server collation encoding

18
推荐指数
1
解决办法
8万
查看次数

是否可以为数据库创建别名或同义词?

是否可以创建数据库别名或同义词?我希望能够做的是将 NewDatabaseName 别名为 OldDatabaseName 以防止不得不重写大量代码。

背景故事:一位客户向我提出了一个荒谬的自我引发的问题。他们有一个带有 SQL 服务器后端的第三方应用程序。用户一直在使用 Visual Basic 编写针对该数据库的自定义报告,所有数据库连接信息都硬编码在他们的程序中。

最近第三方软件重命名了他们的数据库。现在所有的报告 EXE 都失败了。

哦,他们也没有很多源代码。

我忍住笑声,说我会看看我能做些什么。

sql-server-2008 sql-server

18
推荐指数
1
解决办法
1万
查看次数

检索日期范围的最有效方法

使用这样的表结构检索日期范围的最有效方法是什么?

create table SomeDateTable
(
    id int identity(1, 1) not null,
    StartDate datetime not null,
    EndDate datetime not null
)
go
Run Code Online (Sandbox Code Playgroud)

假设你想要既范围StartDate和EndDate。因此,换句话说,如果StartDate介于@StartDateBeginand之间@StartDateEnd,并且EndDate介于@EndDateBeginand之间@EndDateEnd,则执行某些操作。

我知道有几种方法可以解决这个问题,但最建议的是什么?

performance sql-server query-performance

18
推荐指数
2
解决办法
3万
查看次数

10 TB 数据库备份/恢复问题

我们有一个非常大的生产数据库,有 10 TB。我们正在考虑将其迁移到云服务,但我必须了解风险并估计整个过程的持续时间。我使用 Native SQL Server 2014 SP2 备份解决方案每月备份一次数据库。持续时间几乎是 720 分钟 - 12 小时。压缩比为 5,这意味着备份大小几乎为 2 TB。我们负担不起差异备份,因为累积的差异备份需要与完整备份一样多的时间和空间,因此我们进行 T-log 备份(每个 ~200 Mb)而不是每 10 分钟 ~ 每天 144 个文件。最大的问题是拥有所有这些统计数据,有没有人知道恢复包含 10 TB 数据的 2 TB 备份需要多长时间?它会比完整备份持续时间长得多吗?

sql-server backup restore

17
推荐指数
2
解决办法
5770
查看次数

强制实施 IsDeleted(软删除)时,合适的索引架构是什么?

目前,我们有一个功能齐全的现有数据库和应用程序。我目前没有能力更改架构。今天,数据库中的每个表都有一个“IsDeleted”NOT NULL BIT 字段,默认值为“0”。当应用程序“删除”数据时,它只是将 IsDeleted 标志更新为 1。

我无法理解的是每个表上的索引应该如何构建。现在,每个查询/加入/等总是实现 IsDeleted 检查。这是我们的开发人员必须遵循的标准。话虽如此,我正在尝试确定是否需要更改每个表上的所有聚集主键索引以包含主键和 IsDeleted BIT 字段。此外,由于每个查询/加入/等。必须实施 IsDeleted 检查,是否适当假设每个索引(非聚集索引)都应包含 IsDeleted 字段作为索引的第一个字段?

我的另一个问题是关于过滤索引。我知道我可以在索引上放置过滤器,例如“WHERE IsDeleted = 0”以减少索引的大小。但是,由于每个连接/查询都必须实现 IsDeleted 检查,这是否会阻止使用过滤索引(因为在连接/查询中使用了 IsDeleted 列)?

请记住,我无法更改 IsDeleted 方法。

index sql-server sql-server-2012

17
推荐指数
2
解决办法
1407
查看次数

同事说永远不要在 SQL 中使用 OR 语句,这是真的吗?

我现在负责 SQL 开发的同事说我永远不应该使用OR语句,因为它会弄乱查询优化器并忽略产生慢查询的表索引。我在谷歌搜索时找不到任何这样的例子。以下查询的替代方案变得非常难看,其中有十几个代码块看起来几乎相同(对于示例)使用 if else 语句为每个变量状态。请注意检查为短路的变量,如果值为 2,则返回所有结果,否则按字段过滤。

我询问了一些包含这些关于为什么不使用OR语句的声明的资源,并收到了以下链接(我们使用的是 MS SQL Server)。

这些示例似乎都不像当前的实现,如下所示。我发现很难相信这段代码有问题,但如果有问题,请告诉我。我还想了解更多信息,其中关于不使用的评论OR实际上可能适用以及为什么如此,以便更好地理解该问题。

SELECT
    e.EmployeeName,
    e.DepartmentName,
    crs.Title,
    c.Name as CompanyName
FROM Employee E
Left Outer Join Company c ON c.Id = @companyId
    INNER JOIN Department d on e.DepartmentId = d.Id 
WHERE   
    c.Id = @companyId           
    AND (@Active = 2 OR  crs.IsActive = @Active)
    AND (@Dot = 2 OR IsDot = @Dot)
    AND crs.CompanyId = @companyId
    AND d.CompanyId = @companyId
ORDER BY EmployeeName, Title, …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization query-performance

17
推荐指数
2
解决办法
2648
查看次数

勒索软件能否将自身嵌入到 SQL 备份文件中?

防范勒索软件的最佳保护措施之一是将所有数据库文件备份到完全独立的系统。我们已经做到了。

但一种想法是数据库的备份现在可能包含勒索软件。这可能吗?这是 2016 SQL Server 本机创建的 .bak。或者勒索软件不可能将自身嵌入到备份文件中?

security sql-server sql-server-2016

17
推荐指数
4
解决办法
4388
查看次数