我们使用一家大公司作为我们的服务提供商。
那家服务公司的技术人员正在非常努力地安装一种叫做 的东西Avamar SQL Agent,据称它将用于替换我旧的可靠的完整、差异和事务日志备份。有人告诉我,它会不断监视 mdf、ndf 和 ldf 文件的任何更改,然后将更改的项目(页面、???)写入某处 (???)。
一旦新技术得到证实,我就完全支持新技术,但我对这种方法持怀疑态度,即我将不再需要采用 SQL Server 本地压缩备份(同样是完整、差异和 tlog)。
到目前为止,我已经采取的立场是,除非并且直到他们能够通过测试向我证明它不会弄乱我的 mdf、ndf 和 ldf 文件并且仍然可以恢复,否则我不会祝福这次冒险。在这里,我不知道什么或谁会做恢复本身……它是 SQL Server 恢复的某种派生,一些 Avamar 恢复,某种组合等。
有没有人对这个产品有任何经验?
下面的选择返回我所有用户拥有的所有项目的数组。
WITH user_projects AS
(SELECT
u.id as user_id
,COALESCE(array_agg(DISTINCT pa.project_id), '{0}'::integer[]) as project_ids
FROM users u
LEFT JOIN project_assignments pa on pa.user_creator_id = u.id
GROUP BY u.id
)
user: 1, project_ids: {1, 2}
user: 2, project_ids: {3, 4}
Run Code Online (Sandbox Code Playgroud)
使用该选择,我想进行报告,该报告将为每个用户显示 12 个月的摘要。
SELECT
to_char(pk.created_at,'Mon') as mon
,extract(year from pk.created_at) as yyyy
,up.user_id
,COALESCE(count(distinct pk.keyword_id), 0) as total_keywords
FROM user_projects up
LEFT JOIN project_keywords pk on pk.project_id = ANY(up.project_ids::int[])
GROUP BY up.user_id, up.project_ids, 1, 2
Run Code Online (Sandbox Code Playgroud)
输出:
mon: sept, yyyy: 2014, user_id: 1, …Run Code Online (Sandbox Code Playgroud) 我在服务器上有很多 SQL Server 作业。每当完成任何作业执行时,我都需要执行 SP。一种困难的方法是在每个调用该 SP 的作业上创建一个步骤。
有没有简单的方法可以做到这一点?作业完成后,SQL Server 是否执行任何 SP 或任何内容?
我们正在尝试在 Windows 2012 R2 操作系统上从 SQL Server 2012 迁移到 SQL Server 2014。
升级后,我们正在进行性能测试,并观察到仅从一个表(根本没有连接)运行简单查询的巨大差异。
该查询在 SQL Server 2012 中执行时间为 4 秒,但在 SQL Server 2014 中执行时间超过 1 分钟。
SQL Server 安装在 2 个不同的 VM(不同的 IP 地址)上。他们在每台机器上只有一个 SQL Server 实例。
两台机器之间的处理器/内存/硬盘空间相同。
这些机器安装了相同的应用程序。我们直接从 SQL Server Management Studio 运行相同的选择查询。
performance sql-server upgrade sql-server-2012 sql-server-2014
在安装了 SQL Server LocalDB 2014 的机器上,我正在寻找 SQLCMD.EXE 文件,但在任何地方都找不到它。有没有办法单独安装?
不幸的是,我不是机器的本地管理员,所以我不喜欢 MSI ...
找到此链接https://www.microsoft.com/en-us/download/confirmation.aspx?id=36433,但不能使用 MSI ... 也许复制可执行文件和 dll 可以解决问题。
C:\Program Files\Microsoft SQL Server\110\Tools\Binn 从安装了 SSMS 的另一台计算机复制文件 SQLCMD.EXE、BATCHPARSER.DLL 和 SQLCMD.RLL 后,我仍然收到错误:
Microsoft SQL Server Native Client 11.0:未找到数据源名称且未指定默认驱动程序。
运行sqlcmd -S np:\\.\pipe\LOCALDB#F8040C8F\tsql\query。
在安装较新版本后安装以前版本的 SQL Server 实例时,是否有任何需要注意的问题?例如,将 2008 安装到具有现有 2012 实例的服务器上?
我找不到特定于这种情况的陈述,但这似乎有风险。
我想将一张表合并到另一张表中。我需要在我的 WHEN MATCHED 子句中应用条件逻辑,理想情况下这样做:
MERGE INTO ATable AS a
USING BTable AS b
ON a.ID = b.ID
WHEN NOT MATCHED THEN
-- Do insert
WHEN MATCHED AND b.NeedsAdjustment = 1 THEN
UPDATE SET
Col1 = b.Col1 + b.Adjustment
,Col2 = b.Col2 + b.Adjustment
,Col3 = b.Col3 + b.Adjustment
WHEN MATCHED THEN -- Default case (b.NeedsAdjustment <> 1)
UPDATE SET
Col1 = b.Col1
,Col2 = b.Col2
,Col3 = b.Col3
Run Code Online (Sandbox Code Playgroud)
这不是有效的 SQL。根据 MSDN 文档:
如果有两个 WHEN MATCHED 子句,则一个必须指定 UPDATE 操作,一个必须指定 DELETE 操作。 …
有没有人有一个很好的方法来手动为索引创建特定的碎片,理想情况下不增加基础表中的行数?我需要这个来进行索引重建基准测试。为了测量相同表/索引的特定碎片率所需的时间,我必须重新创建我想尝试的特定碎片级别。
通过或多或少的随机表更新来创建这种碎片是非常耗时且困难的。有任何想法吗?
更新:这是我的测试表。它实际上有大约 540K 行,
USE [Test]
GO
/****** Object: Table [dbo].[tFrag2] Script Date: 12/22/2015 15:33:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tFrag2](
[a] [int] NULL,
[b] [varchar](1000) COLLATE Latin1_General_CI_AS NULL,
[c] [varchar](1000) COLLATE Latin1_General_CI_AS NULL,
[d] [decimal](18, 0) NULL,
[e] [int] NULL,
[uid] [uniqueidentifier] NOT NULL,
[dt1] [datetime] NULL,
[dt2] [datetime] NULL,
[dt3] [datetime] NULL,
[dt4] [datetime] NULL,
[dt5] [datetime] NULL,
[dt6] [datetime] NULL,
[dt7] [datetime] NULL,
[dt8] [datetime] NULL, …Run Code Online (Sandbox Code Playgroud) 查询 sys.partitions 可以返回表的近似行数。
我注意到,无论实际内容如何(即使是空分区),这都会为所有分区返回相同的行数。
该表具有聚集列存储索引,并且几乎所有列上都创建了统计信息。每次数据加载后,每天都会更新统计信息。该表按日期分区。
sys.partitions 查询:
SELECT convert(date, convert(varchar,rv.[value])) as partitionDate, p.rows as syspartitions_RowCount
FROM sys.tables t
join sys.schemas sc on sc.schema_id = t.schema_id
JOIN sys.partitions p ON p.[object_id] = t.[object_id]
JOIN sys.indexes i ON i.[object_id] = p.[object_id]
AND i.[index_id] = p.[index_id]
JOIN sys.data_spaces ds ON ds.[data_space_id] = i.[data_space_id]
LEFT JOIN sys.partition_schemes ps ON ps.[data_space_id] = ds.[data_space_id]
LEFT JOIN sys.partition_functions pf ON pf.[function_id] = ps.[function_id]
LEFT JOIN sys.partition_range_values rv ON rv.[function_id] = pf.[function_id]
AND rv.[boundary_id]+1 = p.[partition_number]
WHERE p.[index_id] …Run Code Online (Sandbox Code Playgroud) 考虑以下设计:
CREATE TABLE dbo.Farmers
(
FarmerName varchar(10) NOT NULL
PRIMARY KEY
);
CREATE TABLE dbo.FarmEquipment
(
FarmEquipmentName varchar(10) NOT NULL
PRIMARY KEY
, CreatorFarmer varchar(10) NOT NULL
FOREIGN KEY REFERENCES dbo.Farmers(FarmerName)
ON UPDATE CASCADE
ON DELETE CASCADE
);
CREATE TABLE dbo.Fields
(
FieldName varchar(10) NOT NULL
, OwnerFarmer varchar(10) NOT NULL
FOREIGN KEY REFERENCES dbo.Farmers(FarmerName)
ON UPDATE CASCADE
ON DELETE CASCADE
, FarmEquipment varchar(10) NOT NULL
FOREIGN KEY REFERENCES dbo.FarmEquipment(FarmEquipmentName)
ON UPDATE CASCADE
ON DELETE CASCADE
);
Run Code Online (Sandbox Code Playgroud)
用例:
sql-server ×9
backup ×1
index ×1
installation ×1
instance ×1
join ×1
merge ×1
partitioning ×1
performance ×1
postgresql ×1
sqlcmd ×1
update ×1
upgrade ×1