标签: sql-server-2012

在 Dacpac 比较期间忽略登录映射

我们正在尝试通过开发、测试和生产实现数据库部署的自动化。我们使用 SSDT 的方法是比较来自不同环境的 DACPAC 以生成更新脚本,并作为最后一步,将正确的 Windows 登录映射到正确的用户。

/p:IgnoreUserLoginMappings

查看 SqlPackage.exe文档,有一个属性IgnoreUserLoginMappings似乎暗示它会忽略映射,因此它们不包含在 dacpac 中,因此不会在比较和脚本生成期间更新。但是,当我们在提取过程中使用此属性时,生成的用户无需登录,就像 dacpac 中的这样:

<Element Type="SqlUser" Name="[Domain\Account]">
  <Property Name="IsWithoutLogin" Value="True" />
    <Relationship Name="DefaultSchema">
      <Entry>
        <Annotation Type="PersistedResolvableAnnotation" Name="[Domain\Account]">
                <Property Name="TargetTypeStorage" Value="SqlSchema" />
        </Annotation>
         </Entry>
    </Relationship>
</Element>
Run Code Online (Sandbox Code Playgroud)

这不是我们想要的!随后生成的更新如下所示:

CREATE USER [Domain\Account] WITHOUT LOGIN
    WITH DEFAULT_SCHEMA = [Domain\Account];
Run Code Online (Sandbox Code Playgroud)

我们做错了什么还是这是一个错误,我已经搜索过但看不到有关此属性的太多信息,是否有人使用它可以提供帮助,或者是否有其他方法?

相关问题:这里

sql-server-2012 ssdt

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

不保证任何数据类型和二进制数据类型之间的转换在 SQL Server 版本之间是相同的

我刚刚发现在 SQL Server 2012 MSDN 文档中关于 binary 和 varbinary 类型,他们在文章末尾提到了以下内容

不保证任何数据类型和二进制数据类型之间的转换在 SQL Server 版本之间是相同的。

我注意到这在 2005、2008 和 2008 R2 的文章的先前版本中不存在。我在网上四处搜索,但没有找到任何确切的解释来满足我“为什么?”的问题。(这是我在这里的问题。)

我正在做的项目需要将数据存储为varbinary(max),但是根据这个小说明,如果我需要移动二进制数据,然后在另一个SQL Server版本上将其转换,它将与原始数据不匹配数据转换为二进制,所以更深入地回答这个问题会很有帮助。

谢谢!

sql-server documentation type-conversion sql-server-2012

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

我应该使用强制转换或范围将日期时间加入日期吗?

这个问题是从这里提出的优秀问题中提取出来的:

迄今为止的演员阵容是可以讨论的,但这是一个好主意吗?

就我而言,我不关心该WHERE子句,而是关心加入具有类型列的事件表DATE

一个表有DATETIME2,另一个有DATE......所以我可以有效地JOIN使用aCAST( AS DATE)或者我可以使用“传统”范围查询(>=日期和<日期+1)。

我的问题是哪个更可取?这些DATETIME几乎永远不会与谓词DATE值匹配。

我希望保持在 200 万行DATETIME和 5000行以下DATE(如果这个考虑有所不同)

我是否应该期望在JOIN使用该WHERE子句时具有相同的行为?我应该更喜欢哪个通过缩放来保持性能?答案是否随 MSSQL 2012 而改变?

我的通用用例是将我的事件表视为日历表

SELECT
    events.columns
    ,SOME_AGGREGATIONS(tasks.column)
FROM
    events
LEFT OUTER JOIN
    tasks
        --This appropriately states my intent clearer
        ON CAST(tasks.datetimecolumn AS DATE) = events.datecolumn 
        --But is this more effective/scalable?
        --ON tasks.datetimecolumn >= events.datecolumn 
        --AND tasks.datetimecolumn < DATEADD(day,1,events.datecolumn)
GROUP BY
    events.columns
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2008-r2 sql-server-2012 datetime

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

许可 SQL Server 2012 Standard Edition 用于开发和测试服务器

是否有一种经济的方法可以在测试服务器上许可 SQL Server 标准版?

鉴于以下环境:

  • 直播:SQL Server 2012 标准版
  • 测试:SQL Server 2012 开发版
  • 开发:SQL Server 2012 开发版

这种情况的问题在于,开发人员可以使用在开发人员版本中工作的功能进行编码,但在部署到实时服务器时不可用。客户将是第一个发现问题的人!

想法:

  • 在实时服务器上托管测试数据库?
    • 不提供我想要的实时/测试隔离
    • 使用实时服务器资源(缓冲区、CPU 等)
    • (可以在不使用时断开测试数据库以最大限度地减少这种情况)
  • 在实时服务器上运行第二个数据库实例
    • 现场/测试隔离仍然很差
    • 使用服务器 RAM/CPU 的更多进程

testing license sql-server-2012

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

将sql server重置为默认值?

我正在尝试学习镜像测试数据库,在此过程中,我在查询框中输入了一些命令。在尝试创建数据库镜像端点时,我提交了一个输入错误的命令。我被返回一个错误。我试图重新提交一个更正的命令,但后来被告知端点已经存在。然后我想我只需删除我的测试数据库并重新启动。我删除了主 SQL Server 中的数据库,但现在我的镜像 SQL Server 显示我的测试数据库正在恢复,我无法删除该数据库。

有没有办法撤销我所做的一切,回到我的 SQL Server 的安装默认值?我没有什么需要保存的,我只是在努力学习。

configuration sql-server-2012

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

MAXDOP 是否会影响我应该创建的 tempdb 数据文件的数量?

根据我的阅读,配置 tempdb 的最佳实践包括创建多个数据文件。我理解的经验法则是,如果您应该创建与最多 8 个逻辑处理器相同数量的数据文件。然后,如果您有 tempdb 争用,请添加一个额外的文件,直到争用消失或您有每 4 个额外的逻辑处理器添加一个额外的文件。因此,如果您有 16 个逻辑处理器,那么您最多可以创建 10 个文件。

我很好奇的是 MAXDOP 是否会对此产生影响?因此,例如,如果我有 12 个逻辑处理器。我已将 MAXDOP 设置为 6,因为它们被分成 2 个 NUMA 节点。这是否意味着我应该为 tempdb 坚持使用 6 个数据文件?或者我是否仍然拥有推荐的处理器总数的 8 或 9?

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

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

SQL Server 2012 中缺少系统表

我将 SQL Server 2000 数据库恢复到 2005 年,然后恢复到 2012 年。我现在看不到 SQL Server 2000 中存在的系统表。

为什么?

sql-server-2005 sql-server sql-server-2000 sql-server-2012

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

Tempdb 数据文件消失

我最近将临时数据库文件移到了一个单独的驱动器上(我有两个数据文件和一个日志文件)。

但是,重新启动服务器后,我的第二个数据文件从 gui 上的文件列表和 sp_helpfile 中都消失了。我设法多次重现此行为:我添加了一个新数据文件,看到它同时出现在 gui 和 sp_helpfile 中,并在重新启动服务器后消失。

dbcc checkdb对数据库运行过,它没有返回任何错误。SQL 日志或 Windows 应用程序事件日志中都没有信息。

在做了更多研究之后,我运行了以下查询:

select d.name, m.* from sys.master_files m
inner join sys.databases d 
on (m.database_id = d.database_id)
where d.name like 'tempdb'
order by 1, 2
Run Code Online (Sandbox Code Playgroud)

结果:http : //pastebin.com/Zu5fJ2hU

它显示了四个不同的辅助数据文件,其中没有一个出现在 sp_helpfile 中。如果我尝试使用 SQL Server 不允许使用的任何名称。这些文件都不存在于磁盘上。我的服务器是 SQL 2012 标准版。

sql-server sql-server-2012 tempdb datafile

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

在多个 nvarchar(max) 列上建立索引

我的数据库中有多个 nvarchar(max) 列,名为ShipperName, ConsigneeName, ProdDesc, BillOFLading

我需要做的是将UNIQUE INDEX这些列组合起来。因为我没有这样做,因为如果 900 B 限制。

然后我尝试了(阅读以下链接Indexing Wide Keys 后

ALTER TABLE dbo.ProductDetail 
   ADD ShipperNameHash AS HASHBYTES('SHA2_512', ShipperName) PERSISTED;

ALTER TABLE dbo.ProductDetail 
   ADD ConsigneeNameHash AS HASHBYTES('SHA2_512', ConsigneeName) PERSISTED;
Run Code Online (Sandbox Code Playgroud)

然后我在以下语句中遇到以下错误:

消息 8152,级别 16,状态 10,第 1 行
字符串或二进制数据将被截断。
该语句已终止。

ALTER TABLE dbo.ProductDetail 
   ADD ProductDescHash AS HASHBYTES('SHA2_512', Product_Description) PERSISTED;
Run Code Online (Sandbox Code Playgroud)

而且还创建了上面的语句列varbinary(8000)。这当然没有为我解决问题。

有什么方法可以建立UNIQUE INDEX在这些列的组合上吗?

index sql-server sql-server-2012

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

SQL Server 内存问题

我们有一个似乎正在泄漏内存的 SQL 服务器。内存消耗会随着时间线性增加,直到服务器完全耗尽内存,从而导致严重的性能问题。

SQL 服务器包含 6 个小型(平均超过 50MB)数据库和一个稍大一些(大约 2GB)的数据库。

该服务器目前是 VMware 5.1 中的虚拟服务器。它的平均工作负载非常轻(~1% cpu,<10 批请求/秒,< .5 mb/s IO 典型;峰值推到~10% cpu,300 批请求/秒,5 mb/s IO)。

目前,它有 8GB 分配给 VM。其中,4GB 设置为 SQL Server 中的最大服务器内存。但是,SQL 服务器进程使用的内存远不止于此——通常在重新启动后的 12 小时内使用大约 6GB。

除了主要的读取工作负载外,该服务器还运行许多 SSIS 包,以将数据传入和传出到公司结构内的其他系统。这利用 MySQL 通过 ODBC(安装了 5.2.6 驱动程序)连接到内部 MySQL 集群和 ConnX 以连接 OpenVMS 系统。

操作系统:Windows 2012 SQL:2012 Enterprise VM 设置:4 个 CPU 内核,8GB,用于操作系统、数据和日志的独立虚拟卷。

问题: 1) 关于为什么 SQL Server 进程不会遵循服务器上设置的限制的任何想法?2) 有没有人知道在 SQL Server 中分析内存使用情况的好方法?我们可以看到页面预期寿命正在下降,更多的内存被分配给进程,但是有什么方法可以查看 SQL 将内存分配给什么(即过程缓存、缓存结果等)。

sql-server memory ssis sql-server-2012

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