Friday, 29 January 2016

MS SQL Server - How to determine the active node on a cluster server

How to determine the active node on a cluster server

Select ServerProperty('ComputerNamePhysicalNetBIOS')

Thursday, 28 January 2016

MS SQL Server - Configure and grant user access to xp_cmdshell

Configure  and grant user access to xp_cmdshell

EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE

grant execute on xp_cmdshell to username

EXEC sp_xp_cmdshell_proxy_account 'username', 'password'

Tuesday, 26 January 2016

MS SQL Server - Shrinking transaction logs

Shrinking transaction logs

Run the script below to shrink the database's transaction log. Please note that logs should not really need to be shrank. If logs are not needed, on the database options set the database recovery model to simple this process (see below).

MS SQL Server 2005 

use database_name

backup log progress with truncate_only
dbcc shrinkfile ('transaction_logical_filename')


MS SQL Server 2008 and above

Microsoft SQL Server 2008 does not support the backup with truncate_only directive. So to truncate a log in 2008, run the following script.

BACKUP LOG database_name TO DISK='NULL'

Please endure that the database recovery model is set to full (see below) and a database full back up has been run.

Database option screen - opened by right clicking on the database, and selecting database options.




 



Monday, 25 January 2016

MS SQL Server - Chaning table's schema

Changing table schema 
ALTER SCHEMA schema_name TRANSFER schema_name.table_name;

MS SQL Server - How to reindex all tables within a database


MS SQL Server -  How to reindex all tables within a database

sp_msforeachtable 'dbcc dbreindex(''?'')'

Thursday, 21 January 2016

MS SQL Server - Moving temp DB location

Moving the temp DB location

The script below will move the temp db from its current location to the new location (highlighted). Please ensure you change the logical file name (also highlighted) .

use master
go
Alter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')
go
Alter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf')
go


After running the above script you will need to restart the MS SQL Server Service for the changes to take effect.

Friday, 15 January 2016

MS SQL Server - Script all SQL Logins with their original passwords

MS SQL Server - Script all SQL Logins with their original passwords 

To script logins with their original password, follow these steps:

On server A, start SQL Server Management Studio, and then connect to the instance of SQL server from which you moved the database. Open a new Query Editor window, and then run the following script.

USE master
GO

IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
  DROP PROCEDURE sp_hexadecimal
GO

CREATE PROCEDURE sp_hexadecimal
    @binvalue varbinary(256),
    @hexvalue varchar (514) OUTPUT
AS
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
  DECLARE @tempint int
  DECLARE @firstint int
  DECLARE @secondint int
  SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
  SELECT @firstint = FLOOR(@tempint/16)
  SELECT @secondint = @tempint - (@firstint*16)
  SELECT @charvalue = @charvalue +
    SUBSTRING(@hexstring, @firstint+1, 1) +
    SUBSTRING(@hexstring, @secondint+1, 1)
  SELECT @i = @i + 1
END

SELECT @hexvalue = @charvalue
GO

IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
  DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name sysname
DECLARE @type varchar (1)
DECLARE @hasaccess int
DECLARE @denylogin int
DECLARE @is_disabled int
DECLARE @PWD_varbinary  varbinary (256)
DECLARE @PWD_string  varchar (514)
DECLARE @SID_varbinary varbinary (85)
DECLARE @SID_string varchar (514)
DECLARE @tmpstr  varchar (1024)
DECLARE @is_policy_checked varchar (3)
DECLARE @is_expiration_checked varchar (3)

DECLARE @defaultdb sysname

IF (@login_name IS NULL)
  DECLARE login_curs CURSOR FOR

      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM
sys.server_principals p LEFT JOIN sys.syslogins l
      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
ELSE
  DECLARE login_curs CURSOR FOR


      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM
sys.server_principals p LEFT JOIN sys.syslogins l
      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
OPEN login_curs

FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
IF (@@fetch_status = -1)
BEGIN
  PRINT 'No login(s) found.'
  CLOSE login_curs
  DEALLOCATE login_curs
  RETURN -1
END
SET @tmpstr = '/* sp_help_revlogin script '
PRINT @tmpstr
SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
PRINT @tmpstr
PRINT ''
WHILE (@@fetch_status <> -1)
BEGIN
  IF (@@fetch_status <> -2)
  BEGIN
    PRINT ''
    SET @tmpstr = '-- Login: ' + @name
    PRINT @tmpstr
    IF (@type IN ( 'G', 'U'))
    BEGIN -- NT authenticated account/group

      SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'
    END
    ELSE BEGIN -- SQL Server authentication
        -- obtain password and sid
            SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )
        EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
        EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT

        -- obtain password policy state
        SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
        SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name

            SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'

        IF ( @is_policy_checked IS NOT NULL )
        BEGIN
          SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked
        END
        IF ( @is_expiration_checked IS NOT NULL )
        BEGIN
          SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked
        END
    END
    IF (@denylogin = 1)
    BEGIN -- login is denied access
      SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
    END
    ELSE IF (@hasaccess = 0)
    BEGIN -- login exists but does not have access
      SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )
    END
    IF (@is_disabled = 1)
    BEGIN -- login is disabled
      SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'
    END
    PRINT @tmpstr
  END

  FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
   END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO


Note This script creates two stored procedures in the master database. The procedures are named:


  • sp_hexadecimal 
  • sp_help_revlogin.


On the Source SQL Server instance, run the following statement:

EXEC sp_help_revlogin

The output script that the sp_help_revlogin stored procedure generates is the login script. This login script creates the logins that have the original Security Identifier (SID) and the original password.
On server B, start SQL Server Management Studio, and then connect to the instance of SQL Server to which you moved the database.

Open a new Query Editor window on the target SQL Server instance, and then run the output script.

Wednesday, 13 January 2016

MS SQL Server - Stored procedure or function change date

How to check date of last change in stored procedure or function in SQL server

SELECT name, create_date, modify_date
FROM sys.objects
WHERE type = 'P'

Tuesday, 12 January 2016

MS SQL Server - Script Object

The TSQL script below scripts up MyObjectName

sp_helptext  'MyObjectName'

MS SQL Server - Search for string in all stored procedures

The TSQL Script below will search all SPs within a database for MySearchString.

SELECT obj.Name SPName, sc.TEXT SPText
FROM sys.syscomments sc
INNER JOIN sys.objects obj ON sc.Id = obj.OBJECT_ID
WHERE sc.TEXT LIKE '%' + 'MySearchString' + '%'
AND TYPE = 'P'
GO