标签: sql-server-2012

SQL Server 2012 中的镜像

我在同一个子网的工作组中新安装了 Win 2008 R2 机器,当然还有 SQL Server 2012。

我允许使用 SQL Server 身份验证登录,认为这可能有助于每个工作站拥有不同的用户帐户数据库。我为三台机器中的每台都创建了相同的登录名。两个拥有完整的 SQL Server 软件,一个拥有 SQL Server Express。然后我尝试镜像两个不同的数据库,产生相同的结果。

首先,我在 SQL Server Management Studio 中右键单击数据库,创建一个新数据库,然后确认恢复模式设置为完整。备份它和事务日志。将这两个项目恢复到我的另一台服务器。(首先,我还没有使用 Witness,希望让它尽可能简单)在恢复数据和日志时,我正在恢复它而没有恢复。然后当我尝试镜像时,我收到一条关于完全限定域名的警告,点击它,因为我的服务器不在域中,然后当它尝试镜像并返回时:

开始镜像时出错。

附加信息:
数据库“test”的更改失败。(Microsoft.SqlServer.Smo)
执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)
服务器网络地址“TCP://(SERVERNAME):5022”无法访问或不存在。检查网络地址名称以及本地和远程端点的端口是否可操作。(Microsoft SQL Server,错误L 1418)

我也用 AdventureWorks 数据库尝试过,结果相同。

在事件查看器中,我看到“数据库镜像连接错误 4。'接收数据时发生错误。' '10054(现有连接被远程主机强行关闭。)'。对于“TCP://(镜像服务器名称):5022”。

在我看到的 SQL Server 日志中

错误 1443。严重性 16。状态 2
数据库“test”的数据库镜像已终止。这仅供参考。无需用户操作。

错误 1474。严重性 16。状态 1。
数据库镜像连接错误 4。“接收数据时出错。” '10054(现有连接被远程主机强行关闭。)'。对于“TCP://(镜像服务器名称):5022”。

我一直在谷歌上搜索试图解决这个问题,但我认为因为我对这一切都不熟悉,所以我很难理解从哪里开始。

mirroring sql-server-2012

6
推荐指数
1
解决办法
4813
查看次数

事务复制:可以创建 52 个发布,但创建第 53 个会导致问题

我提前为一篇长篇文章道歉,但我真的想确保在向社区寻求帮助之前我做了尽职调查,所以就这样了。

我正在研究概念证明,目的是使用事务复制来维护我们数据库的“报告”副本。该设置将包括一个“发布者”服务器和一个单独的“订阅者”服务器。复制将是一个“拉”事务复制,分发服务器运行在订阅服务器上。再次:发布者 => 拉取 =>(分发者 + 订阅者)

我们希望在我们的每台服务器上都有很多数据库,因此,为了模拟这种情况,我在发布者上恢复了 100 个数据库(每个大约 1 GB)。所有数据库都是相同的。

我编写了一个脚本,它使我能够以自动方式设置复制(因为显然我不想手动进行数十次)。该脚本执行以下步骤:

  1. 为数据库启用复制(如果尚未启用):

  2. 为数据库创建日志读取器代理

  3. 为数据库创建发布(如果不存在)

  4. 为数据库创建快照代理(先不要运行它)

  5. 将文章添加到出版物

  6. 运行快照代理作业(并等待它完成)

  7. 创建订阅数据库(如果不存在)

  8. 在订阅数据库中添加订阅(如果不存在)

  9. 创建分销代理

我能够成功地为大约 52 个数据库设置复制,并且一切运行良好. 当我到达数据库#53 时,事情开始出错。快照创建成功,但日志读取器和分发代理失败。转到数据库#54 现在一切都完全坏了。不会创建快照并且没有任何代理正在运行。我仔细查看了复制监视器和 SQL 代理作业以查找错误消息,但没有发现任何有用的信息。复制监视器只是说:“代理关闭。有关更多信息,请参阅作业'……'的 SQL Server 代理作业历史记录”。在详细信息部分,它说:“复制代理遇到故障。有关详细信息,请参阅上一个作业步骤历史消息或复制监视器”。接下来,我转到 SQL 代理作业并查看输出。在作业历史记录中,失败的步骤显示:“消息:复制代理遇到故障。有关更多信息,请参阅上一个作业步骤历史消息或复制监视器”。反过来,上一步根本没有任何信息。只有“消息”这个词,后面什么也没有。我还查看了 Windows 应用程序日志,以查找任何错误, 但它只是重复我在复制监视器和代理作业历史记录中看到的相同消息。我在代理命令中添加了“–output”参数(在 SQL 代理作业步骤属性中),希望输出文件能为我提供更多信息,但没有创建输出文件,这让我相信代理甚至没有启动。只是“消息”这个词,之后什么都没有。我还查看了 Windows 应用程序日志以查找任何错误,但它只是重复了我在复制监视器和代理作业历史记录中看到的相同消息。我在代理命令中添加了“–output”参数(在 SQL 代理作业步骤属性中),希望输出文件能为我提供更多信息,但没有创建输出文件,这让我相信代理没有甚至开始。只是“消息”这个词,之后什么都没有。我还查看了 windows 应用程序日志以查找任何错误,但它只是重复了我在复制监视器和代理作业历史记录中看到的相同消息。我在代理命令中添加了“–output”参数(在 SQL 代理作业步骤属性中),希望输出文件能为我提供更多信息,但没有创建输出文件,这让我相信代理没有甚至开始。

我在想我可能已经达到了一些硬件限制,所以我检查了磁盘空间并且有很多可用空间。我还检查了 RAM,它甚至没有使用 50%。

最后,真正让我受益的是我能够从命令行手动运行所有代理。例如,我可以从 SQL 代理快照作业复制粘贴参数,并使用这些参数从命令行运行 snapshot.exe - 快照已成功创建。logreader 和分发代理也是如此。

我在这里完全感到困惑,并感谢任何指向正确方向的指示。

最后一点(也许是唯一的一线希望):这个问题是完全可以重现的。我可以成功设置我的 50 多个订阅,然后问题将始终围绕订阅号 52-53 开始。

谢谢!

replication sql-server sql-server-2012 transactional-replication

6
推荐指数
1
解决办法
996
查看次数

在 SQL Server 2008R2/2012 中禁用 SET 语句/强制 SET 选项

我目前正在使用 MSSQL 2008R2 数据库,该数据库经常使用以下 SET 命令:

SET ANSI_NULLS { ON | OFF }
SET QUOTED_IDENTIFIER { ON | OFF }
SET ANSI_PADDING { ON | OFF }
Run Code Online (Sandbox Code Playgroud)

在研究这些设置时,我偶然发现了 Microsoft 技术网(链接)上有关 ANSI_NULLS 的以下说明:

在 Microsoft SQL Server 的未来版本中,ANSI_PADDING 将始终为 ON,并且任何将该选项显式设置为 OFF 的应用程序都将产生错误。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

因此,我想强制执行“全局”设置。我一直在寻找一天中最好的部分,但据我所知,您可以随时更改这些设置。为了完全确定我想问这里:

是否可以强制执行 ANSI_NULLS ON 之类的设置或禁用在“任何”级别更改这些设置的可能性。我想用它来测试如果禁用将特定选项设置为 OFF 的能力,数据库是否会“存活”。

我希望我能够描述我的问题。这不是我的母语。提前致谢。

PS:在 StackOverflow 上,我也被建议在这里问这个问题。原问题:这里

permissions sql-server-2008-r2 configuration sql-server-2012

6
推荐指数
1
解决办法
916
查看次数

将表格转换为 Ansi Padding

我目前正在使用 SQL Server 2008 R2 服务器和一个数据库,该数据库使用了大量表,这些表是 ANSI_PADDED 设置的混合包。90% 的表都有带有 Ansi Padding 的列,AND 列带有 Ansi Padding 关闭。

我现在的任务是“转换”这些表,以便每一列都使用 Ansi_Padding ON。

我想知道最简单的方法是什么?

我应该编写一个“转换”一个表的脚本,但最后我将需要一个更改所有表的脚本。

sql-server-2008-r2 configuration sql-server-2012 sql-standard

6
推荐指数
2
解决办法
5133
查看次数

在繁重的并发 INSERT 工作负载下,有什么方法可以减少 sysallocunits 争用?

我有一个被大量独立会话插入的数据库。每个会话写入不同的表,因此您会天真地期望它们都将并行进行。但是,通过检查sys.dm_os_wait_statssys.dm_os_latch_stats,我发现我实际上在DBCC PAGE报告为类型 11 的页面(即 PFS 页面)上遇到了大量的 PAGELATCH_* 等待。

所以基本上整个过程都变慢了,因为每个线程都在与其他线程竞争以分配新页面。

这种情况下的标准建议是:

我做了这两件事,它确实减少了 PFS 页面上的争用,但我现在看到PAGELATCH_EX页面上的一些争用DBCC PAGE告诉我是属于对象 ID 7 的数据页,即sysallocunits.

关于sysallocunits系统表用途的在线信息不多,我也找不到任何关于它的争用的信息。在改变这个表时,我似乎刚刚设法用瓶颈替换了我的分配瓶颈!

我想我可以通过将每个表放在自己的数据库中(然后不共享sysallocunits表)来减少争用,但这将是我宁愿避免的相当重要的架构更改。

有什么方法可以在sysallocunits不创建额外数据库的情况下减少争用?

编辑:根据要求,这是DBCC PAGE显示争用的页面之一的输出:

PAGE: (1:476)


BUFFER:


BUF @0x0000006143763A80

bpage = 0x0000004064D20000          bhash = 0x0000006301FCBAC0          bpageno = (1:476)
bdbid = 15                          breferences = 2047                  bcputicks = 48351
bsampleCount = 90                   bUse1 …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

6
推荐指数
1
解决办法
1082
查看次数

SQL Server 2012 Managment Studio 不保存自动恢复文件

我试着去Tools > Environment > AutoRecover

  • 保存自动恢复复选框被选中。
  • 每“5”分钟保存一次。
  • 保留自动恢复信息:7 天。

但它不保存任何自动恢复文件(我在我的用户文件夹中搜索了*.sql),并且不建议在 Management Studio 因断电而关闭时自动恢复。

我搜索了注册表以查看是否手动更改了某些内容,HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server但只找到了一个键:CustomerFeed.

sql-server ssms sql-server-2012

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

SQL Server 全文搜索 - .rtf 文件被 rtf 标签错误地索引

我已经在我的 SQL Server DB 上的一varbinary(max)列上设置了全文索引。我指定了一个类型列,其中包含文件的扩展名,例如“.doc”、“.pdf”等。

但是,我注意到当任何 .rtf 文件被索引时,SQL 将包含文件中的所有元信息(例如 RTF 标记“listoverridecount0”)。

这使索引膨胀很多,也意味着搜索将匹配这些标签(即我可以搜索“listoverridecount0”并返回每个 .rtf)。

.rtf 的 iFilter 是否有任何理由不会删除 RTF 标签?

当我运行这个:

SELECT * FROM sys.fulltext_document_types WHERE document_type = '.rtf';
Run Code Online (Sandbox Code Playgroud)

我明白了:

document_type  .rtf                                     
class_id       C7310720-AC80-11D1-8DF3-00C04FB6EF4F 
path       c:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\msfte.dll
version        12.0.6828.0
manufacturer   Microsoft Corporation
Run Code Online (Sandbox Code Playgroud)

我已提交Microsoft Connect 错误,因为我似乎无法找到任何解决方法。据推测,这是 a) RTF iFilter 未删除标签的错误,或 b) 全文索引问题。

我的 SQL Server 版本是:

Microsoft SQL Server 2012 (SP1) - 11.0.3393.0 (X64) 
2013 年 10 月 25 日 19:04:40 
版权所有 (c) 微软公司 …

sql-server full-text-search sql-server-2012

6
推荐指数
1
解决办法
1353
查看次数

选择几乎所有具有许多“分组依据”列的行时提高查询性能

我有一个包含 20 列和大约 600,000 条记录的表。最大行大小仅为 100 字节左右。该表每隔几天重新填充一次,但记录数保持大致相同。

现在只有一个聚集索引:主键的 int 标识列。

我有几个依赖于这个表的查询和视图,通常需要 5-10 秒来执行。当我简单地选择所有记录 ( select * from myTable) 时,检索所有结果大约需要 4 秒钟。

我一直无法找到在 SQL Server 中选择 500,000 条记录的相关基准。这个时间是典型的吗?

这是我在表上执行的典型查询:

select  CO.Company
    ,CO.Location
    ,CO.Account
    ,CO.SalesRoute
    ,CO.Employee
    ,CO.ProductType
    ,CO.Item
    ,CO.LoadJDate
    ,CO.CommissionRate
    ,SUM(CO.[Extended Sales Price]) AS Sales_Dollars
    ,SUM(CO.[Delivered Qty]) AS Quantity
from    dbo.Commissions_Output CO
where   CO.[Extended Sales Price] <> 0
group by    CO.Company
        ,CO.Location
        ,CO.Account
        ,CO.SalesRoute
        ,CO.Employee
        ,CO.ProductType
        ,CO.Item
        ,CO.LoadJDate
        ,CO.CommissionRate
Run Code Online (Sandbox Code Playgroud)

当我在表上至少有一个非聚集索引时,我得到以下结果:

扫描计数 18,逻辑读取 18372;CPU 时间 = 24818 毫秒,已用时间 = 8614 毫秒。 …

performance sql-server index-tuning sql-server-2012 query-performance

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

将登录名映射到创建时未映射到登录名的用户

这个问题以前有人问过,但我没有看到任何答案(/sf/ask/452816941/

当用户最初是使用 GUI 中的“SQL User without login”用户类型选项创建时,如何将登录映射到用户?我正在使用 SQL Server 2012

security sql-server sql-server-2012

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

SQL Server:为现有索引创建新的 GUID 值

我有一个大约有 600 万行的现有表。相关栏目有:

ID int not null PK
Key uniqueidentifier not null
Run Code Online (Sandbox Code Playgroud)

通过Key查找对该表的读/写可能类似于 100 比 1。

现有的行都是使用创建的,newid()所以它们没有顺序。存在一个索引Key

CREATE NONCLUSTERED INDEX [idx_Robert] ON [dbo].[Aleksander]
(
    [Key] ASC
) WITH (PAD_INDEX = OFF
    , STATISTICS_NORECOMPUTE = OFF
    , SORT_IN_TEMPDB = OFF
    , DROP_EXISTING = OFF
    , ONLINE = OFF
    , ALLOW_ROW_LOCKS = ON
    , ALLOW_PAGE_LOCKS = ON
    , FILLFACTOR = 80
    ) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

鉴于表中已经有数百万行,将 GUID 生成更改为顺序使用有什么好处newsequentialid()

展望未来,它将生成更好的数据,但由于不知道新的顺序 GUID 系列将在索引中的哪个位置,它会更快地破坏索引吗?将 GUID 生成保留为非顺序是否会更好,以便索引中的剩余页面空间更均匀地填充?

就表的增长率而言,它代表了大约3年的数据。

Year …
Run Code Online (Sandbox Code Playgroud)

index sql-server uniqueidentifier sql-server-2012 uuid

6
推荐指数
2
解决办法
1524
查看次数