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);