我最近在没有太多警告或经验的情况下继承了我们公司的所有 SQL 数据库,并希望通过全面审查备份来给人留下好印象并获得一些快速胜利。
我已经实现了各种完整和 t-log 备份,但在这个盒子上遇到了另一个工作,它在运行之前将数据库设置为简单恢复模式,然后在运行之后恢复到完整模式,不幸的是,这是非常必要的。
我的问题是,如果在凌晨 1 点进行完整备份,并且在此后每小时的顶部进行 t-log 备份,那么在凌晨 5:30 设置简单恢复模式的其他工作是否会破坏“时间线”,例如早上 6 点的完整备份和下一个 t-log 备份?
这是用于这台特定机器的 SQL Enterprise 2012。
欣赏你们的任何见解
我刚刚阅读了位于此处的 SQL 2016 列存储索引指南。我们将在 SQL 2016 数据库中有一些相当大的表(数亿到数十亿行),用于 OLTP 和分析。
这些表将主要通过以下两种方式之一进行查询: 1) 用户将根据 Where 子句中的特定离散值检索相当小的结果集(例如,Where SubId = 'ABC');2) 用户将根据日期/时间值范围检索更大的结果集(例如,其中 ReadTime 介于 '2/1/2017' 和 '2/5/2017' 之间)。
由于列存储索引更适合场景 #2(我认为),我正在考虑为场景 #1 制作非列存储(例如,在 SubId 上)并创建非聚集列存储索引(例如,在 ReadTime 上) ) 用于场景 #2。
但是,我不确定这是否真的比在 ReadTime 上创建列存储聚集索引和在 SubId 上创建非列存储索引更好。
我不确定如何做出这个决定。
当我使用设计视图创建或编辑查询时,SSMS 会无缘无故地为某些表创建别名 (TableName_1) 。更烦人的是,如果我在设计视图中打开现有查询,它也会这样做。换句话说,它改变了我的 SQL 代码!即使是简单的查询也有这个问题,例如:
SELECT
dbo.tblCalendar.id,
dbo.tblCalendar.title,
dbo.luCalendarType.typeName
FROM
dbo.luCalendarType RIGHT OUTER JOIN
dbo.tblCalendar ON dbo.luCalendarType.id = dbo.tblCalendar.type
Run Code Online (Sandbox Code Playgroud)
将成为:
SELECT
dbo.tblCalendar.id,
dbo.tblCalendar.title,
luCalendarType_1.typeName
FROM
dbo.luCalendarType AS luCalendarType_1 RIGHT OUTER JOIN
dbo.tblCalendar ON luCalendarType_1.id = dbo.tblCalendar.typeRun Code Online (Sandbox Code Playgroud)
有什么办法可以阻止 SSMS 改变我的 SQL 代码?
在 SQL Server 中,我可以创建一个视图,该视图是使用链接服务器位于完全不同服务器中的两个表之间的连接。如果我将其中一台服务器从 SQL Server 更改为 Oracle,我还能这样做吗?
我需要连接表在 Oracle 中
oracle sql-server sql-server-2008-r2 linked-server oracle-12c
我有一个表(postgres 9.6),它按日期划分为大约 70 个子表。
EXPLAIN下面的输出被截断,因为它的大部分是每个子表的相同位图索引/堆扫描(这里是完整的详细输出)。我感兴趣的部分是树顶部附近的Append和Result节点。
Append只是所有子查询的总和。事实上,它需要比这长约 3.5 秒。多余的从哪里来?Resultwhich states当您的查询选择某个常量值时,将使用此操作。此节点大约需要 7 秒,但查询未选择常量值。如果可能的话,我很想节省这 10 秒,但我实际上并不知道这些节点在做什么,所以我不知道该尝试什么。
EXPLAIN ANALYZE 输出:
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? QUERY PLAN ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? HashAggregate (cost=4459946.40..4473566.96 rows=1089645 width=64) (actual time=26289.308..26419.989 rows=190112 loops=1) ?
? Group Key: frontend_prescription.processing_date, frontend_prescription.pct_id, substr((frontend_prescription.presentation_code)::text, 1, 9) ?
? Buffers: shared hit=172527 ?
? -> Result (cost=0.00..4296499.68 rows=10896448 width=60) …Run Code Online (Sandbox Code Playgroud) 我正在从以下包含 52 亿条记录的聚集列存储索引中执行 SELECT。当我查看 STATISTICS IO 的输出时,我看到的是 LOB 逻辑读取。
我的问题是当表中的数据类型都不是 LOB 值时,为什么查询执行 LOB 逻辑读取?
我在 SQL Server 2014 SP3 企业版环境中工作。
表定义:
CREATE TABLE [dbo].[ColumnstoreTableA](
[RollupID] [bigint] IDENTITY(1,1) NOT NULL,
[DT_DIMID] [int] NOT NULL,
[TC_DIMID] [int] NOT NULL,
[C_DIMID] [int] NOT NULL,
[CD_DIMID] [int] NOT NULL,
[AC_DIMID] [int] NOT NULL,
[UA_DIMID] [int] NOT NULL,
[UL_DIMID] [int] NOT NULL,
[JP_DIMID] [int] NOT NULL,
[RTT_DIMID] [int] NOT NULL,
[RA] [int] NOT NULL,
[Impressions] [int] NOT NULL,
[Clicks] [int] NOT NULL,
[Conversions] [int] NOT …Run Code Online (Sandbox Code Playgroud) 我在表中添加了一个计算字段,并且只想更新NULL行(或“新”行)。出了点问题,DateTime当插入 1 行时,我的表中的每一行都用当前更新。这是Create Table语法,我必须做什么才能仅使用当前更新“新”行DateTime
CREATE TABLE [dbo].[SE](
[dbID] [int] IDENTITY(1,1) NOT NULL,
[uqID] [varchar](31) NOT NULL,
[POD] [varchar](255) NULL,
[EC] [varchar](255) NULL,
[S1] [varchar](35) NULL,
[S2] [varchar](35) NULL,
[S3] [varchar](35) NULL,
[S4] [varchar](35) NULL,
[S5] [varchar](35) NULL,
[S6] [varchar](35) NULL,
[S7] [varchar](35) NULL,
[PSD] [varchar](50) NULL,
[DS] [datetime] NULL,
[CN] [varchar](max) NULL,
[autodate] AS (getdate()),
PRIMARY KEY CLUSTERED
(
[dbID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = …Run Code Online (Sandbox Code Playgroud) sql-server t-sql sql-server-2008-r2 default-value computed-column
我有一个 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 ×7
columnstore ×2
view ×2
backup ×1
explain ×1
oracle ×1
oracle-12c ×1
postgresql ×1
ssms ×1
t-sql ×1