标签: sql-server-2012

sql server 2000 和 2012 可以在同一台服务器上共存吗?

我看到 2005/2008/2012 都可以共存,但在 2000 和 2012 上找不到任何东西。

sql-server-2000 sql-server-2012

4
推荐指数
1
解决办法
384
查看次数

如何将 SQL Server 数据库导出到文件以便以后导入到不同的计算机

我正在使用 Sql Server 2012 导入和导出数据 (64) 我不确定我应该选择什么选项来做我想做的事。我只是希望能够将数据库中的所有数据导出到一个文件中,然后我可以将其发送到我的另一台机器,然后导入数据库。

数据库只包含表。

sql-server-2012

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

应用索引后的 TempDB 大小问题

几天前,我向 SQL Server 2012 数据库添加了几个索引以帮助提高性能。今天,我们的带有 TempDB 的分区空间不足。TempDB 从不到 10 GB 增加到 38 GB。运行后:

SELECT SUM(unallocated_extent_page_count) AS [free pages], 
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM sys.dm_db_file_space_usage;
Run Code Online (Sandbox Code Playgroud)

看起来我在 tempDB 中有大约 22GB 的可用空间。我知道 TempDB 用于执行 SQL Server 完成的所有排序,但现在它导致了空间问题。如果 TempDB 有那么多可用空间,为什么它会抱怨服务器上的空间不足?我能做些什么来防止这个问题再次发生?

sql-server sql-server-2012

4
推荐指数
1
解决办法
1014
查看次数

使用增量 -1 的 IDENTITY 列

我需要在 2 个单独的数据中心运行一个带有 2 个主表的 sql server 日志数据库,同时写入两个数据中心。

我的想法是将数据库恢复到新的数据中心,然后将身份列重新设定为 -1 并将增量设置为 -1,这样在需要合并数据时就不会出现重复的 ID。DATACENTRE1 为正整数,DATACENTRE2 为负整数

-1 的增量会导致任何问题吗?

database-design sql-server auto-increment identity sql-server-2012

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

在一个查询中选择多个传感器值

背景

我有几个设备,每个设备都有几个传感器。我不时地记录这些并将它们存储在下面描述的表中。当有人请求一个网页时,我会一个接一个地获取这些值中的几个(最新记录的)并将它们显示给用户。但是目前这需要很长时间,因为需要提取的值太多,每个值的提取需要大约 8 毫秒,并且我们总共讨论了大约 300 毫秒的总页面加载时间增加 - 对于一个相对较好的页面。

CREATE TABLE [dbo].[SensorValues](
  [DeviceId] [int] NOT NULL,
  [SensorId] [int] NOT NULL,
  [SensorValue] [int] NOT NULL,
  [Date] [int] NOT NULL, --- stored as unixtime
CONSTRAINT [PK_SensorValues] PRIMARY KEY CLUSTERED 
(
  [DeviceId] ASC,
  [SensorId] ASC,
  [Date] DESC
);
Run Code Online (Sandbox Code Playgroud)

该表在日期列上每周进行分区。

我现在应该做什么

所以,我做的是以下。我选择每个分区中当前日期/时间之前的最大值。并选出最大的值。

SELECT TOP (1) ca.SensorValue, ca.Date
  FROM sys.partitions AS p
  CROSS APPLY
  (
  SELECT TOP (1) v.Date, v.SensorValue
    FROM SensorValue AS v
    WHERE $PARTITION.SensorValues_Date_PF(v.Date) = p.[partition_number]
    AND v.DeviceId = @fDeviceId
    AND v.SensorId = @fSensorId …
Run Code Online (Sandbox Code Playgroud)

sql-server partitioning select sql-server-2012 group-by

4
推荐指数
1
解决办法
1053
查看次数

SQL Server 动态内存管理

我正在阅读 Christian Bolton、Brent Ozar 的一本关于 SQL 2008 内部结构和故障排除的书,以及已故 Ken Henderson 写的一本旧书,我对 SQL 服务器的动态内存管理器感到困惑和好奇。

有人可以确认我对 SQL Server 动态内存管理的理解是正确的吗?

在 SQL Server 2005/2008/2008R2 x64 中

a) 锁占用的最大内存量限制为缓冲池内存(最大服务器内存)的 60%。通过禁用锁升级并进行大量插入,我可以看到 SQL Server 在抛出错误号 1204(锁内存不足)之前可以占用多达 60% 的缓冲池内存

b) 计划缓存大小限制为

 a) Number of plans in cache -- 160K 

 b) Plan Cache upper limit: 75% of server memory from 0-4GB + 10% of server memory from 4Gb-64GB + 5% of server memory > 64GB.  
Run Code Online (Sandbox Code Playgroud)

一旦达到此阈值,SQL Server 将开始从缓存中驱逐执行计划,直到 SQL Server 不再看到内部计划缓存压力

c) 工作区内存限制为最大服务器内存的 75%,除非被资源调控器覆盖,否则单个查询不能超过(可用的最大工作区内存 75%)的 25%。

我的问题是

在惰性编写器开始将页面逐出内存之前,数据库页面缓存占用的最大内存是否有限制?它是如何控制的?通过查看缓冲区中的空闲页数……** …

sql-server-2008 sql-server-2008-r2 sql-server-2012

4
推荐指数
1
解决办法
1544
查看次数

SQL Server 2012 OUTPUT 子句中的错误

给定以下针对 AdventureWorks 数据库的 SQL 代码:

begin transaction;

drop trigger Sales.iduSalesOrderDetail;
alter table Sales.SalesOrderDetail
    add LineNumber int null;
go

with sod as (
    select
        SalesOrderID, 
            /* other cols */
        LineNumber,
        NewLineNumber = row_number() over 
            (partition by SalesOrderID order by SalesOrderDetailID) + 1
    from Sales.SalesOrderDetail
    where SalesOrderID <= 44000)
update sod
set LineNumber = NewLineNumber,
    ModifiedDate = getdate()
output
    inserted.SalesOrderID, 
    /* other cols */
    inserted.LineNumber;

select
    SalesOrderID, 
    /* other cols */
    LineNumber
from Sales.SalesOrderDetail
where SalesOrderID <= 44000;

rollback transaction;
Run Code Online (Sandbox Code Playgroud)

在 SQL …

sql-server sql-server-2012

4
推荐指数
1
解决办法
763
查看次数

LIKE 字符长度限制

这个问题的背景可以在这里找到

我的存储过程的以下部分不起作用。条款是否有字符长度限制LIKEt1.ProductList有时最长可达 1000 个字符:

DELETE t1 FROM #tmptable t1
WHERE EXISTS (SELECT 1 FROM #tmptable2_ t2
              WHERE t1.DealerId != t2.DealerId
              AND t2.ProductList LIKE '%' + t1.ProductList + '%'
              AND t2.numberOfVibs > t1.numberOfVibs);
Run Code Online (Sandbox Code Playgroud)

列中单行的示例数据ProductList

B1ZMA25706,B1ZMI09502,B1ZMI12910,B1ZMI18602,BB001TBL26,BBHMOVE4,BE09501FBL,BGS52200,BKS3003,BM2,BO11001EBO,BPGTB1200,BPGTC172HP,BPGTX663,BPIVMS6502,BPIVOD1022,BPVA475,BPVB1000,BPVB800,BPVC652,BPVPW1500,BPVW1000,BPVX652,BPVX662,BREMEN78, BSA2602、BSD2880、BSG62082、BSG71800、BSG81623、BSG82422、BSG82480、BSGL32015、CAB150、CAB21、CD1401B、CD21001WAL、CD210012004CD500、CD21001、CD5000、CD2100400400000000000000000000000C

sql-server t-sql sql-server-2012

4
推荐指数
1
解决办法
5939
查看次数

根据日期间隔查询链接在一起的记录

我在 SQL Server 2012 中有一个具有以下简化架构的表,我需要定义一个查询来获取最新的记录,然后返回它们之间间隔少于 30 天的记录链。一旦出现超过 30 天的差距,链条就会被打破,不再继续。重叠应该延续链条。有没有办法在不诉诸缓慢和递归的情况下解决这个问题?

架构

ID          (int)
Arrival     (datetime)
Departure   (datetime)
Run Code Online (Sandbox Code Playgroud)

样本数据

ID Arrival       Departure
1 2009-04-19    2009-04-28 
2 2009-04-27    2009-05-21 
3 2009-06-11    2009-07-01 
4 2009-07-19    2009-07-24 
5 2004-04-19    2004-04-21 
6 2009-02-28    2009-03-05
Run Code Online (Sandbox Code Playgroud)

所需查询结果

ID Arrival       Departure
4 2009-07-19    2009-07-24 
3 2009-06-11    2009-07-01
2 2009-04-27    2009-05-21 
1 2009-04-19    2009-04-28 
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

4
推荐指数
1
解决办法
1699
查看次数

零数据丢失的备份策略

我正在做一个项目,它有大约 10 万条记录。我们可以承受 1 天的停机时间,但我们需要数据始终以最新状态提供给我们。

我经历了两种选择:

1) 镜像(将在未来版本中弃用)

2) AlwaysOn 可用性组

两者看起来都不适合我的场景,因为镜像很快就会过时,并且可用性组仅在 SQL Server 的企业版中可用。我们只有BI版。

除了这些,还有什么好的选择吗?我们甚至准备花钱购买 3rd 方工具,但目前买不起企业版。

sql-server backup sql-server-2012

4
推荐指数
1
解决办法
1950
查看次数