天天看點

DAC 連接配接資料庫需要做些什麼

Below is what is collected

Shows SQL Servers information

Shows top 5 high cpu used statemants

Shows who so logged in

Shows long running cursors

Shows idle sessions that have open transactions

Shows free space in tempdb database

Shows total disk allocated to tempdb database

Show active jobs

Shows clients connected

Shows running batch

Shows currently blocked requests

Shows last backup dates

Shows jobs that are still executing

Shows failed MS SQL jobs report

Shows disabled jobs

Shows avail free DB space

Shows total DB size (.MDF+.LDF)

Show hard drive space available

USE master

GO

-- This stored procedure will give you infomation on the SQL server in question.-- Connect with DAC and then execute this stored procedure located in the master database

CREATE PROC sp_dba_DAC

AS

SELECT '*** Start of DAC Report ***'

SELECT '-- Shows SQL Servers information'

EXEC ('USE MASTER')

SELECT CONVERT(CHAR(20), SERVERPROPERTY('MachineName')) AS 'MACHINE NAME'

,CONVERT(CHAR(20), SERVERPROPERTY('ServerName')) AS 'SQL SERVER NAME'

,( CASE WHEN CONVERT(CHAR(20), SERVERPROPERTY('InstanceName')) IS NULL

THEN 'Default Instance'

ELSE CONVERT(CHAR(20), SERVERPROPERTY('InstanceName'))

END ) AS 'INSTANCE NAME'

,CONVERT(CHAR(20), SERVERPROPERTY('EDITION')) AS EDITION

,CONVERT(CHAR(20), SERVERPROPERTY('ProductVersion')) AS 'PRODUCT VERSION'

,CONVERT(CHAR(20), SERVERPROPERTY('ProductLevel')) AS 'PRODUCT LEVL'

,( CASE WHEN CONVERT(CHAR(20), SERVERPROPERTY('ISClustered')) = 1

THEN 'Clustered'

WHEN CONVERT(CHAR(20), SERVERPROPERTY('ISClustered')) = 0

THEN 'NOT Clustered'

ELSE 'INVALID INPUT/ERROR'

END ) AS 'FAILOVER CLUSTERED'

,( CASE WHEN CONVERT(CHAR(20), SERVERPROPERTY('ISIntegratedSecurityOnly')) = 1

THEN 'Integrated Security '

WHEN CONVERT(CHAR(20), SERVERPROPERTY('ISIntegratedSecurityOnly')) = 0

THEN 'SQL Server Security '

END ) AS 'SECURITY'

,( CASE WHEN CONVERT(CHAR(20), SERVERPROPERTY('ISSingleUser')) = 1

THEN 'Single User'

WHEN CONVERT(CHAR(20), SERVERPROPERTY('ISSingleUser')) = 0

THEN 'Multi User'

END ) AS 'USER MODE'

,CONVERT(CHAR(30), SERVERPROPERTY('COLLATION')) AS COLLATION

SELECT '-- Shows top 5 high cpu used statemants'

SELECT TOP 5

total_worker_time / execution_count AS [Avg CPU Time]

,SUBSTRING(st.text, ( qs.statement_start_offset / 2 ) + 1,

( ( CASE qs.statement_end_offset

WHEN -1 THEN DATALENGTH(st.text)

ELSE qs.statement_end_offset

END - qs.statement_start_offset ) / 2 ) + 1) AS statement_text

FROM sys.dm_exec_query_stats AS qs

CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st

ORDER BY total_worker_time / execution_count DESC ;

SELECT '-- Shows who so logged in'

SELECT login_name

,COUNT(session_id) AS session_count

FROM sys.dm_exec_sessions

GROUP BY login_name ;

SELECT '-- Shows long running cursors'

EXEC ('USE master')

SELECT creation_time

,cursor_id

,name

,c.session_id

,login_name

FROM sys.dm_exec_cursors (0) AS c

JOIN sys.dm_exec_sessions AS s ON c.session_id = s.session_id

WHERE DATEDIFF(mi, c.creation_time, GETDATE()) > 5 ;

SELECT '-- Shows idle sessions that have open transactions'

SELECT s.*

FROM sys.dm_exec_sessions AS s

WHERE EXISTS ( SELECT *

FROM sys.dm_tran_session_transactions AS t

WHERE t.session_id = s.session_id )

AND NOT EXISTS ( SELECT *

FROM sys.dm_exec_requests AS r

WHERE r.session_id = s.session_id ) ;

SELECT '-- Shows free space in tempdb database'

SELECT SUM(unallocated_extent_page_count) AS [free pages]

,( SUM(unallocated_extent_page_count) * 1.0 / 128 ) AS [free space in MB]

FROM sys.dm_db_file_space_usage ;

SELECT '-- Shows total disk allocated to tempdb database'

SELECT SUM(size) * 1.0 / 128 AS [size in MB]

FROM tempdb.sys.database_files

SELECT '-- Show active jobs'

SELECT DB_NAME(database_id) AS [Database]

,COUNT(*) AS [Active Async Jobs]

FROM sys.dm_exec_background_job_queue

WHERE in_progress = 1

GROUP BY database_id ;

SELECT '--Shows clients connected'

SELECT session_id

,client_net_address

,client_tcp_port

FROM sys.dm_exec_connections ;

SELECT '--Shows running batch'

SELECT *

FROM sys.dm_exec_requests ;

SELECT '--Shows currently blocked requests'

,status

,blocking_session_id

,wait_type

,wait_time

,wait_resource

,transaction_id

FROM sys.dm_exec_requests

WHERE status = N'suspended'

SELECT '--Shows last backup dates ' AS ' '

SELECT B.name AS Database_Name

,ISNULL(STR(ABS(DATEDIFF(day, GETDATE(), MAX(Backup_finish_date)))),

'NEVER') AS DaysSinceLastBackup

,ISNULL(CONVERT(CHAR(10), MAX(backup_finish_date), 101), 'NEVER') AS LastBackupDate

FROM master.dbo.sysdatabases B

LEFT OUTER JOIN msdb.dbo.backupset A ON A.database_name = B.name

AND A.type = 'D'

GROUP BY B.Name

ORDER BY B.name

SELECT '--Shows jobs that are still executing' AS ' '

EXEC msdb.dbo.sp_get_composite_job_info NULL, NULL, NULL, NULL, NULL, NULL,

1, NULL, NULL

SELECT '--Shows failed MS SQL jobs report' AS ' '

SELECT name

FROM msdb.dbo.sysjobs A

,msdb.dbo.sysjobservers B

WHERE A.job_id = B.job_id

AND B.last_run_outcome = 0

SELECT '--Shows disabled jobs ' AS ' '

FROM msdb.dbo.sysjobs

WHERE enabled = 0

ORDER BY name

SELECT '--Shows avail free DB space ' AS ' '

EXEC sp_MSForEachDB 'Use ? SELECT name AS ''Name of File'', size/128.0 -CAST(FILEPROPERTY(name, ''SpaceUsed'' ) AS int)/128.0 AS ''Available Space In MB'' FROM .SYSFILES'

SELECT '--Shows total DB size (.MDF+.LDF)' AS ' '

SET nocount ON

DECLARE @name SYSNAME

DECLARE @SQL NVARCHAR(600) -- Use temporary table to sum up database size w/o using group by

CREATE TABLE #databases

(

DATABASE_NAME SYSNAME NOT NULL

,size INT NOT NULL

)

DECLARE c1 CURSOR FOR SELECT name FROM master.dbo.sysdatabases

-- where has_dbaccess(name) = 1

-- Only look at databases to which we have access

OPEN c1

FETCH c1 INTO @name

WHILE @@fetch_status >= 0

BEGIN

SELECT @SQL = 'insert into #databases select N''' + @name

+ ''', sum(size) from ' + QUOTENAME(@name)

+ '.dbo.sysfiles' -- Insert row for each database

EXECUTE (@SQL)

END

DEALLOCATE c1

SELECT DATABASE_NAME

,DATABASE_SIZE_MB = size * 8 / 1000 -- Convert from 8192 byte pages to K and then convert to MB

FROM #databases

ORDER BY 1

SELECT SUM(size * 8 / 1000) AS '--Shows disk space used - ALL DBs - MB '

FROM #databases ;

DROP TABLE #databases ;

SELECT '--Show hard drive space available ' AS ' ' ;

EXEC master..xp_fixeddrives ;

SELECT '*** End of Report **** ' ;