数据库管理方面必知语句(问答)(转)
转自:claro博客
每天一个小问题 ( SQL Server 部分汇总)
=======================================================================
select @@VERSION
Microsoft SQL Server 2008 ( RTM ) - 10.0.1600.22 ( Intel X86 )
Jul 9 2008 14: 43: 34
Copyright ( c ) 1988- 2008 Microsoft Corporation
Enterprise Edition on Windows NT 6.0 < X86 > ( Build 6001: Service Pack 1)
=======================================================================
Q: 如何在 SQL 中查询实例中哪些数据库可以正常访问呢 ?
A:SELECT
dtb . name AS [Name] ,
dtb . database_id AS [ID] ,
case when has_dbaccess ( dtb . name ) = 1 then ' 可以访问 ' else ' 不可以访问 ' end AS[IsAccessible]
FROM
master . sys . databases AS dtb where database_id > 4
ORDER BY
[IsAccessible] , [Name] ASC
Q: 如何在 SQL 中查询哪些语句产生了阻塞呢 ?
A: -- 查询是否存在阻塞的情况发生
select *
from sys . sysprocesses
where blocked = 1
-- 查询哪些语句产生阻塞,查看结果中 EventInfo 字段。
dbcc inputbuffer ( 输入 spid 值 )
dbcc inputbuffer ( 输入 kpid 值 )
比如
dbcc inputbuffer ( 11111)
-- 近期发现 N 多数据库管理方面的问题出现,汇总到底。
-- 待续
--2010.6.25 记于古城西安
Q: 如何在 SQL 中查询最近 10 天内修改过的所有数据库对象呢 ?
A:-- 查看当前 DB 返回最近 10 天内修改过的所有数据库对象:
SELECT name AS object_name
, SCHEMA_NAME ( schema_id ) AS schema_name
, type_desc
, create_date
, modify_date
FROM sys . objects
WHERE modify_date > GETDATE () - 10
ORDER BY modify_date ;
--2010.7.17 记于古城西安
=======================================================================
Print @@VERSION
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Apr 2 2010 15:48:46
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
=======================================================================
Q: 如何在 SQL 中查询指定数据库的还原记录?
A:-- 查看指定数据库的还原数据集:
SELECT rh.destination_database_name AS 数据库名,
rh.restore_date AS 还原时间,
CASE
WHEN rf.file_number = 1 THEN '主数据文件'
WHEN rf.file_number = 2 THEN '主日志文件'
ELSE '其他'
END AS 文件类型,
CASE
WHEN rh.restore_type = 'D' THEN '数据库'
WHEN rh.restore_type = 'F' THEN '文件'
WHEN rh.restore_type = 'G' THEN '文件组'
WHEN rh.restore_type = 'I' THEN '差异'
WHEN rh.restore_type = 'L' THEN '日志'
WHEN rh.restore_type = 'V' THEN '验证'
WHEN rh.restore_type = 'R' THEN '恢复'
END AS 还原类型,
Isnull(rf.destination_phys_drive, '') AS 还原媒体或路径,
rf.destination_phys_name AS 还原文件名
FROM msdb.dbo.restorehistory rh
JOIN msdb.dbo.restorefile rf
ON rh.restore_history_id = rf.restore_history_id
WHERE rh.destination_database_name = '数据库名'
--2011.4.10 更新
Q:如何查询当前数据库中非Primary的文件组的对象信息?
A: --查询当前数据库中自定义文件组的对象信息
select
CASE WHEN 'FG'=b.type THEN b.name ELSE N'' END AS [文件组],
CASE WHEN 'PS'=b.type THEN b.name ELSE N'' END AS [分区方案],
CASE WHEN 'FD'=b.type THEN b.name ELSE N'' END AS [FILESTREAM 数据文件组],
Object_name(a.object_id) 对象名,a.name 索引名,a.index_id 索引ID,
a.type_desc 索引类型,is_primary_key 主键约束属性
FROM sys.indexes a
JOIN sys.data_spaces b on a.data_space_id=b.data_space_id
WHERE b.name <> 'PRIMARY' --非默认主文件组
--2011.5.24 更新