数据库管理员

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

5
有没有MySQL基准测试工具?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 我很久以前就听说过,有这个工具可以帮助您tweek mysql设置以获得更好的性能,但是我无法找到它。我知道我可以使用ab for apache来模拟高流量,这会生成缓慢的日志。但是,如果崩溃(已经发生并且处于生产模式),我不知道为什么崩溃以及是否可以从配置中删除它。

1
使用函数DECRYPTBYPASSPHRASE时,我怎么知道SQL Server用来解密加密数据的哈希算法?
我的问题与以下两个实例的实验有关: SQL Server 2017 Express实例(Microsoft SQL Server 2017(RTM-CU16)) SQL Server 2014 Express实例(Microsoft SQL Server 2014(SP2-CU18)) 我使用函数ENCRYPTBYPASSPHRASE加密文本,并将结果用作DECRYPTBYPASSPHRASE的@ciphertext。我的测试结果如下: 根据此Microsoft修复程序, [...] SQL Server 2017使用SHA2哈希算法来哈希密码。SQL Server 2016和早期版本的SQL Server使用不再被视为安全的SHA1算法。 但是,如果在函数DECRYPTBYPASSPHRASE上没有与该参数相关的参数,它怎么知道用于加密数据的算法是什么?它是加密数据的一部分吗? 根据我的测试结果,我猜想SQL Server总是使用实例上可用的较新版本的算法来加密数据,但是尝试所有算法来解密数据,直到找到适合的算法或找不到对应的算法时返回NULL。 。不过,这只是一个猜测,因为我找不到任何方法来检查SQL Server用于解密加密数据的哈希算法。

1
如果索引中包含VARCHAR(MAX)列,则整个值是否始终存储在索引页中?
我是出于好奇而问这个问题,受到这个问题的启发。 我们知道,VARCHAR(MAX)长于8000字节的值不会存储在行中,而是存储在单独的LOB页中。随后使用该值检索一行需要两个或多个逻辑IO操作(从本质上讲,比理论上需要多一个)。 如链接的问题所示VARCHAR(MAX),我们可以将列INCLUDEd 添加到唯一索引。如果此列的值长度超过8000个字节,这些值是否仍将“内联”存储在索引叶页中,还是将它们移到LOB页中?

5
如何限制一个人一次可以运行的SQL存储过程?
我有一个存储过程,基本上从一个表中选择值,然后将它们插入到另一个表中,这是一种归档。我想避免多个人同时执行此操作。 在运行此过程时,我不希望其他任何人都可以启动该过程,但是我不希望序列化,而在完成后,其他人可以运行该过程。 我想要的是给其他尝试启动该程序的人,同时我正在运行该程序。 我已经尝试过使用sp_getapplock,但是我无法完全阻止该人运行该过程。 我还尝试使用sys.dm_exec_requests查找该过程并阻止该过程,尽管这确实可行,但我认为它不是最佳选择,因为在某些服务器上我没有运行sys.dm_exec_sql_text(sql_handle)的权限。 我这样做的最佳方法是什么?

1
备份检测到损坏,但是CHECKDB没有
我有一个数据库,在其中运行备份命令 BACKUP DATABASE [MyDatabase] TO DISK = 'G:\Backup\MyDatabase_01_01_2018.bak' WITH NOFORMAT, NOSKIP, COMPRESSION, INIT, BUFFERCOUNT = 100 我收到错误消息 消息3043,级别16,状态1,第8行 BACKUP'MyDatabase'在文件'F:\ Data \ MyDatabase_1.ndf'中的页面(1:745345)中检测到错误。 消息3013,级别16,状态1,第8行 BACKUP DATABASE异常终止。 我运行了一个完整的CHECKDB,但恢复正常。我确实注意到页面验证选项已设置为NONE(不是我的工作),所以我将其更改为CHECKSUM并重建了数据库中的所有索引,使其可以写入所有页面并生成校验和。此后,备份仍然失败,并且checkdb仍显示为干净(因此无更改)。 DBCC CHECKDB('MyDatabase') WITH NO_INFOMSGS, ALL_ERRORMSGS, DATA_PURITY, EXTENDED_LOGICAL_CHECKS; 从SQL日志中: 由xxx执行的具有all_errormsgs,no_infomsgs和data_purity的DBCC CHECKDB(MyDatabase)发现0个错误,并修复了0个错误。经过时间:0小时21分46秒。内部数据库快照的拆分点LSN = 000ab776:0000112f:0001和第一个LSN = 000ab776:0000112d:0001。 我运行了DBCC PAGE,但是它出错了(起初似乎都没有返回正确的页面)。我可以使用打印选项2运行它,但它会返回,但说实话我不知道我在那儿寻找什么。 DBCC PAGE ('MyDatabase',1,745345,3) 页面:(3:513793) 缓冲: BUF @ 0x00000003811F8280 …

4
MS-SQL上是否有任何(隐藏的)内置函数来取消引用对象名称?
有时,我在某些数据库中存储对象名称(标识符),例如在某些参数表中。因为我使用'='或'LIKE'比较运算符从这些表中选择记录,所以我必须注意始终使用括号将这些名称存储起来。 IF EXISTS (SELECT 1 FROM MYTABLE WHERE OBJ_NAME = '[TABLE_NAME]'; 要么 IF EXISTS (SELECT 1 FROM MYTABLE WHERE OBJ_NAME = 'TABLE_NAME'; 但是,MS-SQL具有一些函数,您可以在其中使用带括号或不带括号的对象名称,例如OBJECT_ID()函数。我在dbfiddle.uk上建立了一个最小的示例。 CREATE TABLE TEST ( ID INT IDENTITY(1,1) PRIMARY KEY, OBJECT sysname NOT NULL ); GO INSERT INTO TEST VALUES ('[obj1]'),('obj2'),('obj3'),('[obj4]'); GO 现在,我可以使用OBJECT_ID()来检查表TEST是否以这种方式存在: IF OBJECT_ID('TEST') IS NOT NULL …
12 sql-server  t-sql 

1
查询存储强制计划功能不起作用
查询存储强制计划功能似乎没有执行该计划。 我知道查询存储-强制并不总是意味着强制;但是,我的计划可能不会发生重大变化,但是查询优化器可能会继续选择错误的索引,循环选择等。 基本上:它不符合我的强制计划选择。我强迫了许多计划,但没用。 当我查看时,有0个失败计数或原因sys.query_store_plan force_failure_count。 扩展事件query_store_plan_forcing_failed不会产生任何结果。0活动。 例如,一个计划在20.09开始实施。只有1次编译碰巧使用了强制计划。 这些计划大相径庭,一个计划与INDEX 1一起使用哈希匹配联接,另一个计划与INDEX 2一起使用循环联接。 版本:Microsoft SQL Server 2016(SP1-GDR)(KB3210089)-13.0.4202.2(X64) 我在这里想念什么?

4
是否真的有可能无法保证针对此特定的冗余派生表的顺序?
在与Lukas Eder的Twitter交谈中,我偶然发现了这个问题。 尽管正确的行为是将ORDER BY子句应用于最外层查询,因为在这里,我们没有在最外层查询中使用DISTINCT,GROUP BY,JOIN或任何其他WHERE子句,因此RDBMS为什么不通过传入的数据是否由内部查询排序? SELECT * FROM ( SELECT * FROM table ORDER BY time DESC ) AS t 至少在PostgreSQL上运行此示例时,对于内部查询和此派生表示例,您将获得相同的执行计划,以及相同的结果集。 因此,我认为规划器将只丢弃最外面的查询,因为它是多余的,或者只是传递内部表的结果。 有人认为情况可能并非如此吗?



3
有没有办法对WHERE子句中的变量进行空检查仅发生一次?
我对一个看起来像这样的大表进行查询: declare @myIdParam int = 1 select * from myTable where (@myIdParam is null or myTable.Id = @myIdParam) 在where子句中有几个类似的条件,并且也有很多联接,但这是一个摘要。 实际上,如果@myIdParam为null,则我们不想使用此参数来限制结果。 我不是数据库专家,但是从我的测试看来,此NULL检查是针对每条记录执行的,并且没有以任何方式进行优化。 如果我删除了空检查并假定参数不为空,则查询将立即返回。否则,最多需要十秒钟。 有没有一种方法可以对此进行优化,以便在运行时仅进行一次检查?
12 sql-server  null 

3
oracle预制虚拟机的默认用户名和密码是什么?
我从http://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html下载了DeveloperDaysVM2016-06-02_13.ova,并将其成功加载到Virtual Box中。 我以“ oracle”用户身份登录,可以看到桌面。 在虚拟机中,我打开Firefox并导航至: http:// localhost:8080 / ords / hrrest / employees /,并成功接收JSON格式的员工列表。因此,我知道数据库已启动并正在运行。 我唯一的问题是我无法登录数据库。 我试过了: [oracle@vbgeneric oracle]$ sqlplus oracle SQL*Plus: Release 12.1.0.2.0 Production on Tue Jul 5 17:32:22 2016 Copyright (c) 1982, 2014, Oracle. All rights reserved. Enter password: oracle ERROR: ORA-01017: invalid username/password; logon denied Enter user-name: 我的ORACLE_SID …

1
如何移动PostgreSQL表空间?
有没有一种方法,以物理移动的PostgreSQL 9.3表/old/dir来/new/dir?我只想mv目录,然后告诉PostgreSQL表空间现在位于/new/dir。看起来ALTER TABLESPACE只能让您重命名。 我想避免创建新的表空间并将数据库移到其中。我认为这将是一个缓慢的复制过程,需要大量时间和磁盘空间。我也想避免链接/old/dir到/new/dir。

2
存储过程中的事务
我需要在单个事务中执行UPDATE和INSERT。该代码本身可以正常工作,但是我希望能够轻松地调用它并传递所需的参数。当我尝试将此事务嵌套在存储过程中时,我遇到许多语法错误。 如何封装以下代码,以便可以轻松调用它? BEGIN TRANSACTION AssignUserToTicket GO DECLARE @updateAuthor varchar(100) DECLARE @assignedUser varchar(100) DECLARE @ticketID bigint SET @updateAuthor = 'user1' SET @assignedUser = 'user2' SET @ticketID = 123456 UPDATE tblTicket SET ticketAssignedUserSamAccountName = @assignedUser WHERE (ticketID = @ticketID); INSERT INTO [dbo].[tblTicketUpdate] ([ticketID] ,[updateDetail] ,[updateDateTime] ,[userSamAccountName] ,[activity]) VALUES (@ticketID, 'Assigned ticket to …

3
可用性组数据库卡在“不同步/恢复挂起”模式下
在SQL Server 2014 SP1(12.0.4422.0)实例中升级存储时,我们遇到了以下问题:重新启动SQL Server后,其中两个数据库无法在辅助数据库上启动。在我们安装新的(更大)SSD并将数据文件复制到新卷中时,服务器已脱机几个小时。当我们重新启动SQL Server时,除两个数据库外,所有其他数据库再次开始同步。另外两个在SSMS中显示为“ 未同步/正在等待恢复”。 之前有类似的“ 不同步/恢复中”问题,我检查了“可用性组”->“可用性数据库”部分下的状态,但是它们显示为红色X: 甚至试图暂停数据移动都会产生错误消息: 无法挂起数据库“ StackExchange.Bycycles.Meta”中的数据移动,该数据库位于可用性组“ SENetwork_AG”中的可用性副本“ ny-sql03”上。(Microsoft.SqlServer.Smo) 附加信息:执行Transact-SQL语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo) 由于文件不可访问或内存或磁盘空间不足,无法打开数据库“ StackExchange.Bycycles.Meta”。有关详细信息,请参见SQL Server错误日志。(Microsoft Sql Server,错误:945) 我检查了文件是否存在,没有任何权限问题。我还检查了管理下SSMS中的SQL Server日志,但是没有看到有关挂起恢复或两个数据库有任何问题的信息。 在寻求帮助的过程中,我找到了两篇不同的文章,说需要还原数据库。 当数据库卡在恢复挂起中时,是否有任何方法可以在辅助数据库上恢复数据复制?

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.