数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

1
mydumper的“ --use-savepoints”选项如何减少元数据锁定
MyDumper 0.6.1添加一个新选项--use-savepoints。从手册中,它意味着: 使用保存点减少元数据锁定问题,需要SUPER特权 我不明白 它如何“减少元数据锁定问题”,为什么它需要“超级权限”?我认为,元数据对于防止其他DDL修改表结构至关重要。

3
在IF EXISTS查询中使用CTE
是否可以在SQL Server 2012中执行与以下类似的操作? IF EXISTS ( WITH DATA AS ( SELECT *, ROW_NUMBER() OVER(PARTITION BY column ORDER BY Column) AS rn FROM table ) SELECT * FROM DATA WHERE rn = 2 ) BEGIN ... END 我尝试使用此语法并收到错误。如果无法做到这一点,使用临时表是否是实现此目的的最佳方法?
8 sql-server  cte 

2
Microsoft SQL Server 2012镜像断开连接
我有一些Microsoft SQL Server 2012镜像,没有见证人处于异步模式,这些镜像偶尔会断开连接。我正在运行SQL Server 2012 11.0.5058。看着镜子那边的原木,我看到了 无法分配BUF:FAIL_BUFFER_ALLOCATION 1 有一堆记忆库消息 错误:802,严重性:17,状态:0。 缓冲池中没有足够的可用内存。 错误:1454,严重性:16,状态:1。 数据库镜像将被挂起。服务器实例“实例”在充当数据库“数据库”的镜像伙伴时遇到错误802,状态0,严重性17。数据库镜像伙伴可能会尝试从错误中自动恢复并恢复镜像会话。有关更多信息,请查看错误日志以获取其他错误消息。 任何有助于检查镜后为什么挂起然后断开连接的帮助都将受到赞赏。在此之后,我可以重新建立镜像,它们可以正常工作几天,然后再次发生。

1
SQL Server 2014-重置所有内容
除了重新安装软件之外,还有没有简单的方法可以从SQL实例“从头开始”?我的意思是: 删除所有创建的登录, 删除所有添加的数据库, 重置系统数据库, 删除任何新配置, 重置任何SQL Server代理配置 我在网上找不到有关如何执行此操作的任何信息。

3
BLOB合并复制期间的高tempdb磁盘I / O
拥有用于复制BLOB(类型image)的合并发布,就我的数据量而言,tempdb磁盘I / O很高。发布是仅下载的,没有筛选器。 高磁盘I / O是由同步引起的(当没有订阅者进行同步时,一切正常),这与订阅者数量密切相关。即使同步之间在Publisher上没有任何数据更改,也会发生这种情况,这使我感到困扰。 复制表的大小:7MB(总行数约为100) tempdb I / O:写入速度约为30 MB /秒(日志和数据文件) 订户数量:略多于100个,每个订户每30分钟同步一次(或多或少均匀)。 保留期限设置为14天 在发布服务器上使用SQL Server 2008,在订阅服务器上使用SQL Server 2005-2008R2。所有订户都使用Web同步。 此外,在订户处进行同步需要花费大量时间,并且多次发生replmerg.log以下情况: DatabaseReconciler, 2015/04/21 12:13:40.348, 3604, 25088, S2, INFO: [WEBSYNC_PROTOCOL] Sending client ReconcilerPhase WebSyncReconcilerPhase_RegularDownload DatabaseReconciler, 2015/04/21 12:13:47.063, 3604, 25194, S2, INFO: [WEBSYNC_PROTOCOL] Received server ReconcilerPhase WebSyncReconcilerPhase_LastRegularDownload 尝试@stream_blob_columns打开和关闭设置无效。 该问题是:这是个好主意,用合并复制到这些斑点发送到用户?我们还有其他出版物(尽管它们没有BLOB列),其中包含大量数据,而没有tempdb问题。是SQL Server缺陷还是安装错误? 发布服务器和分发服务器位于同一实例SQL Server …

2
在一系列时间戳(一列)上优化查询
我正在通过Heroku使用Postgres 9.3。 我有一个表“ traffic”,其中有1M +条记录,每天都有许多插入和更新。我需要在此表上的不同时间范围内执行SUM操作,这些调用最多可能需要40秒钟,并且希望听到有关如何改进该建议的建议。 我在此表上有以下索引: CREATE INDEX idx_traffic_partner_only ON traffic (dt_created) WHERE campaign_id IS NULL AND uuid_self <> uuid_partner; 这是一个示例SELECT语句: SELECT SUM("clicks") AS clicks, SUM("impressions") AS impressions FROM "traffic" WHERE "uuid_self" != "uuid_partner" AND "campaign_id" is NULL AND "dt_created" >= 'Sun, 29 Mar 2015 00:00:00 +0000' AND "dt_created" <= …

3
检查子查询结果中是否有任何值
我有一个复杂的子查询,该查询返回订单ID列表。我需要获得拥有这些订单的客户列表。问题是有两种将客户分配给订单的方式(两个字段之一)。我可以做这样的事情: select * from Customers where orderId in (select...) or secondaryOrderId in (select ...) 问题在于,子查询在执行时间和屏幕空间上都是巨大的。有没有一种方法可以检查其中一个字段是否包含所需结果之一?

1
对SQL Server 2000中所有表,视图,过程的GRANT权限
我想知道是否存在使用SQL Server 2000语法的T-SQL来对特定数据库的所有表和视图进行GRANT SELECT,INSERT,UPDATE,DELETE的相当有效的方法,但不包括100个对象中的2个或3个。我还希望能够对所有存储过程授予EXEC特权。 目前,我正在使用以下代码逐一更改它们。对大约100个表和100个视图执行此操作将花费太长时间,并且通过GUI花费的时间甚至更长(除非我也做错了)。 use [DATABASE_NAME] GO GRANT DELETE ON [dbo].[table_name]TO [user_name] GO use [DATABASE_NAME] GO GRANT INSERT ON [dbo].[table_name]TO [user_name] GO use [DATABASE_NAME] GO GRANT SELECT ON [dbo].[table_name]TO [user_name] GO use [DATABASE_NAME] GO GRANT UPDATE ON [dbo].[table_name]TO [user_name] GO 如何使用T-SQL在所有用户表和视图之间循环以授予某些特权,同时排除几个对象?

1
SQL Server,TOP与ROW_NUMBER
我正在学习执行计划,并尝试不同的查询并比较它们的性能,结果发现: SELECT StatisticID FROM ( SELECT StatisticID, ROW_NUMBER() OVER (ORDER BY StatisticID) AS rn FROM FTCatalog.Statistic ) AS T WHERE T.rn <= 1000 ORDER BY rn SELECT TOP 1000 StatisticID FROM FTCatalog.Statistic ORDER BY StatisticID 它们都返回相同的结果集-但是第一个执行速度更快,资源占用更少(至少SSMS告诉我),以下是执行计划: 与SQL Query Plan Explorer的比较: 谁能给我一些有关幕后实际发生情况的信息,以及为什么结果有所不同?如果您还有其他需要,请告诉我。 谢谢,伊瓦达斯。

1
共享驱动器上的即时文件初始化
之前我曾问过类似的问题,但以前我曾问过有关将备份移到共享位置的问题。这次我很好奇:如果要还原共享驱动器上的数据库,是否需要在该服务器上或仅在运行SQL Server的服务器上启用IFI? 我问的原因是我正在还原一个非常大的数据库,并且在最近几个小时内一直处于100%恢复状态。等待类型sp_whoisactive为: (28472716ms) `PREEMPTIVE_OS_WRITEFILEGATHER. 我唯一看到的是未启用IFI的情况,但是我确实在SQL Server上启用了该功能,但在共享驱动器服务器上却未启用它。

2
使用psql和--disable-triggers恢复纯文本pg_dump
我必须使用一个简短的脚本执行一些测试,以更新我的一张表中的某些“旧版”数据。 我非常谨慎,我使用未经测试的脚本决定先备份相关表。最简单的方法是: pg_dump -a --file table.sql -t table database 现在我做了我必须做的,检查了结果,发现它们不尽人意。我对自己说:我很幸运能得到那张桌子的备份。 备份表时已经警告过我: pg_dump: NOTICE: there are circular foreign-key constraints among these table(s): pg_dump: table pg_dump: You might not be able to restore the dump without using --disable-triggers or temporarily dropping the constraints. pg_dump: Consider using a full dump instead of a …

1
SQL Server的页面预期寿命是否过高?
我已经阅读了几篇有关SQL Server的页面预期寿命及其含义以及可以从中获取哪些信息的文章。在我阅读的大多数这些文章中,一个常见的健康PLE值大约为1000-2000秒。我读过,缩短到300秒左右可能意味着您的RAM可能不足。 我最近刚刚将硬件升级到64GB的RAM,从14GB升级到了64GB。在14GB内存上,我的PLE大约需要300秒,而每秒我有很多5-6个内存授权待处理。因此,那很糟糕,我增加了RAM。现在,我的PLE大大提高了,大约是5000秒,并且不再有待决的内存授予。如果我记得的话,我已经看了7000秒。这比我读过的任何东西都要高。 PLE可能是一件坏事吗?还是越高越好? 编辑:对不起,我的PLE不是7000秒,而是70,000秒!尽管目前下降到7000左右。 数据库大小约为160GB。一些表有5+百万行。 max_server_memory 设置为2147483647。

7
远程MySQL连接失败(10060)-“无法连接到domainname.com上的MySQL服务器(10060)”
我已经在VB6中开发了一个应用程序,并且正在使用在线MySQL数据库服务器来存储我的应用程序数据。 第一次尝试连接数据库服务器成功,但是在关闭应用程序并再次启动后,我得到: 无法连接到MySQL服务器(10060)” 一段时间(大约30分钟)后,我可以再次成功连接到数据库。 我已经为所有MySQL系统和全局变量(例如connection_timeout,wait_timeout等)赋予了最大值。 我已将所有权限授予MySQL用户。 我的计算机上的防火墙已关闭。 当应用程序关闭时,所有连接均正确关闭。 我问了提供在线MySQL数据库服务的技术人员,他们给了我以下三个原因: 您尝试连接的本地计算机未在服务器上列入白名单。 已超过用户的最大连接数。 当时,MySQL服务器已关闭(尽管他们说自己的服务器没有关闭)。 我该如何解决前两个原因,或者确定它们是问题的原因?还是可能还有另一个未列出的问题?

2
如何查看整个作业步骤的输出?
我们有一个运行某些PowerShell的SQL Agent作业,这会创建一个相当长的输出(除其他外,它具有robocopy输出)。 在“ SQL代理作业历史记录”中,我们仅看到此输出的前1,000个字符左右。 我们还有另一个可以看到整个输出的地方吗? 是否应该使用另一种方法来查看完整的输出?

1
CASE语句中的空值
在学习70-461考试时,我正在玩SSMS中的一些东西,以学到更多知识,并且遇到了一些麻烦。我正在尝试创建一个表以供使用,因此我不必更改/删除AdventureWorks或TSQL2012数据库中任何已创建的表。在实际创建要使用的表之前,我已经创建了一个临时表来测试我的代码,这是我用来在表中插入值的代码: DECLARE @i INT = 1 WHILE @i < 10 BEGIN INSERT INTO #TestEmployeeCountry VALUES ( SUBSTRING('ABCDEFGHIJKLMNOP', @i, 1), CASE (SELECT ABS(CHECKSUM(NEWID()))%10 +1) WHEN 1 THEN 'USA' WHEN 2 THEN 'CANADA' WHEN 3 THEN 'MEXICO' WHEN 4 THEN 'UK' WHEN 5 THEN 'FRANCE' WHEN 6 THEN 'SPAIN' WHEN 7 THEN …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.