Category Archives: All_The_Basics

Get Tivoli Info

IBM Tivoli Monitoring Service is a software used to monitor SQL servers

In order to install it, the team supporting IBM Tivoli will ask you for the information below.

The information needs to be input in a spreadsheet, which is why it's presented "horizontally" rather than in a vertical table.

(the "creation of ID" is at the bottom of the post)


/*
DESCRIPTION    Get INFO for setting up Tivoli Monitoring
 
CONFIGURATION   none
 
Compatibility list:
MSSQL2005
MSSQL2008
MSSQL2000 -- Tivoli Not supported
 
 */

SET NOCOUNT ON
DECLARE @hostname NVARCHAR(40)
DECLARE @instancename SQL_VARIANT
DECLARE @DBHome NVARCHAR(1000)
DECLARE @Version  SQL_VARIANT
DECLARE @SQLBitLevel NVARCHAR(6)
DECLARE @OSBitLevel NVARCHAR(6)
DECLARE @ErrorLog NVARCHAR(100)
DECLARE @LoginName NVARCHAR(8)
DECLARE @Passwd NVARCHAR(8)

/*---- working variables ----*/
DECLARE @Inst VARCHAR(100)
DECLARE @InstanceLocation VARCHAR(200)
DECLARE @RegKeyLoc	VARCHAR(200)

-- This section concatenate the hostnames
-- if this is a cluster

 SELECT @hostname=coalesce(@hostname,'') + ' ; ' + Nodename
FROM ::fn_virtualservernodes()

SET @hostname= coalesce((SUBSTRING(@hostname,4,len(@hostname))), convert(VARCHAR(40),serverproperty('ComputerNamePhysicalNetBIOS')))
SET @InstanceName = SERVERPROPERTY('servername')

-- Location of Instance on REGISTRY		
SET @Inst = isnull(convert(VARCHAR, ServerProperty('InstanceName')),'MSSQLSERVER')

	EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
		@key='Software\Microsoft\Microsoft SQL Server\Instance Names\SQL',
		@value_name=@Inst,
		@value=@InstanceLocation OUTPUT

-- Location of the Binaries

	SET @RegKeyLoc = 'Software\Microsoft\Microsoft SQL Server\'+@InstanceLocation+'\Setup'

	EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
		@key=@RegKeyLoc,
		@value_name='SQLPath',
		@value=@DBHome OUTPUT
  
-- Location of Errorlog
SET @RegKeyLoc= 'Software\Microsoft\Microsoft SQL Server\'+@InstanceLocation+'\MSSQLServer\Parameters'

	EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
		@key=@RegKeyLoc,
		@value_name='SQLArg1',
		@value=@ErrorLog OUTPUT

SET @ErrorLog= REPLACE(@ErrorLog,'-e','')

Set @Version = serverproperty('edition')

SET @SQLBitLevel=
	case   
		when (charindex('64',convert(nVARCHAR(30),@version))>0) then  '64-bit'
		else '32-bit'
	end  

Set @OSBitLevel=@SQLBitLevel
Set @LoginName = 'Tivoli'

SELECT 
  @hostname		'hostname'
, @instancename 'instance name'
, @DBHome		'DB Home'
, @Version		'Version'
, @SQLBitLevel	'SQL Bit Level'
, @OSBitLevel	'OS Bit Level'
, @ErrorLog		'ErrorFullPath'
, @LoginName	'login name'
, @Passwd		'password'



Usually, Tivoli requires a SQL login, and here is the code that creates the ID:


IF EXISTS (SELECT name FROM SYSLOGINS WHERE name = 'Tivoli')
ALTER LOGIN [tivoli] WITH PASSWORD=N'Tiv0l1paSS' UNLOCK
ELSE
CREATE LOGIN [Tivoli] WITH PASSWORD=N'Tiv0l1paSS' MUST_CHANGE, DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON

ALTER SERVER ROLE [sysadmin] ADD MEMBER [Tivoli]

Running on Virtual or Physical

The trick to find out if SQL is running on a physical server or a VM is to read the ERRORLOG. Every time SQL starts (or the ERRORLOG is recycled), the "system manufacturer" is logged.

If it says "VMWare, Inc", then the server is running in a virtual environment. If it doesn't say "VMWare, Inc". then it's a physical server.


exec sp_readerrorlog 0,1,'System Manufacturer'



 

Example 

This server is running on a Virtual Machine:

Virtual

 

This Server is running on a Physical Machine (and the server was made by IBM):

Physical

 

Cluster Info

Basic info for a cluster.

Pay attention to "where am I"… so you know if you are in the right node.


/*
Basic Cluster Info
*/
DECLARE @name AS VARCHAR(40)

SELECT @name=COALESCE(@name,'') + ' ; ' + Nodename
FROM ::fn_virtualservernodes()

SELECT
 SERVERPROPERTY('isclustered')	 'Is Cluster?'
,SUBSTRING(@name,4,len(@name))	 'NodesOFCluster'
,SERVERPROPERTY('ComputerNamePhysicalNetBIOS')	  'ActiveNode'
,HOST_NAME()			 'where am I?'
,SERVERPROPERTY('ServerName')	 'SQLServerName'
,COALESCE(SERVERPROPERTY('InstanceName'),'DEFAULT') 'InstanceName'

Example

Here we have a THREE nodes cluster, and SQL is running on Server B.  We are running our SSMS on ServerC.

ClusterInfo

SQL Version

Basic Server Info to obtain SQL Version and OS Version.


/*
Basic Info
*/

SELECT
SERVERPROPERTY('ServerName')	 'SQLServerName',
COALESCE(SERVERPROPERTY('InstanceName'),'DEFAULT') 'InstanceName',
SERVERPROPERTY('ProductVersion') 'ProductVersion',
SERVERPROPERTY('ProductLevel')   'ProductLevel',
SERVERPROPERTY('Edition')		 'Edition',
CASE 
WHEN RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 6.2 then 'Windows 2012'
WHEN RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 6.1 then 'Windows 2008R2'
WHEN RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 6.0 then 'Windows 2008'
WHEN RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 5.2 then 'Windows 2003'
WHEN RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 5.1 then 'Windows XP'
WHEN RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 5.0 then 'Windows 2000'

ELSE RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)
END	'Windows Version'

Example

SQLVersion

Database Size Totals

Very simple script that list the total size of a database and its transaction log.

If you need for SQL 2000 click here

 



/*
DESCRIPTION    List space used on databases
 
CONFIGURATION    none

 
Compatibility list:
MSSQL2012
MSSQL2008
MSSQL2005

DOES NOT WORK
MSSQL2000

 
*/


SELECT
    SERVERPROPERTY('SERVERNAME') ServerName,
    SERVERPROPERTY('IsClustered') IsCluster,
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    case 
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 6.3 then 'Windows 2012R2'
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 6.2 then 'Windows 2012'
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 6.1 then 'Windows 2008R2'
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 6.0 then 'Windows 2008'
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 5.2 then 'Windows 2003'
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 5.1 then 'Windows XP'
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 5.0 then 'Windows 2000'

else RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)
end,
    DB_NAME(db.database_id) DatabaseName,
    (CAST(mfrows.RowSize AS FLOAT)*8)/1024 RowSizeMB,
    (CAST(mflog.LogSize AS FLOAT)*8)/1024 LogSizeMB
FROM sys.databases db
    LEFT JOIN (
    SELECT database_id, SUM(size) RowSize 
    FROM sys.master_files 
    WHERE type = 0 
    GROUP BY database_id, type
				) mfrows ON mfrows.database_id = db.database_id
    
    LEFT JOIN (
    SELECT database_id, SUM(size) LogSize 
    FROM sys.master_files 
    WHERE type = 1 
    GROUP BY database_id, type
				) mflog ON mflog.database_id = db.database_id
WHERE
	db.database_id > 4

 

  For SQL 2000


/*
DESCRIPTION    List space used on databases
 
CONFIGURATION    none

 
Compatibility list:
MSSQL2000

 
*/

SELECT
    SERVERPROPERTY('SERVERNAME') ServerName,
    SERVERPROPERTY('IsClustered') IsCluster,
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    case 
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 6.3 then 'Windows 2012R2'
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 6.2 then 'Windows 2012'
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 6.1 then 'Windows 2008R2'
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 6.0 then 'Windows 2008'
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 5.2 then 'Windows 2003'
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 5.1 then 'Windows XP'
when RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)= 5.0 then 'Windows 2000'

else RIGHT(SUBSTRING(@@VERSION, CHARINDEX('Windows NT', @@VERSION), 14), 3)
end,
    DB_NAME(db.dbid) DatabaseName,
    (CAST(mfrows.RowSize AS FLOAT)*8)/1024 RowSizeMB,
    (CAST(mflog.LogSize AS FLOAT)*8)/1024 LogSizeMB
FROM sysdatabases db
    LEFT JOIN (
    SELECT dbid, SUM(size) RowSize 
    FROM master..sysaltfiles
    WHERE groupID = 1 
    GROUP BY dbid, groupID
				) mfrows ON mfrows.dbid = db.dbid
    
    LEFT JOIN (
    SELECT dbid, SUM(size) LogSize 
    FROM master..sysaltfiles
    WHERE groupID <> 1
    GROUP BY dbid, groupID
				) mflog ON mflog.dbid = db.dbid
WHERE
	db.dbid > 4