数据库管理员

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

1
当您将表A切换到表B时,索引数据也会被切换吗?
我目前有一个相当大的表(5-7百万行)。该表由一个过程定期重建,该过程将数据构建到登台表中,然后使用该ALTER TABLE .. SWITCH TO ..语句将数据切换到生产表中。 例: BEGIN TRAN; -- Rebuild indexes ALTER INDEX IX_NC_GroupEvent_staging_GroupName on [dbo].[GroupEvent_staging] REBUILD; ALTER INDEX IX_NC_GroupEvent_staging_Created ON [dbo].[GroupEvent_staging] REBUILD; -- Empty production table TRUNCATE TABLE [dbo].[GroupEvent]; -- Switch data from staging-table into production table ALTER TABLE [dbo].[GroupEvent_staging] SWITCH TO [dbo].[GroupEvent] COMMIT; 执行此操作时,索引(或索引数据,如果您愿意)的当前状态是否也被切换?我要问的原因有两个: 1)为了执行一条SWITCH TO语句,要求源表和目标表都必须包含相同的索引。这使我相信索引数据也可能会切换,但是我不知道如何验证这一点。 2)以这种方式构建工作台的主要好处是避免在使用过程中对生产工作台进行过多的工作。自然,如果我能够在登台表上重建索引并将重建的索引与表一起切换到生产索引,那会让我感到非常高兴。

2
错误:“无法删除该证书,因为一个或多个实体使用该证书进行了签名或加密。”
我有一个要从数据库中删除的证书。 如果我发出命令 DROP CERTIFICATE <FooCert> 我得到错误 The certificate cannot be dropped because one or more entities are either signed or encrypted using it 根据Jason Strate的说法,我应该能够找出证书所签名的内容。 以下查询返回0行: SELECT OBJECT_SCHEMA_NAME(co.major_id) + '.' + OBJECT_NAME(co.major_id) FROM sys.certificates c INNER JOIN sys.crypt_properties co ON c.thumbprint = co.thumbprint WHERE co.crypt_type_desc = 'SIGNATURE BY CERTIFICATE' AND …

2
升级到2016年后,SQL Server代理无法连接到实例
在具有SQL Server 2014 Enterprise的群集Windows 2012 R2服务器上。 刚刚将实例从2014 SP1 CU4升级到2016 RTM,现在在尝试启动SQL Server代理时收到此错误。 SQL服务器代理日志 2016-06-06 11:53:58 - ? [100] Microsoft SQLServerAgent version 13.0.1601.5 (X64 unicode retail build) : Process ID 10884 2016-06-06 11:53:58 - ? [495] The SQL Server Agent startup service account is DOMAIN\USERNAME. 2016-06-06 11:54:28 - ! [150] SQL Server …

2
扩展事件与SQL审核-性能影响
我想在数据库上设置一个审计跟踪类型的系统,以监视UPDATE/INSERT活动非常活跃的特定表上的语句。我面前有两个选择:使用SQL Server内置的Audit系统或使用扩展事件。 由于SQL Server审核在内部使用扩展事件,因此我假设直接使用审核而不是扩展事件会产生某种开销。 我有什么办法可以做一些测试来分析哪个系统对服务器的影响更大?如果我知道创建任何XE会话时实际发生的情况,它将有助于我分析对服务器的影响。 我们考虑了触发器,但由于开销而忽略了该选项。但这只是基于Internet上的信息而决定的。

2
多个存储过程中的相同代码
我最近加入一家公司,我只是注意到许多存储过程在整个过程中都重复了相同的代码部分。我注意到了,因为我的任务是在每个发生的SP中更改该代码的一小部分:) 这是相当庞大的代码块,大约30行。该代码是插入语句的一部分,它基本上将4个表连接在一起,而WHERE/AND条件实际上并没有真正从SP变为SP。它看起来类似于以下内容: ... ... FROM <TableOne> INNER JOIN <TableTwo> ON ... AND ..... AND ..... LEFT JOIN <TableThree> ON ... AND ..... AND ..... WHERE ..... AND ..... AND ..... AND MedicalPlanCode IN ('abc', 'def', 'ghi') 从SP更改为SP的唯一部分是值(“ abc”,“ def”,“ ghi”) 这些值的数量也可以不同,因此某些SP的值为2,其他SP的值为5,等等。 我想到的所有内容都将那部分代码更改为动态SQL,但不确定是否值得。但是,我里面的程序员讨厌这种情况。 我应该尝试实现某种形式的代码重用吗?有投资回报率吗?我有什么选择?我不得不经历大约100个存储过程,这花了大约一个小时。 100个SP分布在20个左右的不同数据库中。我确实具有创建视图的权限。

2
用主键创建一个“ INTO”表
也许对于这个社区来说,我的问题很容易,但是对我(一个简单的Java程序员)来说,这是一个大问题。 我有一个越来越多的数据的大数据库。因此,外部数据库管理员创建了一个作业,该作业在临时表中向我显示所需的数据。但是他创建的表没有主键,当我的java项目去读取该表时,出现错误。 我无法读取此表,因为主键不存在。 我可以在不更改此复杂过程结构的情况下在过程中插入创建自动增量主键的可能性吗? 这是存储过程代码的开头: USE [MYDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER Procedure [dbo].[spSchedula_Scadenzario] as begin drop table MYDB.dbo.tmpTable select aa.* into MYDB.dbo.tmpTable from (...) 提前致谢

2
是否有T-SQL的标点符号等效项,例如[0-9]代表数字,[az]代表字母?
在T-SQL中是否存在[0-9]和[a-z]模式的等效项,可让我从包含标点的列中提取值? 例如: Create Table #Test ( Value VarChar(10) ) Insert Into #Test Values ('123a'), ('456b'), ('12ABC'),('AB!23'),('C?D789') Select * From #Test Where Value like '[0-9][0-9][0-9][a-z]' 这将返回值,其中前3个字符是介于0到9之间的数字,而最后一个字符将是介于a和z之间的字母,因此将返回123a,456b而不会返回12ABC。 我想知道标点符号是否等同于[0-9]数字和[a-z]字母,以便返回AB!23并返回C?D789? 如果我可以使用正则表达式,则可以使用该表达式^[a-zA-Z0-9]*$来匹配字符串中的字母数字字符。 Where Value like '^[a-zA-Z0-9]*$' 是否有等效的SQL? 我知道可以在RegEx中完成这种操作,但在T-SQL中需要它,因为我无法将任何自定义程序集加载到此服务器上,因此不能使用正则表达式。 实际列为varchar(200)。排序规则为Latin1_General_CI_AS。我正在使用SQL Server 2012 Standard Edition。

1
CMS服务器列表中的区分大小写排序
我必须相信这是有原因的,但是对于我的一生,我无法弄清楚。看起来任何中央管理服务器中服务器名称的排序都是大小写敏感的,而不管充当CMS本身的服务器的排序规则。 随附的示例是在我的本地计算机上托管的CMS的示例,该服务器使用SQL_Latin1_General_CP1_CI_AS的服务器排序规则进行配置。CI表示不区分大小写。从包含CMS对象的系统表中选择时,将返回正确的顺序,但是,如您在此屏幕快照中所见,在UI中列出服务器的方式很明显,该顺序以区分大小写的方式处理。 由于它似乎与服务器级别无关,因此我认为它与客户端工具有关,但是我在工具中没有地方可以确定会影响此规则的排序规则级别(甚至区分大小写的设置)。 显然,这个问题没有什么关键性的,但是如果有人确实知道如何强制UI不区分大小写,那么我将不胜感激,因为我喜欢Camel Case我的服务器名称,该名称已被取消订购。

1
我应该禁用超线程
背景技术最近,我一直在研究一些相当长的CXPacket等待时间,这使我不得不使用SQL Sentry来密切监视处理器的活动。 结果,我注意到的一件事是我们在上下文切换中有大量的峰值。下面是一个5分钟的示例,但是这种模式在一天中非常普遍。 如您所见,它的峰值很规律。现在,我对此的理解使我相信这将是CPU压力的结果。但是在这段时间里,勉强能超过60%。 经过一些研究,这使我相信这是超线程的结果。我知道我之前已经读过超线程的一些危险。但是那是很久以前写的。 使长话短说。超线程是否可能是上下文切换中这种尖峰的罪魁祸首?上下文切换是否有可能对我的并行查询产生负面影响?我应该在我的环境中禁用超线程吗? 更新尽管此特定情况正在我的环境中发生,但其核心问题是更普遍的。高级别的上下文切换对并行查询有多大影响?超线程会导致这种问题吗? 最终,我在互联网上发现的大多数内容最终都表明超线程和SQL Server不是好朋友,但是大多数情况下,这些信息都是过时的。 我的系统有很多配置问题,因此在这里我将解决这些问题,以便将它们排除在外。我们在操作系统和生物级别上都具有性能的电源设置。我们的Maxdop设置为8,并行性的成本阈值为25。我们有32个逻辑内核和16个物理内核。同样,在大多数情况下,这也是数据仓库的负载情况。

2
如何正确地从单个用户中删除“ REQUIRE SSL”?
通过执行以下操作,我成功地将REQUIRE SSL授予了单个用户: mysql -u"${targetMySqlUser}" -p"${targetMySqlPass}" -e "GRANT USAGE ON dbname.* TO 'dbusername'@'%' REQUIRE SSL;" 但无法使用撤消功能从用户删除或撤消此标志。我想即时通讯与语法。是否有使用“ revoke”命令将其删除而又不撤消整个权限的正确方法? MySQL 5.5手册,该站点和互连网并没有帮助我找到适当的对策。 该SQL语句将起作用。 UPDATE mysql.user SET ssl_type = '' WHERE ssl_type = 'any' ; FLUSH PRIVILEGES; 但是我相信GRANT REQUIRE SSL我必须在哪里REVOKE REQUIRE SSL,不是吗?

3
意外的CASE评估逻辑
我始终理解,该CASE声明基于“短路”原理,因为如果先前的步骤被评估为真,则不会进行后续步骤的评估。(此答案是SQL Server CASE语句评估所有条件还是在第一个TRUE条件下退出?是否相关,但似乎没有涵盖此情况,并且与SQL Server有关)。 在下面的示例中,我希望MAX(amount)根据开始日期和支付日期之间有多少个月的时间来计算不同的月份范围。 (这显然是一个构造好的示例,但是在我看到该问题的实际代码中,该逻辑具有有效的业务推理)。 如果开始日期和付款日期之间的间隔少于5个月,则将使用表达式1,否则将使用表达式2。 这将导致错误“ ORA-01428:参数'-1'超出范围”,因为1条记录的数据条件无效,导致ORDER BY的BETWEEN子句开头的值为负值。 查询1 SELECT ref_no, CASE WHEN MONTHS_BETWEEN(paid_date, start_date) < 5 THEN -- Expression 1 MAX(amount) OVER (PARTITION BY ref_no ORDER BY paid_date ASC ROWS BETWEEN MONTHS_BETWEEN(paid_date, start_date) PRECEDING AND CURRENT ROW) ELSE -- Expression 2 MAX(amount) OVER (PARTITION BY ref_no ORDER …
8 oracle 

3
在InnoDB表中,将主键作为复合二级索引的最后一列有什么作用?
假设我有一对一的关系(person_id, pet_id)。我有一个表在哪里pet_id是主键。 我了解InnoDB二级索引实际上是一个B树,其中的值是该行的相应主键值。 现在,假设一个人可以养成千上万只宠物,而我经常想要一个人的宠物按顺序排列pet_id。那么,如果在第二个索引记录的排序会的问题(person_id, pet_id)或只是person_id用pet_id的该person_id是无序。猜后来。 因此,如果person_id是非唯一的,记录是按(person_id, pet_id)还是JUST 物理排序的pet_id? 谢谢


3
一个用户对sys.schemas和sys.synonyms的查询运行非常慢
方案:SQL Server 2014(v12.0.4100.1) .NET服务运行以下查询: SELECT name, base_object_name FROM sys.synonyms WHERE schema_id IN (SELECT schema_id FROM sys.schemas WHERE name = N'XXXX') ORDER BY name ...返回约6500行,但通常会在3分钟后超时。的XXXX上面是不 “DBO”。 如果我以UserA身份在SSMS中运行此查询,则查询将在不到一秒钟的时间内返回。 当以UserB身份运行(这是.NET服务的连接方式)时,查询需要3到6 分钟的时间,并且整个时间的CPU%占25%(4核)。 UserA是sysadmin角色中的域登录名。 UserB是具有以下内容的SQL登录名: EXEC sp_addrolemember N'db_datareader', N'UserB' EXEC sp_addrolemember N'db_datawriter', N'UserB' EXEC sp_addrolemember N'db_ddladmin', N'UserB' GRANT EXECUTE TO [UserB] GRANT CREATE SCHEMA TO …

1
在这种情况下,表变量如何提高查询性能?
对于这种特定情况,我将在下面尝试说明,使用表变量比不使用表变量要好。 我想知道为什么,如果可能的话,摆脱表变量。 这是使用表变量的查询: USE [BISource_UAT] GO set statistics io on SET STATISTICS TIME ON SET NOCOUNT ON; DECLARE @OrderStartDate DATETIME = '15-feb-2015' DECLARE @OrderEndDate DATETIME = '28-feb-2016' DECLARE @tmp TABLE ( strBxOrderNo VARCHAR(20) ,sintReturnId INT ) INSERT INTO @tmp SELECT strBxOrderNo ,sintReturnId FROM TABLEBACKUPS.dbo.tblBReturnHistory rh WHERE rh.sintReturnStatusId in ( 3 …

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.