DBA常用腳本

例28.1  查看數據庫所在機器操作系統參數(xp_msver)
查看數據庫所在機器操作系統參數的存儲過程如下
EXEC master..xp_msver

例28.2  查看當前數據庫服務器名(xp_getnetname、HOST_NAME())
EXEC master..xp_getnetname
或者:
SELECT HOST_NAME()

例28.3  查看服務器上所有Windows本地組(xp_enumgroups)
查看服務器上所有Windows本地組的存儲過程如下
EXEC master..xp_enumgroups


例28.4  查看服務器上安裝的所有代碼頁(xp_enumcodepages)
查看服務器上安裝的所有代碼頁的存儲過程如下
EXEC master..xp_enumcodepages

嘿嘿,是不是報沒開啓錯誤啊~~沒錯誤略過
先執行下面語句

USE master;

GO

EXEC sp_configure 'show advanced option', '1';

RECONFIGURE

EXEC sp_configure 'Web Assistant Procedures',1

RECONFIGURE

EXEC sp_configure

例28.5  查看指定目錄的所有下一級子目錄(xp_subdirs)
查看C:\WINDOWS\Drivers目錄所有下一級子目錄的存儲過程如下

EXEC [master].[dbo].[xp_subdirs] 'C:\WINDOWS\Drivers'

查看磁盤信息的存儲過程如下

EXEC [master].[dbo].[xp_availablemedia]

或者採用下列語句

EXEC master..xp_fixeddrives

請注意:其中,low free爲以字節爲單位的空閒空間,media type爲驅動器類型,軟驅爲1,硬盤爲2,CD-ROM爲8。

例28.8  查看硬盤文件信息(xp_dirtree)

查看C盤文件信息的存儲過程如下
EXEC master..xp_dirtree 'c:'

查看C盤深度爲1的文件信息的存儲過程如下

EXEC master..xp_dirtree 'c:',1

查看C盤深度爲1、是否爲的信息的存儲過程如下

EXEC master..xp_dirtree 'c:',1,1

查看“C:\WINDOWS\Web”目錄中的文件信息的存儲過程如下

EXEC master..xp_dirtree 'C:\WINDOWS\Web'

例28.9  查看服務器提供的OLEDB程序(xp_enum_oledb_providers)

查看服務器提供的OLEDB程序的存儲過程如下

EXEC master..xp_enum_oledb_providers

例28.10  查看數據庫服務名(@@SERVERNAME)

print 'SQL Server數據庫服務名: ' +

     convert(varchar(30),@@SERVERNAME)

查看結果如下:

SQL Server數據庫服務名: SZX\SQLS2008

例28.11  查看數據庫實例名(@@SERVICENAME)

PRINT 'SQL Server數據庫實例名: ' +

    convert(varchar(30),@@SERVICENAME)

查看結果如下:

SQL Server數據庫實例名: MSSQLSERVER

例28.12  查看DBMS數據庫的版本(@@version、sp_msgetversion)
查看DBMS版本的命令如下
SELECT @@version SQL_Server版本
或者
EXEC master..sp_msgetversion

例28.13  查看數據庫配置參數(sp_configure)
查看數據庫配置參數的存儲過程如下
EXEC sp_configure

例28.14  查看所有數據庫名稱、容量等信息(sp_helpdb、sp_databases)
sp_helpdb
或sp_databases
查看單個數據庫的容量:如sql92_exam_xjgl
sp_helpdb sql92_exam_xjgl

例28.15  查看所有數據庫名稱及大小(sp_helpdb)

查看所有數據庫名稱及大小的存儲過程如下
EXEC sp_helpdb

例28.16  修改數據庫的名稱(sp_renamedb)
EXEC sp_renamedb 'old_dbname', 'new_dbname'

例28.17  查看當前數據庫的啓動時間(sysprocesses)
SELECT convert(varchar(30),login_time,120)啓動時間

FROM master..sysprocesses

WHERE spid=1

例28.18  查看當前數據庫文件路徑等信息(sp_helpfile)

sp_helpfile

例28.19  查看AdventureWorks數據庫文件路徑(sysfiles)
SELECT ltrim(rtrim(filename))

FROM AdventureWorks..sysfiles

WHERE charindex('MDF',filename)>0

查看結果如下:

C:\Program Files\Microsoft SQL Server\100\Tools\Samples\

AdventureWorks_Data.mdf

例28.20  查看當前數據庫文件組名(sp_helpfilegroup)

sp_helpfilegroup

例28.21  查看當前數據庫中所有的存儲過程(sysobjects)

查看當前數據庫中所有存儲過程的命令如下

SELECT name as存儲過程名稱FROM sysobjects WHERE xtype='P'

例28.22  查看數據庫裏所有的存儲過程和函數(sp_stored_procedures)
查看某個數據庫裏所有存儲過程和函數的命令如下

use AdventureWorks

GO

EXEC sp_stored_procedures

例28.23  查看所有數據庫日誌文件大小(dbcc sqlperf())

查看所有數據庫日誌文件大小的命令如下

dbcc sqlperf(logspace)

例28.24  查看SQL Server錯誤日誌(xp_enumerrorlogs、xp_readerrorlog)

(1)查看SQL Server錯誤日誌信息

EXEC master..xp_enumerrorlogs

(2)查看當前錯誤日誌具體內容

EXEC [master].[dbo].[xp_readerrorlog]

例28.25  查看數據庫角色信息(sp_helpRole)

查看數據庫角色信息的存儲過程如下

EXEC sp_helpRole

例28.26  查看所有數據庫用戶所屬的角色信息(sp_helpsrvrolemember)

查看所有數據庫用戶所屬角色信息的存儲過程如下

EXEC sp_helpsrvrolemember

例28.27  查看角色成員用戶信息(sp_helpRoleMember)

查看角色成員用戶信息的存儲過程如下

EXEC sp_helpRoleMember 'db_owner'

例28.28  查看當前數據庫所有用戶信息(sp_helpUser)

查看數據庫用戶信息的存儲過程如下

EXEC sp_helplogins

例28.29  查看本地數據庫用戶登錄信息(sp_helplogins)

查看本地數據庫用戶登錄信息的存儲過程如下

EXEC sp_helplogins

 
例28.30  查看遠端數據庫用戶登錄信息(sp_helpremotelogin )

查看遠端數據庫用戶登錄信息的存儲過程如下

EXEC sp_helpremotelogin

例28.31  查看鏈接服務器的登錄信息(sp_helplinkedsrvlogin)

查看鏈接服務器信息的存儲過程如下

EXEC sp_helplinkedsrvlogin

例28.32  將用戶賬戶添加到數據庫中(sp_grantdbaccess)

將guest用戶賬戶添加到數據庫中的命令如下:

USE sql92_exam_xjgl

GO

EXEC sp_grantdbaccess guest

例28.33  查看數據庫下對象級用戶權限(sp_helprotect)

查看數據庫下對象級用戶權限的存儲過程如下

EXEC sp_helprotect
例28.34  獲得當前數據庫所有用戶表的名稱(sysobjects)

獲得當前數據庫所有用戶表名稱的命令如下

SELECT OBJECT_NAME (id)

FROM sysobjects

WHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0

例28.36  查詢單個用戶創建的所有數據庫(sysdatabases)

查詢sa用戶創建的所有數據庫的命令如下

SELECT name,dbid,filename

FROM master..sysdatabases D

WHERE sid not in(SELECT sid FROM master..syslogins WHERE name='sa')


或者通過以下命令實現:

SELECT dbid, name AS DB_NAME,filename

FROM master..sysdatabases

WHERE sid <> 0x01


例28.37  查看一個表上相關的對象(sysobjects、syscomments)

查詢一個表上相關對象的命令如下

SELECT a.* FROM sysobjects a, syscomments b

WHERE a.id = b.id and b.text like '%teacher%'

例28.38  獲取某一個表的所有字段(syscolumns、sp_mshelpcolumns)

獲取某一個表的所有字段的命令如下

SELECT name FROM syscolumns WHERE id=object_id('teacher')

或者通過以下存儲過程實現

EXEC sp_mshelpcolumns  'teacher'

例28.39  獲得指定表上所有的索引名稱(sysindexes)

通過系統表sysindexes獲得指定表上所有索引名稱的命令如下

SELECT name FROM sysindexes

WHERE id = OBJECT_ID ('dept') AND indid > 0

例28.40  查詢某一個表的字段和數據類型(information_schema.columns)

查詢某一個表的字段和數據類型的命令如下

SELECT column_name,data_type

FROM information_schema.columns

WHERE table_name = N'teacher'

例28.41  獲取某一個表的基本信息(sp_MShelpcolumns)

獲取某一個表的基本信息的存儲過程如下

EXEC sp_MShelpcolumns N'teacher'

例28.42  獲取某一個表的主鍵、外鍵信息(sp_pkeys、sp_fkeys)

獲取表teacher的主鍵信息的存儲過程如下

EXEC sp_pkeys N'teacher'

獲取表teacher的外鍵信息的存儲過程如下:

EXEC sp_fkeys   N'teacher'

例28.43  判斷某一個表是否存在某一字段(syscolumns)

通過系統表syscolumn判斷某一個表是否存在某一字段的命令如下:

if exists(SELECT 1 FROM syscolumns

            WHERE id=object_id(N'teacher') and name=N'tname')

    print  N'存在'

else

    print  N'不存在'

例28.44  查看單個存儲過程和函數的源代碼(sp_helptext)

查看單個存儲過程和函數源代碼的存儲過程如下

USE AdventureWorks

GO

EXEC sp_helptext 'dbo.uspLogError'

例28.45  查看數據庫裏用戶和進程的信息(sp_who)

(1)查看數據庫裏用戶和進程信息

EXEC sp_who

其中,spid是進程編號,進程號1--50是SQL Server系統內部用的,進程號大於50的是用戶的連接進程。

(2)查看活動用戶和進程信息的存儲過程如下

EXEC sp_who 'active'

例28.46  清除sleeping進程(Kill__Sleeping_Processes)

Sleeping進程是系統中處於睡眠狀態尚未活動的進程,這部分進程可以殺掉。

CREATE PROCEDURE dbo.Kill__Sleeping_Processes @dbname varchar(50)

AS

BEGIN

SET NOCOUNT ON

DECLARE @spid INT,

@cnt INT,

@sql VARCHAR(255)

SELECT @spid = MIN(spid),@cnt = COUNT(*)

FROM master..sysprocesses

WHERE dbid = DB_ID(@dbname) AND spid != @@SPID AND status = 'sleeping'

WHILE @spid IS NOT NULL

BEGIN

SET @sql = 'KILL ' + RTRIM(@spid)

EXEC ( @sql )

SELECT @spid = MIN(spid),@cnt = COUNT(*)

FROM master..sysprocesses

WHERE dbid = DB_ID(@dbname) AND spid != @@SPID AND status = 'sleeping'

END

END

GO

運行改存儲過程後殺掉sleeping進程:

Kill__Sleeping_Processes SQLS2008

  清除前後可以用EXEC sp_who 'active '進行查看。

例28.47  查看進程正在執行的SQL語句(dbcc inputbuffer ())

查看進程正在執行的SQL語句:dbcc inputbuffer (spid)

其中spid是用sp_who查詢出來的spid號,如:56。

查看56號進程正在執行的SQL語句實例如下

dbcc inputbuffer (56)

例28.48  查看數據庫鎖(sp_lock)

查看SQL Server數據庫裏鎖的情況的存儲過程如下

EXEC sp_lock

其中,spid是進程編號,dbid是數據庫編號,Objid是數據對象編號。

例28.49  查看數據庫死鎖的進程(proc_who_lock)

用proc_ find _lock過程查看數據庫死鎖的進程。

if exists (SELECT *

           FROM dbo.sysobjects

           WHERE id = object_id(N'[dbo].[proc_find_lock]')

           and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[proc_find_lock]

GO

use master

go

create procedure proc_find_lock

as

begin

declare @spid int,@bl int,

@intTransactionCountOnEntry int,

         @intRowcount int,

         @intCountProperties int,

         @intCounter int

create table #temp_lock (

id int identity(1,1),

spid smallint,

bl smallint)

IF @@ERROR<>0 RETURN @@ERROR

insert into #temp_lock(spid,bl)

   SELECT   0 ,blocked

   FROM (SELECT * FROM sysprocesses WHERE   blocked>0 ) a

   WHERE not exists(SELECT *

                    FROM (SELECT *

                          FROM sysprocesses

                          WHERE   blocked>0 ) b

                    WHERE a.blocked=spid)

   union SELECT spid,blocked

         FROM sysprocesses

         WHERE   blocked>0

IF @@ERROR<>0 RETURN @@ERROR

   SELECT @intCountProperties = Count(*),@intCounter = 1  --找到臨時表的記錄數

   FROM #temp_lock

IF @@ERROR<>0 RETURN @@ERROR

   if @intCountProperties=0

      SELECT '沒有阻塞和死鎖信息' as 提示

while @intCounter <= @intCountProperties

begin

SELECT @spid = spid,@bl = bl

FROM #temp_lock WHERE Id = @intCounter

begin

if @spid =0

    SELECT '引起數據庫死鎖的進程號是: '+ CAST(@bl AS VARCHAR(10))

           + ',其執行的SQL語句爲:'

else

    SELECT '進程號SPID:'+ CAST(@spid AS VARCHAR(10))

           + '被' + '進程號SPID:'+ CAST(@bl AS VARCHAR(10))

           +'阻塞,其當前進程執行的SQL語句爲:'

DBCC INPUTBUFFER (@bl )

end

set @intCounter = @intCounter + 1

end

drop table #temp_lock

return 0

end

運行過程proc_find_lock

proc_find_lock

例28.50  備份當前數據庫(backup database)

(1)完全備份

declare @a sysname,@s nvarchar(4000)

SELECT @a=db_name(),@s='e:\sql_db_bak_full' backup database @a to disk=@s WITH format

已爲數據庫'sql92_exam_xjgl',文件'sql92_example'(位於文件1上)處理了240頁。

已爲數據庫'sql92_exam_xjgl',文件'sql92_example_log'(位於文件1上)處理了1頁。

BACKUP DATABASE成功處理了241頁,花費0.101秒(19.547 MB/秒)。

(2)差異備份

declare @a sysname,@s nvarchar(4000)

SELECT @a=db_name(),@s='e:\sql_db_bak_diff' backup database @a to disk=@s WITH DIFFERENTIAL,format

已爲數據庫'sql92_exam_xjgl',文件'sql92_example' (位於文件1上)處理了40頁。

已爲數據庫'sql92_exam_xjgl',文件'sql92_example_log' (位於文件1上)處理了1頁。

BACKUP DATABASE WITH DIFFERENTIAL成功處理了41頁,花費0.095秒(3.530 MB/秒)。

  差異備份要在至少有一次完全備份成功之後才能實施,否則出錯。

例28.51  從磁帶中恢復完整的數據庫備份

從磁帶中恢復sql92_exam_xjgl的完整數據庫備份。

USE master

GO

RESTORE DATABASE  sql92_exam_xjgl

   FROM TAPE = '\\.\Tape0'

GO

例28.52  在脫機狀態下進行數據庫備份和恢復

在脫機狀態下對sql92_exam_xjgl數據庫進行備份和恢復。

步驟如下:

 卸載需要進行備份恢復的sql92_exam_xjgl數據庫。

在master數據庫下新建下列查詢分析語句:

Sp_detach_db  'sql92_exam_xjgl'

運行結果爲:命令已成功完成。

 複製sql92_exam_xjgl 庫的sql92_example.mdf文件和sql92_example_log.ldf文件到E:\下。 

 啓動數據庫服務器進行恢復。

sp_attach_db 'sql92_exam_xjgl',

'E:\sql92_example.mdf', 'E:\sql92_example_log.ldf'

運行結果爲:命令已成功完成。

當恢復單個mdf文件採用下列語句:

sp_attach_single_file_db 'sql92_exam_xjgl','E:\sql92_example.mdf''
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章