这篇文章将帮助你了解一些流行的SQL Server DBA面试问题和答案。在这篇文章中,我也试图以一种非常精确的方式回答每个问题。
如果你想换工作,在提高你的技术能力的同时,你也必须准备以下问题。如今,拥有技术知识并不足以获得一份工作,相反,你应该向面试官展示你的奉献精神、积极的态度、灵活性,以及采用新变化的意愿。面试官会问很多其他非技术性的问题来评估你的素质,就像我上面提到的(奉献精神、积极的态度、灵活性和善于采用新的变化)。请确保在进入就业市场之前,也准备好他们的答案。我给出了其中一些问题的例子。
- 告诉我一些关于你自己和你在SQL Server方面的经验?
- 简要介绍一下你的数据库环境,如实例的数量、数据库、最大的数据库规模等?
- 解释一下你最大的关键OLTP数据库的备份和数据库维护策略?
- 你是如何处理重大事件的?
- 告诉我关于你所面临的最后一个问题,你是如何解决的?
- 假设有一个数据库问题,而你没有任何解决方案。你做了所有的事情来寻找解决方法来解决这个问题,但是你没有任何收获。你下一步将如何处理这种情况?
- 解释一下你的两个交付或解决方案中的任何一个,你已经得到了客户和领导的认可?
现在让我们在下面的章节中讨论一些技术问题和它们的答案。
什么是SQLOS?
SQLOS指的是SQL Server操作系统。SQLOS是SQL Server数据库引擎的最低层,它负责执行关键的内部任务,如在CPU上调度线程以执行SQL Serve事务、内存管理、死锁检测和IO完成活动。它的工作方式就像另一个用于SQL Server操作的小型操作系统。
什么是SQL Server中的幽灵清理过程?
任何从SQL Server中删除的记录实际上并没有从其物理数据页中删除,而是通过改变行头中的一个位来标记为 "待删除 "或 "幽灵"。这些记录将被一个内部进程清理,这个进程被称为幽灵清理进程。这是一个单线程的后台进程,它每隔一段时间就会自动运行,检查是否有页面被标记为鬼魂记录,如果发现有,就会从页面上物理地删除这些鬼魂记录。
SQL Server连接问题背后的潜在原因是什么?
你可能因为各种原因而无法连接到SQL Server实例,例如。
- 确保你输入了正确的连接细节,如服务器名称和端口号。
- 确保在你连接到实例的机器上,SQL Server端口是开放的
- 确保SQL Server实例正在运行
- 通过SQL Server配置管理器启用了TCP或命名管道协议
- SQL浏览器服务没有运行
重命名数据库后,数据库的物理文件名是否也会改变?
不,重命名一个数据库不会改变它的物理文件名。你需要手动执行其他步骤来改变数据库的物理文件名。
解释一下你将如何改变数据文件的物理文件名?
改变物理数据库文件名是多步骤的活动。我们不能经常进行这样的活动,只能在需要的时候进行。下面是改变数据库物理文件的高级步骤。
- 将数据库设置为脱机状态
- 到保存数据库文件的位置,按照你想要的命名规则重新命名每个文件
- 通过对每个文件分别运行ALTER DATABASE语句,用新的文件名更新系统目录
USE master
GO
ALTER DATABASE SQLSHACK MODIFY FILE (Name='SQLSHACK_Data1', FILENAME='F:\MSSQL12.MSSQLSERVER\MSSQL\DATA\SQLSHACK_Renamed.mdf')
GO
- 将数据库联机
如何获得特定数据库文件的I/O统计数据,如读数、写数、IO停顿等?
我们可以使用系统动态管理函数sys.dm_io_virtual_file_stats或系统函数fn_virtualfilestats来获得这些信息。我们需要传递数据库和文件ID的详细信息,即我们正在寻找的那个特定的数据库文件的IO统计数据。下面是它的例子。我正在提取主数据库日志文件的IO统计数据。
SELECT * FROM sys.dm_io_virtual_file_stats(db_id, file_id);
GO
SELECT * FROM fn_virtualfilestats(dbid,fileid)
什么是Always on可用性组中的自动播种?
自动播种是SQL Server 2016中推出的一个初始化辅助复制的功能。 早期我们只有一个选项来初始化辅助复制,即使用备份、复制和恢复数据库操作。我们在创建始终可用的组时使用这个功能。虽然微软提供了这个功能,但它不适合非常大的数据库,或者如果你的SQL Server实例上有多个数据库,因为这个功能是一个单线程的过程,会影响性能,并可能需要很长的时间来初始化你的辅助副本。
你能解释一下基本可用性组的限制吗?
基本可用性组取代了数据库镜像功能。它为我们提供了维护一个单一的辅助副本。以下是它与标准可用性组相比的主要限制。
- 只能创建两个副本。一个主副本,另一个是辅助副本。
- 只有1个数据库将作为可用性数据库工作,就像在数据库镜像中一样
- 次要副本不能用于读取事务、数据库备份或其他数据库维护活动
- 基本可用性组不能成为分布式可用性组的一部分
- 我们不能将基本可用性组升级为标准可用性组。我们需要放弃它们并从头开始重新配置标准可用性组。
什么是Always on可用性组中的增强型数据库故障转移?
微软在SQL Server 2016可用性组中添加了一个新功能,您可以配置参与可用性组的数据库,以便在它们无法进行写入操作时进行故障转移。 如果可用性组中的任何数据库无法进行写入操作,SQL Server的早期版本不会触发故障转移。这也被称为可用性组中的数据库水平健康检测。这是一个可选的功能,可以在创建可用性组时配置,或者你甚至可以通过对现有的可用性组运行下面的ALTER语句来配置它。
--Enable Enhanced database failover on an existing availability group
ALTER AVAILABILITY GROUP [AGNAME] SET (DB_FAILOVER = ON)
--Disable Enhanced database failover on an existing availability group
ALTER AVAILABILITY GROUP [AGNAME] SET (DB_FAILOVER = OFF)
你如何知道你的可用性组是否配置或启用了增强型数据库故障转移?
我们可以通过访问动态管理视图sys.availability_groups来获得这些信息。这个DMV有一个名为DB_Failover的列,如果这个列的值是0,意味着增强型数据库故障转移没有被启用,如果这个列的值是1,那么这个可用性组就启用了增强型数据库故障转移。
我们可以在可用性组的辅助副本上运行DBCC CHECKDB吗?
是的,我们可以在辅助副本上执行CHEKDB以检查数据库的完整性。这将确保仅在辅助副本上托管的数据库的完整性。这种执行不会保证主副本上托管的数据库的完整性,因为主副本使用不同的存储系统来托管其数据库。
我们可以在可用性组中创建二级数据库的数据库快照吗?
是的,如果主数据库或二级数据库的角色状态是PRIMARY或SECONDARY,可以创建数据库快照。如果角色状态是RESOLVING,则不能创建数据库快照。
您已经在主副本上创建了一个数据库快照。如果主副本失败到辅助副本上,数据库快照会发生什么?
数据库快照将不会有任何影响。它们将存在于之前的主副本上,你可以根据你的要求使用它们。
我们能不能在不运行DBCC CHECKDB的实际执行的情况下,得到tempdb数据库中需要多少空间来运行它?
DBCC CHECKDB大量使用tempdb数据库来临时存储数据并执行完整性检查所需的活动,如读取每个数据页并确保没有损坏。我们可以使用DBCC CHECKDB WITH ESTIMATEONLY语句,在其实际执行前预测tempdb空间的估计量。
我们可以在SQL Server日志运输配置中把二级数据库的恢复模式从NORECOVERY改为STANDBY吗?
是的,我们可以将二级数据库的还原模式从还原改为待机,以便将其用于只读操作。我们将使用一个系统存储过程sp_change_log_shipping_secondary_database来做这个改变。这个存储过程在运行时将接受参数**@restore_mode** 的输入值1。这个参数有两个值,使用1可以用STANDBY恢复日志,使用0可以用NORECOVERY恢复日志。
在Merge Replication中,队列阅读代理的功能是什么?
Merge Replication不使用队列阅读器代理,所以在Merge复制中没有队列阅读器代理的功能。
我们能否将SQL Server数据复制到其他RDBMS系统,如Oracle?
是的,SQL Server复制可以用来将数据从SQL Server发布到Oracle或者Oracle发布到SQL Server。
我们能否在复制中阻止复制特定文章的DELETE操作?
可以阻止DELETE语句在SQL Server复制中复制任何文章。我们可以通过访问确定的文章的属性窗口来完成,并选择不在那里复制删除语句。
如果SQL Server代理工作被停止并且不运行,对日志运输会有什么影响?
日志运输依靠代理工作来完成其所有活动。如果SQL Server Agent停止了,日志运输将不执行备份、复制和恢复这些活动,如果代理将停止较长的时间,就会变得不同步。
请分享这篇文章并在评论区告诉我们你的反馈。