SQLSERVER数据库常用语句

文章目录

授权执行计划

sql 复制代码
grant showplan to DEV  -- DEV为数据库用户
grant showplan to DEV_QUERY  --DEV_QUERY为数据库用户

查看是否有备份

sql 复制代码
select database_name,recovery_model,name from msdb.dbo.backupset

查询表和视图的创建时间

sql 复制代码
SELECT name,create_date,type FROM sys.objects where type IN('U','VIEW')  AND  LEFT(name,1) IN('X','Y') AND create_date>='2025-01-01' order by create_date desc 

查询备份设置状态

sql 复制代码
SELECT name,
 
       recovery_model_desc,
 
       log_reuse_wait_desc -- 关键字段!如果显示LOG_BACKUP,则证明缺少日志备份
 
FROM sys.databases
 
WHERE name = 'x3v12'; 

查询备份记录 msdb

sql 复制代码
SELECT database_name,
 
       [type], -- D=完整, I=差异, L=日志(这是我们找的)
 
       CASE [type]
 
           WHEN 'D' THEN 'Full Backup'
 
           WHEN 'I' THEN 'Differential Backup'
 
           WHEN 'L' THEN 'Transaction Log Backup' -- 如果找不到L,就是问题所在
 
           ELSE [type]
 
       END AS BackupType,
 
       backup_start_date,
 
       backup_finish_date
 
FROM dbo.backupset
 
WHERE database_name = 'x3v12' -- 请替换为您的数据库名
 
ORDER BY backup_start_date DESC;

查看是否开启快照

sql 复制代码
select name,user_access,user_access_desc,snapshot_isolation_state,snapshot_isolation_state_desc,is_read_committed_snapshot_on from sys.databases

查看所有数据库的快照

sql 复制代码
SELECT 
    ds.name AS SnapshotName, 
    ds.source_database_id, 
    db.name AS SourceDatabaseName, 
    ds.create_date
FROM 
    sys.databases AS ds
JOIN 
    sys.databases AS db ON ds.source_database_id = db.database_id
WHERE 
    ds.state_desc = 'ONLINE' AND ds.source_database_id IS NOT NULL;

查看连接池状态

sql 复制代码
SELECT * FROM sys.dm_exec_connections order by connect_time desc;

查询数据库端口号

sql 复制代码
exec sys.sp_readerrorlog 0, 1, 'listening'

更改成单用户模式

sql 复制代码
ALTER DATABASE OA SET SINGLE_USER WITH ROLLBACK IMMEDIATE

更改成多用户模式

sql 复制代码
ALTER DATABASE OA SET MULTI_USER

查询已有视图脚本

sql 复制代码
select b.name as [视图名称],a.text as [视图脚本] 
from syscomments a 
inner join sysobjects b on a.id=b.id  where b.type='V' and b.name='YFORM'

查询语句执行花费时间

sql 复制代码
SELECT TOP 100
(total_elapsed_time / execution_count)/1000 N'平均时间ms' ,total_elapsed_time/1000 N'总花费时间ms' ,
total_worker_time/1000 N'所用的CPU总时间ms' ,
total_physical_reads N'物理读取总次数' ,
total_logical_reads/execution_count N'每次逻辑读次数' ,
total_logical_reads N'逻辑读取总次数' ,
total_logical_writes N'逻辑写入总次数' ,
execution_count N'执行次数' ,
SUBSTRING(st.text, (qs.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) + 1) N'执行语句' ,
creation_time N'语句编译时间' ,
last_execution_time N'上次执行时间' 
FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st

ORDER BY total_elapsed_time / execution_count DESC;

当前数据库,数据文件占用与剩余空间

sql 复制代码
SELECT DB_NAME() AS DbName,
name AS FileName,
size/128.0 AS CurrentSizeMB,
size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0 AS FreeSpaceMB
FROM sys.database_files; 

表空间使用情况

sql 复制代码
SELECT 
    t.NAME AS 'TableName',
    s.Name AS 'SchemaName',
    p.rows AS 'RowCount',
    SUM(a.total_pages) * 8 AS 'TotalSpaceKB', 
    SUM(a.used_pages) * 8 AS 'UsedSpaceKB', 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS 'UnusedSpaceKB'
FROM 
    sys.tables t
INNER JOIN 
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
WHERE 
    t.NAME NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 AND s.name='DEV'
GROUP BY 
    t.Name, s.Name, p.Rows 
ORDER BY 
    t.Name

查看锁表

sql 复制代码
select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   
from   sys.dm_tran_locks where resource_type='OBJECT'

杀死锁表进程

sql 复制代码
declare @spid int
Set @spid = 245 --锁表进程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid as varchar)
exec(@sql)
--或
kill 283 -- 283为进程ID

查询表数据字典

sql 复制代码
SELECT  (case when a.colorder=1 then d.name else null end) 表名, a.colorder 字段序号,a.name 字段名,
LEFT (a.name,CASE WHEN CHARINDEX( '_',a.name)=0 THEN LEN(a.name) else CHARINDEX( '_',a.name)-1 end) AA, j.TEXTE_0 字段描述,
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识, 
(case when (SELECT count(*) FROM sysobjects  WHERE (name in (
    SELECT name FROM sysindexes  WHERE (id = a.id) AND (indid in  
    (SELECT indid FROM sysindexkeys  WHERE (id = a.id) AND (colid in  
        (SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))))))  
AND (xtype = 'PK'))>0 then '√' else '' end) 主键,b.name 类型,a.length 占用字节数,  
COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度,  
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数,(case when a.isnullable=1 then '√'else '' end) 允许空,  
isnull(e.text,'') 默认值,isnull(g.[value], ' ') AS [说明]
FROM  syscolumns a 
left join systypes b on a.xtype=b.xusertype  
inner join (select a.name,a.id,a.xtype,a.uid from sysobjects a
                inner join (
                SELECT name,MAX( uid) uid from sysobjects  --WHERE name='ITMMASTER'
                GROUP BY name) b on a.name=b.name and a.uid=b.uid) d 
                on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' 
left join syscomments e on a.cdefault=e.id  
left join sys.extended_properties g on a.id=g.major_id AND a.colid=g.minor_id
left join sys.extended_properties f on d.id=f.class and f.minor_id=0
LEFT JOIN (
        SELECT A.CODFIC_0,
        A.CODZONE_0, B.TEXTE_0 FROM ATABZON A
        LEFT JOIN ATEXTE B ON  B.LAN_0='CHI' AND A.NOCOURT_0=B.NUMERO_0
        WHERE A.CODFIC_0= 'ITMMASTER' --LIKE '%SORDER%' --如果只查询指定表,加上此条件
           ) j on j.CODZONE_0=LEFT (a.name,CASE WHEN CHARINDEX( '_',a.name)=0 THEN LEN(a.name) else CHARINDEX( '_',a.name)-1 end)


--where b.name is not null
--WHERE d.name='TestTB' --如果只查询指定表,加上此条件
WHERE d.name='ITMMASTER' --LIKE '%SORDER%' --如果只查询指定表,加上此条件
order by 字段序号

表数据行从大到小排序

sql 复制代码
SELECT A.NAME ,B.ROWS  FROM sysobjects  A JOIN sysindexes B ON A.id = B.id 
WHERE A.xtype = 'U' AND B.indid IN(0,1) AND B.rows>0 ORDER BY B.ROWS DESC

将 ( A101,B101,B102,C101,D101) 的列数据转换成行

sql 复制代码
SELECT a.USR_0,SUBSTRING(a.VALUES_0,number,CHARINDEX(',',a.VALUES_0+',',number)-number) as protestxx
  from YEIPFUN a  with(nolock) ,master..spt_values  with(nolock) 
  where number >= 1 and number < len(a.VALUES_0)
   and type='p'
   and SUBSTRING(','+a.VALUES_0,number,1)=','
AND a.NAM_0='FCY' AND a.USR_0='WSH'
sql 复制代码
SELECT FCY_0,FCYSHO_0 DE FROM FACILITY WHERE SALFLG_0=2 
AND FCY_0 IN(select   rtrim(ltrim(replace(bs.v1, char(9), '') )) AS FCY
from (select convert(xml, '<n>'+replace(replace(YFCYP_0, ',', ','), ',', '</n><n>')+'</n>') as xmlval1  
       from AUTILIS WHERE YOACARD_0='${USER}') a
       cross apply(select k.n.value('.', 'nvarchar(80)') v1 from a.xmlval1.nodes('n') k(n) ) bs
where bs.v1 !='')
ORDER BY FCY_0

直观的看到数据库中SQL 的运行状态,快速找到执行缓慢的语句

sql 复制代码
SELECT
    es.session_id,
    database_name=DB_NAME(er.database_id),
    er.cpu_time,
    er.reads,
    er.writes,
    er.logical_reads,
    login_name,
    er.status,
    blocking_session_id,
    wait_type,
    wait_resource,
    wait_time,
    individual_query=SUBSTRING(qt.text,(er.statement_start_offset/2)+1,((CASE  WHEN  er.statement_end_offset=-1 THEN  LEN(CONVERT(NVARCHAR(MAX),qt.text))* 2 ELSE   er.statement_end_offset  END-er.statement_start_offset)/2)+1),
    parent_query=qt.text,
    program_name,
    host_name,
    nt_domain,
    start_time,
    DATEDIFF(MS,er.start_time,GETDATE())as duration,
    (SELECT  query_plan  FROM  sys.dm_exec_query_plan (er.plan_handle))AS  query_plan
FROM
    sys.dm_exec_requests er
    INNER  JOIN  sys.dm_exec_sessions  es  ON er.session_id=es.session_id
    CROSS  APPLY  sys.dm_exec_sql_text (er.sql_handle)AS  qt
WHERE
    es.session_id> 50         
    AND  es.session_Id  NOT  IN(@@SPID)
ORDER BY
    1, 2

查询缓存对象

sql 复制代码
SELECT TOP 10 OBJECT_NAME(est.objectid, est.dbid) AS ObjectName,
omce.name AS cacheName,
omce.in_use_count,
omce.is_dirty,
omce.disk_ios_count,
omce.context_switches_count,
omce.original_cost,
omce.current_cost
FROM sys.dm_exec_cached_plans ecp
CROSS APPLY sys.dm_exec_sql_text(ecp.plan_handle) est
INNER JOIN sys.dm_os_memory_cache_entries omce
ON ecp.memory_object_address = omce.memory_object_address
WHERE omce.name = 'Object Plans'

查询数据库

sql 复制代码
SELECT * FROM sys.databases

查看所有会话的状态、等待类型及当前正在执行SQL脚本

sql 复制代码
select t.spid, t.kpid, t.blocked, t.status, t.waittype, t.lastwaittype, t.waitresource, t.waittime
    , DB_NAME(t.dbid) DbName, t.login_time, t.last_batch, t.loginame, t.program_name, t.hostname, t.hostprocess
    , t.cmd, t.stmt_start, t.stmt_end, t.request_id, dc.text
from    master.sys.sysprocesses t
    outer apply master.sys.dm_exec_sql_text(t.sql_handle) dc
where    t.spid >= 50

查看需要建索引的表

sql 复制代码
SELECT migs.group_handle, mid.* 
FROM sys.dm_db_missing_index_group_stats AS migs 
INNER JOIN sys.dm_db_missing_index_groups AS mig 
ON (migs.group_handle = mig.index_group_handle) 
INNER JOIN sys.dm_db_missing_index_details AS mid 
ON (mig.index_handle = mid.index_handle) 
WHERE migs.group_handle = 2

查询索引碎片占比

sql 复制代码
SELECT TOP 200 
DB_NAME() AS DatbaseName 
, SCHEMA_NAME(o.Schema_ID) AS SchemaName 
, OBJECT_NAME(s.[object_id]) AS TableName 
, i.name AS IndexName 
, ROUND(s.avg_fragmentation_in_percent,2) AS [Fragmentation %] 
FROM sys.dm_db_index_physical_stats(db_id(),null, null, null, null) s 
INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id] 
AND s.index_id = i.index_id 
INNER JOIN sys.objects o ON i.object_id = o.object_id 
WHERE s.database_id = DB_ID() 
AND i.name IS NOT NULL 
AND OBJECTPROPERTY(s.[object_id], 'IsMsShipped') = 0 
ORDER BY [Fragmentation %] DESC

查看磁盘 I/O 状况

sql 复制代码
SELECT * FROM sys.dm_io_virtual_file_stats(NULL, NULL);

查看查询执行计划的缓存

sql 复制代码
SELECT * FROM sys.dm_exec_query_stats;

查看当前的索引使用情况

sql 复制代码
SELECT * FROM sys.dm_db_index_usage_stats;
相关推荐
天空属于哈夫克321 小时前
企业微信 API 发消息接口:支持私聊、群聊及多种媒体格式
数据库·微信·自动化·企业微信
高铭杰21 小时前
Postgresql源码(158)pg_filenode.map文件作用relmap和redo流程(RM_RELMAP_ID = 7)
数据库·postgresql·relmap·pg_filenode.map
秦jh_21 小时前
【Redis】初识高并发分布式和Redis
数据库·redis·缓存
远方160921 小时前
115-使用freesql体验Oracle 多版本特性
大数据·数据库·sql·ai·oracle·database
happymaker062621 小时前
JDBC(MySQL)——DAY01
数据库·mysql
qqacj21 小时前
MSSQL2022的一个错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序
数据库·microsoft
ren049181 天前
MySQL
数据库·mysql
良逍Ai出海1 天前
OpenClaw 新手最该先搞懂的 2 套命令
android·java·数据库
Keanu-1 天前
Redis 主从复制及哨兵模式配置
服务器·数据库·redis
blues92571 天前
【JOIN】关键字在MySql中的详细使用
数据库·mysql