REDGATE又一好用的脚本工具ScriptsManager1.3

原文:REDGATE又一好用的脚本工具ScriptsManager1.3

REDGATE又一好用的脚本工具ScriptsManager1.3

先说明一下:这个工具是免费的

下载地址:http://www.red-gate.com/products/dba/sql-scripts-manager/

这个工具是常用脚本工具,里面已经集合了SQLSERVER砖家们的脚本,这些脚本涉及很多方面

包括:备份,诊断,导出,索引,空间,模版,工具

大家可以调用这些脚本,不用再打开你的脚本文件夹到处搜索你的笔记了

选择好脚本之后就打开

打开之后会显示脚本的用途

脚本代码

贡献脚本的作者信息

这些作者都来自知名数据库网站

点击“Continue”

选择在哪个数据库上运行这个脚本

点击“run”运行

运行结果

也可以将结果导出csv文件

也可以贡献您的代码到社区

 

工具里面的所有脚本代码

 

脚本大全 redgate的ScriptsManager 1.3 2013-12-5

--列出最近多少天内的备份记录
SELECT  sd.name AS [Database] ,
        CASE WHEN bs.type = 'D' THEN 'Full backup'
             WHEN bs.type = 'I' THEN 'Differential'
             WHEN bs.type = 'L' THEN 'Log'
             WHEN bs.type = 'F' THEN 'File/Filegroup'
             WHEN bs.type = 'G' THEN 'Differential file'
             WHEN bs.type = 'P' THEN 'Partial'
             WHEN bs.type = 'Q' THEN 'Differential partial'
             ELSE 'Unknown (' + bs.type + ')'
        END AS [Backup Type] ,
        bs.backup_start_date AS [Date]
FROM    master..sysdatabases sd
        LEFT OUTER JOIN msdb..backupset bs ON RTRIM(bs.database_name) = RTRIM(sd.name)
        LEFT OUTER JOIN msdb..backupmediafamily bmf ON bs.media_set_id = bmf.media_set_id
WHERE   sd.name = '[AdventureWorks]' --填入数据库名
        AND bs.backup_start_date > GETDATE() - 10 --填入天数
ORDER BY sd.name ,
        [Date]
-----------------------------------------------------
--列出sql实例下所有数据库的最后一次备份类型 和当前备份类型 排除tempdb数据库
SELECT  sd.name AS [Database],
        CASE WHEN bs.type = 'D' THEN 'Full backup'
             WHEN bs.type = 'I' THEN 'Differential'
             WHEN bs.type = 'L' THEN 'Log'
             WHEN bs.type = 'F' THEN 'File/Filegroup'
             WHEN bs.type = 'G' THEN 'Differential file'
             WHEN bs.type = 'P' THEN 'Partial'
             WHEN bs.type = 'Q' THEN 'Differential partial'
             WHEN bs.type IS NULL THEN 'No backups'
             ELSE 'Unknown (' + bs.type + ')'
        END AS [Backup Type],
        max(bs.backup_start_date) AS [Last Backup of Type]
FROM    master..sysdatabases sd
        LEFT OUTER JOIN msdb..backupset bs ON rtrim(bs.database_name) = rtrim(sd.name)
        LEFT OUTER JOIN msdb..backupmediafamily bmf ON bs.media_set_id = bmf.media_set_id
WHERE   sd.name <> 'tempdb'
GROUP BY sd.name,
        bs.type,
        bs.database_name
ORDER BY sd.name, [Last Backup of Type]

----------------------------------------------------------
--数据库文件、大小和已经使用空间
USE [AdventureWorks]  --要查看的当前数据库的使用空间,自动增长大小,数据库文件位置
GO
set nocount on
create table #Data(
      FileID int NOT NULL,
      [FileGroupId] int NOT NULL,
      TotalExtents int NOT NULL,
      UsedExtents int NOT NULL,
      [FileName] sysname NOT NULL,
      [FilePath] nvarchar(MAX) NOT NULL,
      [FileGroup] varchar(MAX) NULL)

create table #Results(
      db sysname NULL ,
      FileType varchar(4) NOT NULL,
      [FileGroup] sysname not null,
      [FileName] sysname NOT NULL,
      TotalMB numeric(18,2) NOT NULL,
      UsedMB numeric(18,2) NOT NULL,
      PctUsed numeric(18,2) NULL,
      FilePath nvarchar(MAX) NULL,
      FileID int null)

create table #Log(
      db sysname NOT NULL,
      LogSize numeric(18,5) NOT NULL,
      LogUsed numeric(18,5) NOT NULL,
      Status int NOT NULL,
      [FilePath] nvarchar(MAX) NULL)

INSERT #Data (FileID, [FileGroupId], TotalExtents, UsedExtents, [FileName], [FilePath])
EXEC ('DBCC showfilestats WITH NO_INFOMSGS')

update #Data
set #Data.FileGroup = sysfilegroups.groupname
from #Data, sysfilegroups
where #Data.FileGroupId = sysfilegroups.groupid

INSERT INTO #Results (db, [FileGroup], FileType, [FileName], TotalMB, UsedMB, PctUsed, FilePath, FileID)
SELECT DB_NAME() db,
            [FileGroup],
            'Data' FileType,
            [FileName],
            TotalExtents * 64./1024. TotalMB,
            UsedExtents *64./1024 UsedMB,
            UsedExtents*100. /TotalExtents  UsedPct,
            [FilePath],
            FileID
FROM #Data
order BY --1,2
DB_NAME(), [FileGroup]

insert #Log (db,LogSize,LogUsed,Status)
exec('dbcc sqlperf(logspace) WITH NO_INFOMSGS ')

insert #Results(db, [FileGroup], FileType, [FileName],  TotalMB,UsedMB, PctUsed, FilePath, FileID)
select DB_NAME() db,
            'Log' [FileGroup],
            'Log' FileType,
            s.[name] [FileName],
            s.Size/128. as LogSize ,
            FILEPROPERTY(s.name,'spaceused')/8.00 /16.00 As LogUsedSpace,
            ((FILEPROPERTY(s.name,'spaceused')/8.00 /16.00)*100)/(s.Size/128.) UsedPct,
            s.FileName FilePath,
            s.FileID FileID
      from #Log l , master.dbo.sysaltfiles f , dbo.sysfiles s
      where f.dbid = DB_ID()
      and (s.status & 0x40) <> 0
      and s.FileID = f.FileID
      and l.db = DB_NAME()

SELECT r.db AS "Database",
r.FileType AS "File type",
CASE
     WHEN r.FileGroup = 'Log' Then 'N/A'
     ELSE r.FileGroup
END "File group",
r.FileName AS "Logical file name",
r.TotalMB AS "Total size (MB)",
r.UsedMB AS "Used (MB)",
r.PctUsed AS "Used (%)",
r.FilePath AS "File name",
r.FileID AS "File ID",
CASE WHEN s.maxsize = -1 THEN null
    ELSE CONVERT(decimal(18,2), s.maxsize /128.)
END "Max. size (MB)",
CONVERT(decimal(18,2), s.growth /128.) "Autogrowth increment (MB)"
FROM #Results r
INNER JOIN dbo.sysfiles s
ON r.FileID = s.FileID
ORDER BY 1,2,3,4,5

DROP TABLE #Data
DROP TABLE #Results
DROP TABLE #Log

----------------------------------------------------------
--查看当前sql实例下buffer cache的命中率
SELECT
    CASE WHEN t2.cntr_value = 0
    THEN 0
    ELSE CONVERT(DECIMAL(38,2), CAST(t1.cntr_value AS FLOAT) / CAST(t2.cntr_value AS FLOAT) * 100.0)
    END 'Buffer Cache Hit Ratio (%)'
FROM sys.dm_os_performance_counters t1,
    sys.dm_os_performance_counters t2
WHERE
    t1.object_name LIKE '%Buffer Manager%'
AND t1.object_name = t2.object_name
AND t1.counter_name='Buffer cache hit ratio'
AND t2.counter_name='Buffer cache hit ratio base'

----------------------------------------------------------------
--在SQL实例级别列出在plan cache中的SQL语句的内容和每个语句平均运行时间并排序
SELECT 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) AS "Statement Text",
       total_worker_time/execution_count/1000 AS "Average Worker Time (ms)",
       execution_count AS "Execution Count",
       total_worker_time/1000 AS "Total Worker Time (ms)",
             total_logical_reads AS "Total Logical Reads",
       total_logical_reads/execution_count AS "Average Logical Reads",
             total_elapsed_time/1000 AS "Total Elapsed Time (ms)",
       total_elapsed_time/execution_count/1000 AS "Average Elapsed Time (ms)",
             QP.query_plan AS "Query Plan (double click to open)"
FROM sys.dm_exec_query_stats QS
          CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) ST
          CROSS APPLY sys.dm_exec_query_plan(QS.plan_handle) QP
ORDER BY total_elapsed_time/execution_count DESC

------------------------------------------------------------------------
--列出单个数据库里所有的索引碎片
USE [AdventureWorks]
GO
SELECT  '[' + DB_NAME() + '].[' + OBJECT_SCHEMA_NAME(ddips.[object_id],
                                                     DB_ID()) + '].['
        + OBJECT_NAME(ddips.[object_id], DB_ID()) + ']' AS [Object] ,
        i.[name] AS [Index] ,
        ddips.[index_type_desc] AS [Index Type],
        ddips.[partition_number] AS [Partition Number],
        ddips.[alloc_unit_type_desc] AS [Allocation Unit Type],
        ddips.[index_depth] AS [Index Depth],
        ddips.[index_level] AS [Index Level],
        CAST(ddips.[avg_fragmentation_in_percent] AS SMALLINT)
            AS [Average Fragmentation (%)] ,
        CAST(ddips.[avg_fragment_size_in_pages] AS SMALLINT)
            AS [Average Fragment Size (pages)] ,
        ddips.[fragment_count] AS [Fragments],
        ddips.[page_count] AS [Pages]
FROM    sys.dm_db_index_physical_stats(DB_ID(), NULL,
                                         NULL, NULL, 'limited') ddips
        INNER JOIN sys.[indexes] i ON ddips.[object_id] = i.[object_id]
                                       AND ddips.[index_id] = i.[index_id]
WHERE   ddips.[avg_fragmentation_in_percent] > 50  --填入索引碎片度
        AND ddips.[page_count] > 100  --填入
ORDER BY ddips.[avg_fragmentation_in_percent] ,
        OBJECT_NAME(ddips.[object_id], DB_ID()) ,
        i.[name]

----------------------------------------------------------------------
--列出单个实例下SQLSERVER性能计数器的各个比率值

DECLARE @PERF_LARGE_RAW_FRACTION INT ,
        @PERF_LARGE_RAW_BASE INT
SELECT  @PERF_LARGE_RAW_FRACTION = 537003264 ,
        @PERF_LARGE_RAW_BASE = 1073939712

SELECT  dopc_fraction.object_name AS [Performance object],
        dopc_fraction.instance_name AS [Counter instance],
        dopc_fraction.counter_name AS [Counter name],
         --when divisor is 0, return I return NULL to indicate
         --divide by 0/no values captured
        CONVERT(DECIMAL(38,2), CAST(dopc_fraction.cntr_value AS FLOAT)
        / CAST(CASE dopc_base.cntr_value
                 WHEN 0 THEN NULL
                 ELSE dopc_base.cntr_value
                                      END AS FLOAT)) AS [Value]
FROM    sys.dm_os_performance_counters AS dopc_base
        JOIN sys.dm_os_performance_counters AS dopc_fraction
            ON dopc_base.cntr_type = @PERF_LARGE_RAW_BASE
               AND dopc_fraction.cntr_type = @PERF_LARGE_RAW_FRACTION
               AND dopc_base.object_name = dopc_fraction.object_name
               AND dopc_base.instance_name = dopc_fraction.instance_name
               AND ( REPLACE(UPPER(dopc_base.counter_name), 'BASE', '') =
                  UPPER(dopc_fraction.counter_name)
              --Worktables From Cache has "odd" name where
              --Ratio was left off
               OR REPLACE(UPPER(dopc_base.counter_name), 'BASE', '') =
                  REPLACE(UPPER(dopc_fraction.counter_name), 'RATIO', '')
               )
ORDER BY dopc_fraction.object_name ,
         dopc_fraction.instance_name ,
         dopc_fraction.counter_name
-----------------------------------------------------------------------
--列出单个数据库下所有没有聚集索引的用户表
USE [AdventureWorks]  --要看出的数据库
GO
SELECT o.name
FROM sys.objects o
WHERE o.type='U'
  AND NOT EXISTS(SELECT 1 FROM sys.indexes i
                 WHERE o.object_id = i.object_id
                   AND i.type_desc = 'CLUSTERED')
---------------------------------------------------------------------------
--列出实例级别下阻塞的事务和阻塞,包括SQL语句,登录名 会话ID
SELECT  db_name(DTL.[resource_database_id]) AS [Database],
        DTL.[resource_type] AS [Resource Type] ,
        CASE WHEN DTL.[resource_type] IN ( 'DATABASE', 'FILE', 'METADATA' )
             THEN DTL.[resource_type]
             WHEN DTL.[resource_type] = 'OBJECT'
             THEN OBJECT_NAME(DTL.resource_associated_entity_id)
             WHEN DTL.[resource_type] IN ( 'KEY', 'PAGE', 'RID' )
             THEN ( SELECT  OBJECT_NAME([object_id])
                    FROM    sys.partitions
                    WHERE   sys.partitions.[hobt_id] =
                                 DTL.[resource_associated_entity_id]
                  )
             ELSE 'Unidentified'
        END AS [Parent Object] ,
        DTL.[request_mode] AS [Lock Type] ,
        DTL.[request_status] AS [Request Status] ,
        DOWT.[wait_duration_ms] AS [Wait Duration (ms)] ,
        DOWT.[wait_type] AS [Wait Type] ,
        DOWT.[session_id] AS [Blocked Session ID] ,
        DES_Blocked.[login_name] AS [Blocked Login] ,
        SUBSTRING(DEST_Blocked.text, (DER.statement_start_offset / 2) + 1,
                  ( CASE WHEN DER.statement_end_offset = -1
                         THEN DATALENGTH(DEST_Blocked.text)
                         ELSE DER.statement_end_offset
                    END - DER.statement_start_offset ) / 2)
                                              AS [Blocked Command] ,
        DOWT.[blocking_session_id] AS [Blocking Session ID] ,
        DES_Blocking.[login_name] AS [Blocking Login] ,
        DEST_Blocking.[text] AS [Blocking Command] ,
        DOWT.resource_description AS [Blocking Resource Detail]
FROM    sys.dm_tran_locks DTL
        INNER JOIN sys.dm_os_waiting_tasks DOWT
                    ON DTL.lock_owner_address = DOWT.resource_address
        INNER JOIN sys.[dm_exec_requests] DER
                    ON DOWT.[session_id] = DER.[session_id]
        INNER JOIN sys.dm_exec_sessions DES_Blocked
                    ON DOWT.[session_id] = DES_Blocked.[session_id]
        INNER JOIN sys.dm_exec_sessions DES_Blocking
                    ON DOWT.[blocking_session_id] = DES_Blocking.[session_id]
        INNER JOIN sys.dm_exec_connections DEC
                    ON DOWT.[blocking_session_id] = DEC.[most_recent_session_id]
        CROSS APPLY sys.dm_exec_sql_text(DEC.[most_recent_sql_handle])
                                                         AS DEST_Blocking
        CROSS APPLY sys.dm_exec_sql_text(DER.sql_handle) AS DEST_Blocked
------------------------------------------------------------------------------
--列出前十行占用CPU最长时间的SQL语句
SELECT TOP (10)
        RANK() Over (ORDER BY deqs.total_worker_time DESC) As [Rank],
        CONVERT(decimal(38,2), CONVERT(float, total_worker_time) / 1000) AS [Total CPU Time (ms)],
        execution_count AS [Execution Count],
        CONVERT(decimal(38,2), (CONVERT(float, total_worker_time) / execution_count) / 1000) AS [Average CPU Time (ms)] ,
        SUBSTRING(execText.text,
          -- starting value for substring
          CASE WHEN deqs.statement_start_offset = 0
             OR deqs.statement_start_offset IS NULL
               THEN 1
               ELSE deqs.statement_start_offset/2 + 1 END,
          -- ending value for substring
          CASE WHEN deqs.statement_end_offset = 0
            OR deqs.statement_end_offset = -1
            OR deqs.statement_end_offset IS NULL
               THEN LEN(execText.text)
               ELSE deqs.statement_end_offset/2 END -
                 CASE WHEN deqs.statement_start_offset = 0
                   OR deqs.statement_start_offset IS NULL
                     THEN 1
                     ELSE deqs.statement_start_offset/2  END + 1
        ) AS [Query Text],
        execText.text AS [Object Text]
FROM    sys.dm_exec_query_stats deqs
        CROSS APPLY sys.dm_exec_sql_text(deqs.plan_handle) AS execText
ORDER BY deqs.total_worker_time DESC ;
------------------------------------------------------------------------------------
--列出单个数据库的每个数据库文件的读写和总的输入/输出统计信息
SELECT  DB_NAME(database_id) AS [Database Name] ,
        file_id AS [File ID],
        io_stall_read_ms AS [Total Read Waits (ms)],
        num_of_reads AS [Number of Reads],
        CAST(io_stall_read_ms / ( 1.0 + num_of_reads ) AS NUMERIC(10, 1))
            AS [Average Read Wait (ms)] ,
        io_stall_write_ms AS [Total Write Waits (ms)],
        num_of_writes AS [Number of Writes],
        CAST(io_stall_write_ms / ( 1.0 + num_of_writes ) AS NUMERIC(10, 1))
            AS [Average Write Wait (ms)] ,
        io_stall_read_ms + io_stall_write_ms AS [Total I/O Waits (ms)] ,
        num_of_reads + num_of_writes AS [Number of I/O Operations] ,
        CAST(( io_stall_read_ms + io_stall_write_ms ) / ( 1.0 + num_of_reads
                                                          + num_of_writes)
           AS NUMERIC(10,1)) AS [Average I/O Wait (ms)]
FROM    sys.dm_io_virtual_file_stats(NULL, NULL)  --可以指定dbid 和fileid也可以不指定,如果不指定就列出当前实例下所有数据库的I/O状况
ORDER BY [Average I/O Wait (ms)] DESC ;

--FROM    sys.dm_io_virtual_file_stats(DB_ID('AdventureWorks'), NULL)
---------------------------------------------------------------------------
--列出单个数据库的所有表的读写统计
USE [AdventureWorks]
GO
SELECT  OBJECT_SCHEMA_NAME(ddius.object_id) + '.' + OBJECT_NAME(ddius.object_id) AS [Object Name] ,
       CASE
        WHEN ( SUM(user_updates + user_seeks + user_scans + user_lookups) = 0 )
        THEN NULL
        ELSE CONVERT(DECIMAL(38,2), CAST(SUM(user_seeks + user_scans + user_lookups) AS DECIMAL)
                                    / CAST(SUM(user_updates + user_seeks + user_scans
                                               + user_lookups) AS DECIMAL) )
        END AS [Proportion of Reads] ,
       CASE
        WHEN ( SUM(user_updates + user_seeks + user_scans + user_lookups) = 0 )
        THEN NULL
        ELSE CONVERT(DECIMAL(38,2), CAST(SUM(user_updates) AS DECIMAL)
                                    / CAST(SUM(user_updates + user_seeks + user_scans
                                               + user_lookups) AS DECIMAL) )
        END AS [Proportion of Writes] ,
        SUM(user_seeks + user_scans + user_lookups) AS [Total Read Operations] ,
        SUM(user_updates) AS [Total Write Operations]
FROM    sys.dm_db_index_usage_stats AS ddius
        JOIN sys.indexes AS i ON ddius.object_id = i.object_id
                                 AND ddius.index_id = i.index_id
WHERE   i.type_desc IN ( 'CLUSTERED', 'HEAP' ) --only works in Current db
GROUP BY ddius.object_id
ORDER BY OBJECT_SCHEMA_NAME(ddius.object_id) + '.' + OBJECT_NAME(ddius.object_id)

------------------------------------------------------------------------------
--列出服务器实例级别下的最长的资源等待,帮你找出系统瓶颈
WITH    Waits
        AS ( SELECT   wait_type ,
                    wait_time_ms / 1000. AS wait_time_sec ,
                    100. * wait_time_ms / SUM(wait_time_ms) OVER ( ) AS pct ,
                    ROW_NUMBER() OVER ( ORDER BY wait_time_ms DESC ) AS rn
            FROM     sys.dm_os_wait_stats
            WHERE    wait_type NOT IN ( 'CLR_SEMAPHORE', 'LAZYWRITER_SLEEP',
                                        'RESOURCE_QUEUE', 'SLEEP_TASK',
                                        'SLEEP_SYSTEMTASK',
                                        'SQLTRACE_BUFFER_FLUSH', 'WAITFOR',
                                        'LOGMGR_QUEUE', 'CHECKPOINT_QUEUE' )
            )
SELECT  wait_type AS [Wait Type],
        CAST(wait_time_sec AS DECIMAL(12, 2)) AS [Wait Time (s)] ,
        CAST(pct AS DECIMAL(12, 2)) AS [Wait Time (%)]
FROM    Waits
WHERE   pct > 1 --wait time limit%
ORDER BY wait_time_sec DESC

------------------------------------------------------------------------
----列出实例下的每个用户会话(不是系统会话)运行的语句,包括登录,查询语句,状态信息
SELECT  des.login_name AS [Login],
        der.command AS [Command],
        dest.text AS [Command Text] ,
        des.login_time AS [Login Time],
        des.[host_name] AS [Hostname],
        des.[program_name] AS [Program],
        der.session_id AS [Session ID],
        dec.client_net_address [Client Net Address],
        der.status AS [Status],
        DB_NAME(der.database_id) AS [Database Name]
FROM    sys.dm_exec_requests der
        INNER JOIN sys.dm_exec_connections dec
                       ON der.session_id = dec.session_id
        INNER JOIN sys.dm_exec_sessions des
                       ON des.session_id = der.session_id
        CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS dest
WHERE   des.is_user_process = 1

---------------------------------------------------------------------
--统计出每个数据库中有多少个表是做了表分区的
DECLARE @db VARCHAR(60)
DECLARE @vsql VARCHAR(1400)
DECLARE getdb CURSOR  FOR
SELECT name from msdb.sys.sysdatabases
CREATE TABLE #parts (dbname VARCHAR(60), part int)
OPEN getdb
FETCH NEXT FROM getdb
INTO @db
WHILE @@FETCH_STATUS = 0
   BEGIN
     INSERT INTO #parts VALUES(@db, 0)
SET @vsql = 'UPDATE #parts SET part = 1 from ' + @db + '.sys.partitions sp , ' + @db + '.sys.sysobjects so
where sp.object_id = so.id and partition_number != 1 and #parts.dbname = ''' + @db + ''''
print @vsql
EXEC (@vsql)
     FETCH NEXT FROM getdb INTO @db
   END
CLOSE getdb

select dbname AS 'Database', part AS 'Number of Partitioned Tables' from #parts
drop table #parts
deallocate getdb

Database                                                     Number of Partitioned Tables
------------------------------------------------------------ ----------------------------
master                                                       0
tempdb                                                       0
model                                                        0
msdb                                                         0
DLGPOS                                                       0
GPOSDB                                                       0
Northwind                                                    0
partionTest                                                  1
---------------------------------------------------------------------------
----列出成功和失败的用户登录SQL服务器的信息  从SQL ERRORLOG文件里获取
DECLARE @TSQL  NVARCHAR(2000)
DECLARE @lC    INT
CREATE TABLE #TempLog (
      LogDate     DATETIME,
      ProcessInfo NVARCHAR(50),
      [Text] NVARCHAR(MAX))

CREATE TABLE #logF (
      ArchiveNumber     INT,
      LogDate           DATETIME,
      LogSize           INT
)
INSERT INTO #logF
EXEC sp_enumerrorlogs
SELECT @lC = MIN(ArchiveNumber) FROM #logF

WHILE @lC IS NOT NULL
BEGIN
      INSERT INTO #TempLog
      EXEC sp_readerrorlog @lC
      SELECT @lC = MIN(ArchiveNumber) FROM #logF
      WHERE ArchiveNumber > @lC
END

--Failed login counts. Useful for security audits.
SELECT 'Failed - ' + CONVERT(nvarchar(5), COUNT(Text)) + ' attempts' AS [Login Attempt], Text AS Details
FROM #TempLog
where ProcessInfo = 'Logon'
and Text like '%failed%'
Group by Text

--Find Last Successful login. Useful to know before deleting "obsolete" accounts.
SELECT Distinct 'Successful - Last login at (' + CONVERT(nvarchar(64), MAX(LogDate)) + ')' AS [Login Attempt], Text AS Details
FROM #TempLog
where ProcessInfo = 'Logon' and Text like '%succeeded%'
and Text not like '%NT AUTHORITY%'
Group by Text

DROP TABLE #TempLog
DROP TABLE #logF
-------------------------------------------------------------------------
--列出当前数据库实例的版本和从开机到现在为止数据库实例已经运行了多少天
SELECT  SUBSTRING(CONVERT(VARCHAR, SERVERPROPERTY('servername')), 1, 40) 'Instance' ,
        CONVERT(SYSNAME, @@version) 'Version' ,
        DATEDIFF(d, crdate, GETDATE()) 'Days Online'
FROM    master.dbo.sysdatabases
WHERE   name = 'tempdb'

--crdate 数据库创建时间,因为tempdb是SQL启动的时候才创建的,所以过滤条件选择tempdb
SELECT * FROM master.dbo.sysdatabases

 

 

如有不对的地方,欢迎大家拍砖o(∩_∩)o

时间: 2024-08-03 08:36:52

REDGATE又一好用的脚本工具ScriptsManager1.3的相关文章

ORACLE DBA常用SQL脚本工具-&amp;amp;gt;管理篇(1)

oracle|脚本 在较长时间的与oracle的交往中,每个DBA特别是一些大侠都有各种各样的完成各种用途的脚本工具,这样很方便的很快捷的完成了日常的工作,下面把我常用的一部分展现给大家,此篇主要侧重于数据库管理,这些脚本都经过严格测试.  1. 表空间统计  A.    脚本说明: 这是我最常用的一个脚本,用它可以显示出数据库中所有表空间的状态,如表空间的大小.已使用空间.使用的百分比.空闲空间数及现在表空间的最大块是多大. B.脚本原文: SELECT upper(f.tablespace_

execline 1.1.2发布 一款优秀的脚本工具

execline 1.1.2从本版本开始,forx和forbactickx退出循环命令使用-X选项时采用相同的代码.这在一个循环测试失败时非常有用. execline是一款优秀的脚本工具,对那些需要处理大量脚本,或能够(同时)执行许多次的脚本,或应用嵌套环境的开发者更是如此. 许多人用bash,或"sh"(它一般,但并非总是指bash)编写shell脚本.其它shell也有执行shell脚本的功能,但由shell执行shell脚本的问题在于:它们可能占用更多内存,因为如果你从一个she

execline 1.1.0发布 一款优秀的脚本工具

execline是一款优秀的脚本工具,对那些需要处理大量脚本,或能够(同时)执行许多次的脚本,或应用嵌套环境的开发者更是如此. 许多人用bash,或"sh"(它一般,但并非总是指bash)编写shell脚本.其它shell也有执行shell脚本的功能,但由shell执行shell脚本的问题在于:它们可能占用更多内存,因为如果你从一个shell中执行shell脚本,你要运行两个而不是一个shell. execline 1.1.0本次发布的作品与skalibs-1.0.0一起进行了改进新的

shell结合expect写的批量scp脚本工具_linux shell

在部署一个任务时,其中有一项必须的过程就是将一些文件,如安装包发送到大量的服务器上去.虽然已有宇哥的脚本可用:通过paramiko模块提供的ssh和scp功能编写的python脚本.但我到现在还在对python的恐惧之中(虽然已经在空闲时间努力去学习了),所以使用了shell和expect脚本结合的方式,写了这个批量scp的脚本工具. expect用于自动化地执行linux环境下的命令行交互任务,例如scp.ssh之类需要用户手动输入密码然后确认的任务.有了这个工具,定义在scp过程中可能遇到的

ArcGIS使用Python脚本工具

    在Pyhton写的一些代码,用户交互不方便,用户体验比较差,不方便重用.在ArcGIS中可以将用写的Python代码导入到ToolBox中,这样用起来就比较方便了.这里用按要素裁剪栅格的Python来演示如何导入ArcGIS中.代码如下: import sys reload(sys) sys.setdefaultencoding( "utf-8" ) import arcpy import string from arcpy.sa import * try: raster =

数据库安装包和升级包脚本工具RedGate使用介绍_数据库其它

这篇日志记录一下我在公司所学习到的数据库安装包的设计.正好这些内容也是我最近工作遇到的一些问题,在此记录并分享一下. 在产品的开发和版本更新过程中,数据库的结构难免会一直发生变化.为了尽量减少升级时的工作量,设计一个好的数据库升级方式就显得很重要.在设计数据库安装包时,既要考虑到全新安装时如何生成默认数据,也要考虑从老版本升级时旧的数据如何迁移如有必要). 基本上,安装包可以分成三个部分:Pre-script,数据库安装或升级和Post-script. 一.数据库安装或升级 首先,我们使用到的是

谈一谈在工作过程中搜集的.NET小工具小程序 数据库脚本工具 VS2010/2012风格的界面框架

原文 http://www.cnblogs.com/JamesLi2015/archive/2013/05/23/3094294.html 工作中遇到的问题,经常会在网络上搜集一些相关的内容,以此扩展以解决相同性质的问题,StackOverflow,CodeProject,CodPlex是我经常查找内容的网站.以下分享我找到的一些比较有典型意义的程序,列举工作中中可以能会遇到的场景和解决方法. SQL Server Runner 网址:http://www.codeproject.com/Art

Solr/Lucene日志分析-查询热点词-脚本工具

solr/lucene 在中文搜索使用中,会输出非常多的类似下面的内容: 2012-04-24 00:00:01,396 INFO [org.apache.solr.core.SolrCore] - [XXXX-0] webapp=null path=/select params={q=status:0+AND+(img_file_id:(++12333018751568476))&timeAllowed=2000sort=gmtcreate+desc&rows=60&start=

execline 1.1.4发布 一款优秀的脚本工具

execline 是一款轻巧.非交互式的脚本语言,类似于shell,但它的语法完全不同于传统的shell语法.简单的shell脚本易于在execline语言中改写,提高了性能和内存使用.execline设计为在嵌入式系统中使用,支持大多数Unix系统,对那些需要处理大量脚本,或能够(同时)执行许多次的脚本,或应用嵌套环境的开发者更是如此. execline 1.1.4该版本修正了loopwhile程序中的错误. 软件信息:http://www.skarnet.org/software/execl