常用SQL查询操作
在SQL Server数据库管理中,作为DBA需要经常进行数据库的日常检查与维护,主要是针对数据库性能、安全及数据完整性等各个方面进行监控和维护。本文将会介绍一些常见的SQL查询语句,以便于DBA在日常工作中可以更加有效的进行数据库管理。
系统相关查询
以下是一些常用的系统查询语句,用于查询数据库内部的系统信息。
查询当前数据库名称:
SELECT DB_NAME() as '当前数据库名称'
查询SQL Server数据库版本和当前登录用户:
SELECT @@VERSION as 'SQL Server版本', SUSER_SNAME() as '当前用户'
查询所有数据库的名称和创建时间:
SELECT Name as '数据库名称', Create_Date as '创建时间'
FROM sys.databases
存储过程和函数相关查询
存储过程和函数是SQL Server中非常常用的工具,以下是一些查询语句,用于查询存储过程和函数信息。
查询数据库中所有存储过程的名称:
SELECT name as '存储过程名称'
FROM sys.procedures
查询存储过程的定义:
SELECT OBJECT_DEFINITION(OBJECT_ID('存储过程名称')) as '存储过程定义'
查询数据库中的所有函数:
SELECT name as '函数名称'
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%'
表相关查询
以下是一些查询语句,用于查询数据库内部的表信息。
查询数据库中所有表的名称:
SELECT name as '表名称'
FROM sys.objects
WHERE type_desc = 'USER_TABLE'
查询指定表的所有字段信息:
SELECT COLUMN_NAME as '列名称', DATA_TYPE as '数据类型', CHARACTER_MAXIMUM_LENGTH as '最大长度'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '表名称'
索引相关查询
以下是一些查询语句,用于查询数据库内部的索引信息。
查询指定表的所有索引信息:
SELECT name as '索引名称', type_desc as '索引类型', create_date as '创建时间'
FROM sys.indexes
WHERE object_id = OBJECT_ID('表名')
查询索引的详细信息:
SELECT OBJECT_NAME(OBJECT_ID) as '表名', name as '索引名称',
INDEXPROPERTY(OBJECT_ID,'索引名称','IndexDepth') as '树形深度',
INDEXPROPERTY(OBJECT_ID,'索引名称','IndexFillFactor') as '填充因子',
INDEXPROPERTY(OBJECT_ID,'索引名称','IndexType') as '索引类型',
INDEXPROPERTY(OBJECT_ID,'索引名称','IsUnique') as '是否唯一'
FROM sys.indexes
WHERE OBJECT_ID = OBJECT_ID('表名')
日志相关查询
以下是一些查询语句,用于查询数据库的日志信息。
查询最近一次日志备份的时间:
SELECT TOP 1 backup_finish_date as '日志备份时间'
FROM msdb..backupset
WHERE type = 'L'
ORDER BY backup_finish_date DESC
查询数据库中最近一次的活动事务:
SELECT name as '事务名称', begin_time as '开始时间'
FROM sys.dm_tran_active_transactions
WHERE database_id = DB_ID('数据库名称')
安全相关查询
以下是一些查询语句,用于查询数据库的安全信息。
查询所有用户:
SELECT name as '登录名'
FROM sys.server_principals
WHERE type = 'S'
查询指定用户所属的角色和权限:
SELECT ISNULL(rp.name,'public') as '角色名称',
dp.permission_name as '权限名称'
FROM sys.database_principals AS dp
LEFT OUTER JOIN sys.database_role_members AS drm ON dp.principal_id = drm.member_principal_id
LEFT OUTER JOIN sys.database_principals AS rp ON drm.role_principal_id = rp.principal_id
LEFT OUTER JOIN sys.database_permissions AS p ON dp.principal_id = p.grantee_principal_id
WHERE dp.name = '登录名'
总结
本文介绍了常规SQL Server DBA在日常工作中的常用查询语句,可以方便DBA进行数据库的监控和维护,提高工作效率。