SQL SERVER 數據庫日常維護,管理,巡檢過程中你可能經常需要用到一些SQL語句(亦或方法)來查看數據庫服務器環境(操作系統版本, 磁盤空間,CPU,RAM信息),數據庫信息(數據庫版本,實例名稱...),數據庫對象等。
查看數據庫信息
查看數據庫服務器名稱
方法1:SQL腳本查詢,可以通過下面腳本來查詢。
默認實例
- SELECT @@SERVERNAME AS SERVERNAME;
- SELECT SERVERPROPERTY('servername') AS ServerName;
- SELECT srvname AS ServerName FROM sys.sysservers;
- SELECT SERVERPROPERTY('MachineName') AS ServerName
命名實例
- SELECT SUBSTRING(@@SERVERNAME, 0, CHARINDEX('\', @@SERVERNAME))AS SERVERNAME;
- SELECT SUBSTRING(CONVERT(VARCHAR(100),SERVERPROPERTY('servername')), 0, CHARINDEX('\',CONVERT(VARCHAR(100),SERVERPROPERTY('servername')))) AS ServerName;
- SELECT SUBSTRING(srvname, 0, CHARINDEX('\', srvname)) AS ServerName FROM sys.sysservers;
- SELECT SERVERPROPERTY('MachineName') AS ServerName
方法2:在數據庫實例單擊右鍵,選擇“屬性”——》“常規”選項里面,你可以看到服務器名稱(划紅線部分)
方法3:都不好意思說了,你懂的。
查看數據庫實例名稱
方法1:去服務(services.msc)里面查找SQL Server(××××)這樣的服務,有多少個就就有多少數據庫實例,一般默認實例是SQL Server (MSSQLSERVER)
方法2:去SQL配置管理器的SQL Server服務配置里面找上面描述的服務。
方法3:腳本查詢,只是截取數據庫服務名稱的實例名(其實這個還真沒必要,通過上面的腳本就可查看實例,注意默認實例)
- SELECT @@SERVICENAME AS InstantName;
- SELECT ISNULL(SERVERPROPERTY('InstanceName'),'MSSQLSERVER') AS InstanceName;
下面腳本僅對命名實例有效,默認實例查詢處理的是計算機名稱
- SELECT SUBSTRING(@@SERVERNAME,CHARINDEX('\', @@SERVERNAME)+1,100) AS InstantName;
- SELECT SUBSTRING(srvname, CHARINDEX('\', srvname) +1, 100) AS InstantName FROM sys.sysservers;
查看數據庫版本號
方法1:SQL 1:
- SELECT SERVERPROPERTY('productversion') AS ProductVersion ,
- SERVERPROPERTY('productlevel') AS ProductLevel ,
- SERVERPROPERTY('edition') AS Edition
方法2:SQL 2: 看起來比較麻煩
- SELECT @@VERSION AS PRODUCT_VERSION;
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59
Copyright (c) 1988-2005 Microsoft Corporation
Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
如何從 9.00.4035.00 (Intel X86) 讀取一些信息呢?
第一個數字:8 代表2000版本, 9 代表2005版本, 10 代表2008 版本
第二個數字:50 代表R2版本, 00 代表非R2版本
第三個數字:如上所示4035中第一個數字4代表打了補丁SP3,其規則如下所示
1: 代表沒有打補丁
2: 代表打了SP1補丁
3: 代表打了SP2補丁,以此類推
035 : 代表相關的hotfix版本,我們在進行升級,備份,恢復一定要看清楚這個版本,只有在同一版本下的相關數據才能進行恢復(同版本備份文件),這點要注意。
方法3:在數據庫實例上單擊右鍵,選擇“屬性”——》“常規”選項里面,你可以看到服務器名稱,平台,操作系統,數據庫版本信息。
查看數據庫已經打的補丁
方法1:如上所示,可以通過9.00.4035.00 (Intel X86) 來確定已經數據庫已經打的最新補丁SP3。
方法2:在數據庫實例上單擊右鍵,選擇“屬性”——》“常規”選項里面,可以通過看到的版本信息查看補丁
方法3:在SQL配置管理器,找到相應的實例的SQL Server服務,單擊右鍵屬性.
查看實例數據庫的相關信息
查看實例有哪些數據庫,創建時間、排序規則.......
方法1:SQL 查詢. 其實在視圖sys.databases里面你可以查看很多關於數據庫的信息,例如,數據庫用戶訪問設置,數據庫的狀態......
SELECT * FROM sys.databases
方法2: 在Mircrosoft SQL Server Management Studio管理器里面查看。
查看排序規則信息
1:查看實例排序規則
SELECT SERVERPROPERTY(N'Collation')
2:查看數據庫排序規則
SELECT name, collation_name FROM sys.databases
查詢當前數據庫的磁盤使用情況
如需要查詢其他數據庫,則需在前面指定數據庫名稱
EXEC sp_spaceused;
查看數據庫啟動相關參數
EXEC sp_configure;
查看數據庫啟動時間
方法1:
- SELECT CONVERT(VARCHAR(30), LOGIN_TIME,120) AS StartDateTime
- FROM master..sysprocesses WHERE spid=1
查看所有數據庫名稱及大小
方法1:
EXEC sp_helpdb;
方法2:
- SELECTdatabase_id AS DataBaseId ,
- DB_NAME(database_id) AS DataBaseName ,
- CAST(SUM(SIZE) * 8.0 / 1024 AS DECIMAL(8, 4)) AS [Size(MB)]
- FROMsys.master_files
- GROUP BY database_id
查看所有數據庫用戶登錄信息
EXEC sp_helplogins;
查看所有數據庫用戶所屬的角色信息
EXEC sp_helpsrvrolemember
更改某個數據對象的用戶屬主
sp_changeobjectowner [@objectname =] 'object', [@newowner =] 'owner'
注意:更改對象名的任一部分都可能破壞腳本和存儲過程。把一台服務器上的數據庫用戶登錄信息備份出來可以用add_login_to_aserver腳本。查看某數據庫下,對象級用戶權限sp_helprotect
查看鏈接服務器
EXEC sp_helplinkedsrvlogin
查看遠端數據庫用戶登錄信息
sp_helpremotelogin
查看數據庫下某個數據對象的大小
sp_spaceused @objname
查看某數據庫下某個數據對象的索引信息
sp_helpindex @objname
查看某數據庫下某個數據對象的的約束信息
sp_helpconstraint @objname
查看表的相關信息
方法1:
sp_help 'TABLE_NAME'
方法2:
sp_desc 參考我的博客MS SQL 模仿ORACLE的DESC
修復遷移服務器時孤立用戶時
方法1:
USE {目標數據庫}
EXEC sp_change_users_login 'Update_One', '{目標數據庫已存在的用戶名}', '{創建的登錄用戶名}'
方法2
- declare @cmd nvarchar(4000)
- set @cmd = N'exec [?].sys.sp_change_users_login @Action = ''Auto_Fix''
- , @UserNamePattern = ''qa''
- , @LoginName = null
- , @Password = ''abc'' '
- exec sp_msforeachdb@cmd
查看數據庫數據文件情況
查看數據庫實例各個數據庫的數據文件信息
方法1: 選擇某個數據庫,然后單擊右鍵屬性...(后面我就不說了,不知道的自己百度)
方法2:SQL
- SELECT database_id AS DataBaseId ,
- DB_NAME(database_id) AS DataBaseName ,
- Name AS LogicalName ,
- type_desc AS FileTypeDesc ,
- Physical_Name AS PhysicalName ,
- State_Desc AS StateDesc ,
- CASE WHEN max_size = 0 THEN N'不允許增長'
- WHEN max_size = -1 THEN N'自動增長'
- ELSE LTRIM(STR(max_size * 8.0 / 1024 / 1024, 14, 2)) + 'G'
- END AS MaxSize ,
- CASE WHEN is_percent_growth = 1
- THEN RTRIM(CAST(Growth AS CHAR(10))) + '%'
- ELSE RTRIM(CAST(Growth AS CHAR(10))) + 'M'
- END AS Growth ,
- Is_Read_Only AS IsReadOnly ,
- Is_Percent_Growth AS IsPercentGrowth ,
- CAST(size * 8.0 / 1024 / 1024 AS DECIMAL(8, 4)) AS [Size(GB)]
- FROM sys.master_files
查看單個數據庫的數據文件信息:
SQL 1:上面SQL加上查詢條件
SQL 2:
- SELECT Name AS DataBaseName ,
- Physical_Name AS PhysicalName ,
- type_desc AS FileTypeDesc ,
- State_Desc AS StateDesc ,
- (( size * 8.0 ) / 1024 / 1024 ) AS [Size(GB)] ,
- CASE WHEN max_size = 0 THEN N'不允許增長'
- WHEN max_size = -1 THEN N'自動增長'
- ELSE LTRIM(STR(max_size * 8.0 / 1024 / 1024, 14, 2)) + 'G'
- END AS MaxSize ,
- CASE WHEN is_percent_growth = 1
- THEN RTRIM(CAST(Growth AS CHAR(10))) + '%'
- ELSE RTRIM(CAST(Growth AS CHAR(10))) + 'M'
- END AS Growth ,
- Is_Read_Only AS IsReadOnly ,
- Is_Percent_Growth AS IsPercentGrowth ,
- CAST(size * 8.0 / 1024 / 1024 AS DECIMAL(8, 4)) AS [Size(GB)]
- FROM sys.database_files ;
SQL 3:
- SELECT fileid AS FileId ,
- groupid AS GroupId ,
- size AS DataBaseSize ,
- growth AS Growth ,
- perf AS Perf ,
- name AS NAME ,
- filename AS FILENAME
- FROM MESDB.dbo.sysfiles ;
查看數據庫服務器各數據庫日志文件的大小及利用率/狀態
DBCC SQLPERF(LOGSPACE)
查看當前數據庫的文件狀態
EXEC ('DBCC showfilestats')
查看數據庫存儲過程
查看有哪些存儲過程
方法1:
EXEC sp_stored_procedures;
方法2:
SELECT * FROM sys.procedures;
方法3:
SELECT * FROM sys.sysobjects WHERE xtype='P';
查看存儲過程基本信息
EXEC sp_help 'dbo.sp_who_lock'
查看存儲過程源代碼:
方法1:
EXEC sp_helptext 'procedureName'
方法2:
SELECT *
FROM SYS.SQL_MODULES
WHERE object_id = OBJECT_ID(N'procedureName')
方法3:
- SELECT s.text AS ProcedureText ,
- s.encrypted AS Encrypted ,
- s.number AS number ,
- CONVERT(NCHAR(2), o.xtype) AS xtype ,
- DATALENGTH(s.text) AS ProcedureLen
- FROMdbo.syscomments s ,
- dbo.sysobjects o
- WHEREo.id = s.id
- AND s.id = OBJECT_ID(N'procedureName')
- ORDER BY s.number ,
- s.colid
- OPTION ( ROBUST PLAN )
服務器環境信息
查看數據庫所在機器操作系統參數
方法1:
EXEC master..xp_msver
詳解:xp_msver返回有關 Microsoft SQL Server 的版本信息。xp_msver 還返回有關服務器的實際內部版本號的信息以及服務器環境的有關信息,例如處理器類型(不能獲取具體型號), RAM 的容量等等。用腳本基本上很難獲取詳細的硬件信息。
方法2:登錄服務器,直接查看服務器信息。
查看數據庫服務器磁盤分區剩余空間。
方法1:
EXEC master.dbo.xp_fixeddrives;
方法2:登錄服務器直接查看或用工具
方法3:請看MS SQL 監控磁盤空間告警里面介紹的方法
查看數據庫服務器磁盤容量信息
方法1:請看MS SQL 監控磁盤空間告警里面介紹的方法
方法2:登錄服務器直接查看或用工具
查看數據庫服務器CPU/內存的大概信息
- SELECT cpu_count AS [Logical CPU Count] ,
- hyperthread_ratio AS [Hyperthread Ratio] ,
- cpu_count / hyperthread_ratio AS [Physical CPU Count],
- physical_memory_in_bytes / 1048576 AS [Physical Memory (MB)] ,
- sqlserver_start_time
- FROMsys.dm_os_sys_info
- OPTION ( RECOMPILE ) ;
小結:用SQL查看服務器硬件信息,似乎不是個好主意,很難得到精確地信息,例如CPU型號、內存條的頻率