当前位置: 首页 > 科技观察

系统库-SQLServer高手探索

时间:2023-03-20 23:48:57 科技观察

概述最近公司在SQLServer上做了一个大项目,于是对SQLServer进行了探索。master数据库是SQLServer中最重要的系统数据库。master数据库包含了SQLServer系统的所有信息,包括初始化信息、配置设置、实例相关的元数据、所有其他数据库的信息,比如数据库文件的位置等等。这就是为什么主数据库的存在和适当的功能对SQLServer的任何实例都至关重要。在本文中,我们解释了关于这个重要数据库的五个事实。解决方案通过以下几个事实,我们将阐明master的一些重要特性和功能。1.登录帐户和其他实例范围的元数据存储在SQLServer主存储库中你有没有想过登录信息存储在哪里?例如,您知道“sa”登录名及其密码存储在哪里吗?那么,登录信息存储在主数据库中。在SQL登录的情况下,它们的密码哈希也存储在主数据库中,而对于Windows登录,SQLServer依赖于Windows进行身份验证。因此,可以在master数据库中找到“sa”帐户及其散列密码。我们可以通过运行以下T-SQL代码来获取此信息:SELECTnameASLoginName,password_hashFROMsys.sql_loginsWHEREname='sa'我们可以从SQL查询中看到登录名和密码哈希:不仅是登录帐户,而且所有系统级信息都存储在主数据库中。链接服务器和端点是另外两个这样的例子。可能会出现一个问题:我们在哪里可以看到这些存储所有这些信息的表?当我们在SQLServerManagementStudio(SSMS)中展开master数据库的“Tables”时,看不到相关的表。主要的“Tables”下面没有任何表格(如果我们没有手动创建),“SystemTables”下面只有四个表格,如下图:这是因为包含系统级信息的表格是隐藏的,不可见在SSMS中。2.master库不存储系统对象系统对象存储在master库中是一个普遍的误解。尽管在SQLServer的旧版本(例如SQLServer2000)中,master数据库包含系统对象,但在新版本中,此数据不再存储在master数据库中。从SQLServer2005开始,这些对象存储在资源数据库中,这是一个隐藏的只读系统数据库。因此,主数据库不再包含系统对象,例如sys.objects中的数据。3.如果master数据库不可用,SQLServer无法启动。我们知道初始化信息,实例中其他数据库的信息和文件位置都保存在master库中。如果主库不可用,则无法启动实例。我们可以通过使主库不可用来说明此行为。为此,我们可以停止实例(强烈建议只在测试实例上执行所有这些测试),将主库文件(数据和日志或其中之一)移动到另一个位置,并尝试启动实例。要停止实例,我们打开SQLServer配置管理器并选择适当的实例,右键单击它并选择停止。在使用上面显示的属性选项的实例的启动参数中,我们可以找到主库文件的位置。因此,让我们将主数据库的数据文件复制到另一个位置。然后,我们尝试通过右键单击它并选择启动来启动该实例。该实例将无法启动,我们会收到以下错误。如果我们打开ERRORLOG文件,可以看到错误原因的描述:4.可以在master数据库中创建用户对象,但是不推荐这样做。虽然我们可以在master数据库中创建表、存储过程等用户对象,但不推荐这样做。做。但是有些情况下有些人不遵循最佳实践并出于某些目的在主数据库中创建用户对象。这通常发生在T-SQL代码中未使用“USE”语句时,然后将在主数据库中创建对象。因为当我们在SSMS中打开一个新的查询窗口时,默认的数据库就是主数据库(除非被更改)。要在master数据库中查找用户创建的对象,我们可以运行以下Transact-SQL代码。SELECT*FROMmaster.sys.objectsWHEREis_ms_shipped=0其中is_ms_shipped为0或1(位数据类型字段)并显示对象是由内部SQL组件创建的(1)还是(0)。在下面的示例中,我们可以看到我们有两个用户创建的对象。5、master数据库只允许创建一个完整的备份。建议对master数据库进行新的备份。特别是当我们创建、删除或修改新数据库、登录帐户和更改配置值时,对主数据库进行备份非常重要。此外,如果您在master数据库中创建了用户对象(上面不推荐),根据对这些用户创建的对象的更改备份master数据库是合理的。无法进行主数据库的事务日志或差异备份。如果我们尝试对主数据库执行备份操作,我们可以看到唯一可用的选项是完整备份。总结总而言之,我们探讨了有关SQLServer主数据库的五个有趣事实。具体来说,我们了解到master数据库包含SQL身份验证用户的登录名和密码哈希值。此外,我们了解到master数据库不包含系统对象(自SQLServer2005起,它们存储在资源数据库中)。如果master数据库不可用,则无法启动SQLServer实例。还显示我们是否可以在主数据库中创建用户对象。最后,我们了解到主数据库唯一可能的备份是完整备份。