标签: sql-server

SQL Server 2012 与 2008 备份的向后兼容性

我有许多使用 SQL Server 2008 的客户端,这也是我服务器上的客户端。我使用备份文件在客户和我的办公室之间来回发送数据库。

我读到当您从 SQL Server 2012 创建备份时,无法将其还原到 2008 实例。我认为兼容性级别会解决这个问题,但事实并非如此。因此,我不知道如何升级。除了一次升级所有客户端(这是不可能的)之外,我想不出干净的方法来做到这一点。

我需要将数据库发送到客户端以及从客户端接收数据库。这是我在 SQL Server 上的第一次版本升级,所以我是这个问题的新手。关于如何进行的任何想法?

sql-server

15
推荐指数
2
解决办法
5万
查看次数

为范围内的每个日期返回一列

假设我有表 A:BookingsPerPerson

Person_Id    ArrivalDate    DepartureDate
123456       2012-01-01     2012-01-04
213415       2012-01-02     2012-01-07
Run Code Online (Sandbox Code Playgroud)

我需要通过视图实现以下目标:

Person_Id    ArrivalDate    DepartureDate    Jan-01    Jan-02    Jan-03    Jan-04    Jan-05    Jan-06    Jan-07
123456       2012-01-01     2012-01-04       1         1         1         1
213415       2012-01-02     2012-01-07                 1         1         1         1         1         1
Run Code Online (Sandbox Code Playgroud)

该系统用于活动,因此每次酒店预订可能需要 1 到 15 天的时间,但不会超过此时间。任何想法将不胜感激。

sql-server-2008 sql-server pivot

15
推荐指数
2
解决办法
8万
查看次数

供应商希望每 5 分钟为业务应用程序运行一次 MSDB 作业

我们有一个 3rd 方供应商试图集成 2 个不同的应用程序,其中两个数据库都驻留在我们的 SQL Server 实例上与 150 多个其他数据库,并且他们想要创建一个 MSDB 作业以每 5 分钟“同步”2 个不同的应用程序(起初他们想每分钟运行一次)。

我最初的预感是,他们应该在应用程序层中以某种方式使用 Windows 计划作业,或者甚至是一个可怕的触发器(我们通常在这种情况下使用)来执行此操作。

我更喜欢为 DBA 任务保留尽可能多的 MSDB 作业以减少那里的混乱,并且在查看具有这样的超级活跃作业的作业历史记录时也会遇到 MSDB 的缓慢查询(这也会淹没和丢弃重要的作业历史记录)更重要的事情,如备份历史)。但话又说回来,也许我的偏好是错误的,我需要为 MSDB 中的应用程序层腾出一些空间,卷起袖子,解决工作历史需要永远加载的问题,当我需要保留更多历史条目来捕获重要的东西,如备份(或清除超活跃作业条目)。

我遇到的另一个问题是,现在我需要在供应商通过 GUI 执行升级时为其数据库授予“系统管理员”权限,而不仅仅是“dbo”权限,并希望他们不会炸毁我的关键任务实例DB 是(整合的缺点之一)。

我想我可以把它们放在另一个“分离”的情况下,我们把所有的不玩好供应商,但这时我们就需要重新配置应用程序以指向新的SQL实例(叹可惜在这种情况下,不平凡的)。

供应商已经反驳了我关于触发器有多糟糕的担忧。因此,我对此进行了“谷歌搜索”,但结果是空的。有没有人在那里看到任何“权威性的”链接,认为这是一个坏主意,我可以向他们推荐吗?还是我应该接受他们的方法?

我不相信我在寻求帮助之前曾在 sql 论坛上发过帖子,所以希望我的查询得到了正确的框架。

编辑:我们正在运行 SQL Server 2008 Enterprise R2 x64 SP1(感谢您指出我忘记提及版本!)。嗯,希望他们在我们升级到更新版本时不需要更改他们的 MSDB 升级脚本。

谢谢你的时间!富有的

sql-server sql-server-2008-r2

15
推荐指数
1
解决办法
1442
查看次数

SQL Server 在相等比较中自动修剪 varchar 值但不喜欢比较

我今天在 SQL Server 上遇到了一些有趣的行为(在 2005 年和 2012 年观察到),我希望有人能解释一下。

使用=NVARCHAR 字段进行比较的查询会忽略字符串中的尾随空格(或在比较之前自动修剪值),但使用like运算符的同一查询不会忽略该空格。2012 年使用的排序规则是 Latin1_General_CI_AS。

考虑这个 SQL 小提琴:http ://sqlfiddle.com/#! 6/72262/4

请注意,like运算符不会返回尾随空格字符串的结果,但=运算符会返回。为什么是这样?

加分项:我无法在 VARCHAR 字段上复制它,我原以为在两种数据类型中都会以相同的方式处理空间 - 这是真的吗?

sql-server sql-server-2012

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

如何通过数据库获取特定实例的 CPU 使用率?

我发现以下查询可以按数据库检测 CPU 使用率,但它们显示不同的结果:

WITH DB_CPU_Stats
AS
(
    SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], 
      SUM(total_worker_time) AS [CPU_Time_Ms]
    FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY (
                    SELECT CONVERT(int, value) AS [DatabaseID] 
                  FROM sys.dm_exec_plan_attributes(qs.plan_handle)
                  WHERE attribute = N'dbid') AS F_DB
    GROUP BY DatabaseID
)
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num],
       DatabaseName,
        [CPU_Time_Ms], 
       CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms]) OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent]
FROM DB_CPU_Stats
--WHERE DatabaseID > 4 -- system databases
--AND DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2012

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

多个缺失索引的执行计划

如果您使用“包括实际执行计划”运行查询,该计划还将建议缺少的索引。索引详细信息MissingIndexes位于 XML 中的标记内。是否存在计划包含多个索引建议的情况?我尝试了不同的 sql 查询,但无法提出任何生成两个或多个缺失索引的查询。

index sql-server execution-plan

15
推荐指数
1
解决办法
4930
查看次数

为什么我的 EXISTS 查询执行索引扫描而不是索引查找?

我正在优化一些查询。

对于下面的查询,

SET STATISTICS IO ON;
DECLARE @OrderStartDate DATETIME2 = '27 feb 2016';
DECLARE @OrderEndDate  DATETIME2 = '28 feb 2016';

SELECT  o.strBxOrderNo
        , o.sintOrderStatusID
        , o.sintOrderChannelID
        , o.sintOrderTypeID
        , o.sdtmOrdCreated
        , o.sintMarketID
        , o.strOrderKey
        , o.strOfferCode
        , o.strCurrencyCode
        , o.decBCShipFullPrice
        , o.decBCShipFinal
        , o.decBCShipTax
        , o.decBCTotalAmount
        , o.decWrittenTotalAmount
        , o.decBCWrittenTotalAmount
        , o.decBCShipOfferDisc
        , o.decBCShipOverride
        , o.decTotalAmount
        , o.decShipTax
        , o.decShipFinal
        , o.decShipOverride
        , o.decShipOfferDisc
        , o.decShipFullPrice
        , o.lngAccountParticipantID
        , CONVERT(DATE, o.sdtmOrdCreated, 120) as OrderCreatedDateConverted
FROM    tablebackups.dbo.tblBOrder o
WHERE   o.sdtmOrdCreated >= …
Run Code Online (Sandbox Code Playgroud)

performance sql-server optimization index-tuning sql-server-2014 query-performance

15
推荐指数
3
解决办法
2488
查看次数

DBCC FREEPROCCACHE 和 DBCC FREESYSTEMCACHE('SQL Plans') 都不做任何事情来释放 CACHESTORE_SQLCP 内存

CACHESTORE_SQLCP Sql 计划在几天后占用 > 38 GB。

我们已经在运行“优化临时工作负载”选项。(实体框架和自定义报告创建了很多临时!)

具有多可用区镜像的 AWS RDS 上的 SQL Server 2016 SE 3.00.2164.0.v1

当我运行时:

DBCC FREESYSTEMCACHE('SQL Plans');
Run Code Online (Sandbox Code Playgroud)

或者

DBCC FREEPROCCACHE
Run Code Online (Sandbox Code Playgroud)

或者

DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL
Run Code Online (Sandbox Code Playgroud)

或者

DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;
Run Code Online (Sandbox Code Playgroud)

它似乎没有清除它:

SELECT TOP 1 type, name, pages_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb  desc

type                name        pages_kb
CACHESTORE_SQLCP    SQL Plans   38321048
Run Code Online (Sandbox Code Playgroud)

我在启用查询存储的情况下运行,但我禁用了它以查看是否有任何干扰,它似乎没有帮助,但我将其关闭。

真正奇怪的是

SELECT COUNT(*) FROM sys.dm_exec_cached_plans
Run Code Online (Sandbox Code Playgroud)

是 1-3 左右(它似乎只显示显示当前正在运行的查询),即使所有内存都已保留,甚至在我尝试清除任何内容之前。我错过了什么?

CACHESTORE_SQLCP 占用了所有可用内存的 60% 以上,这是一个问题,因为偶尔会发生内存等待。此外,我们不得不在周末终止一个持续 4 小时的例行 DBCC CHECKDB,因为内存不足导致等待(它立即完成,没有错误,打开 PHYSICAL_ONLY)。

有没有办法回收这些内存(除了每晚重启!?)?

内存消耗图 内存消耗图表

从评论/答案更新

当我跑

SELECT * FROM …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization memory sql-server-2016 amazon-rds

15
推荐指数
1
解决办法
2412
查看次数

只读文件组中的列存储索引阻止 CheckDB

如果文件组包含列存储索引,则似乎设置文件组以read_only防止dbcc checkdb整个数据库。尝试运行checkdb或checkfilegroup(对于数据库中的任何文件组,包括读写辅助文件和[PRIMARY])时,将返回以下错误...

Msg 8921, Level 16, State 1, Line 24
Check terminated. A failure was detected while collecting facts. 
Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Run Code Online (Sandbox Code Playgroud)

是否有支持在只读文件组中存储列存储数据的方法?还是在这种情况下我无法进行完整性检查?

再现

create database check_fg_ro
go
use check_fg_ro
go
exec sp_changedbowner 'sa';
go
alter database check_fg_ro add filegroup check_fg_ro_2;
alter database check_fg_ro
    add file (
         name='check_fg_ro_2'
        ,filename='C:\check_fg_ro_2.ndf'
    ) to filegroup check_fg_ro_2;
go
create table …
Run Code Online (Sandbox Code Playgroud)

sql-server filegroups columnstore dbcc-checkdb read-only-database

15
推荐指数
1
解决办法
412
查看次数

如何拒绝写入所有 SQL Server 数据库(包括新数据库和恢复数据库)

我想创建一个登录,该登录被拒绝写入任何数据库的能力 - 不仅仅是今天存在的数据库,还有任何新创建的数据库或从其他服务器恢复的数据库。

我不能使用仅限数据库的角色(甚至不能在模型中使用),因为这些角色不会对新恢复的数据库生效。

(商业目的:我正在写一篇关于人们如何为自己设置低权限的新登录的博客文章,并且他们可以确保他们在复制/粘贴代码时不会意外地有“哎呀”时刻或者在没有 where 子句的情况下运行它。)

security sql-server

15
推荐指数
1
解决办法
1772
查看次数