Friday, May 01, 2015

Get Move Names

Handy when I am scripting a restore from Prod to a testing lab.
SELECT
CONCAT('move','''',space(1),name,'''',space(1),'TO','''',SPACE(1),Physical_name,'''',',')
FROM sys.master_files
WHERE db_name(database_id) = 'TLC_CDC'

When will my Restore complete? Script

SELECT      command, percent_complete,
            'elapsed' = total_elapsed_time / 60000.0,
            'remaining' = estimated_completion_time / 60000.0
FROM        sys.dm_exec_requests
WHERE       command like 'BACKUP%'


SELECT r.session_id,r.command,CONVERT(NUMERIC(6,2),r.percent_complete)
AS [Percent Complete],CONVERT(VARCHAR(20),DATEADD(ms,r.estimated_completion_time,GetDate()),20) AS [ETA Completion Time],
CONVERT(NUMERIC(10,2),r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0) AS [ETA Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours],
CONVERT(VARCHAR(1000),(SELECT SUBSTRING(text,r.statement_start_offset/2,
CASE WHEN r.statement_end_offset = -1 THEN 1000 ELSE (r.statement_end_offset-r.statement_start_offset)/2 END)
FROM sys.dm_exec_sql_text(sql_handle)))
FROM sys.dm_exec_requests r WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE')


SP_HelpDB 'DBName'

SP_HelpDB 'DBName'
This is useful for getting the names with address for Database files. I use it when I an scripting restores. I like it because it gives the useable name and address even when a VMWare mount point is specified.

Add Linked Server SQL Server

Add Linked Server:
USE [master]
GO

EXEC master.dbo.sp_dropserver @server=N'000.00.1.93', @droplogins='droplogins'
GO


EXEC master.dbo.sp_addlinkedserver @server = N'000.00.1.93', @srvproduct=N'SQL Server'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'000.00.1.93',@useself=N'False',@locallogin=NULL
,@rmtuser=N'CORP\User Here',@rmtpassword='Password Here'

GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'collation compatible', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'data access', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'dist', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'pub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'rpc', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'rpc out', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'sub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'connect timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'collation name', @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'lazy schema validation', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'query timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'use remote collation', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'000.00.1.93', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO


Capture SQL Permissions for an Instance

This is for SQL DBAs to capture information on a server on which they have System Admin rights. It is not for hacking other peoples servers. This is for migrating an instance to a new server.

Set NoCount On

Declare @databasename VarChar(45)
Declare @sqlstmt nVarChar(max)

Set @sqlstmt = ''

Declare curDatabases Cursor Read_Only For
Select Name
From master.sys.databases With(NoLock)
Where source_database_id Is Null
And [state] = 0

Open curDatabases

Fetch Next From curDatabases
Into @databasename

While @@FETCH_STATUS = 0
Begin

-- Select @sqlstmt = @sqlstmt + 'SELECT ''Execute As Login = ''''corp\svc-sqlsrvcnp''''''' + Char(13)
Select @sqlstmt = 'SELECT ''Execute As Login = ''''corp\svc-sqlsrvcnp''''''' + Char(13)
+ 'UNION ALL' + Char(13)
+ 'SELECT ''GO'' ''--Scripter'''+ Char(13)
+ 'SELECT ''USE [' + @databasename + ']'' ''--Scripter''' + Char(13)
+ 'UNION ALL' + Char(13)
+ 'SELECT ''GO'' ''--Scripter'''+ Char(13)
+ 'UNION ALL' + Char(13)
+ 'SELECT ''CREATE USER ['' + [name] + ''] FOR LOGIN ['' + name + ''] '' + ' + Char(13)
+ ' Case' + Char(13)
+ ' When default_schema_name Is Null Then ''''' + Char(13)
+ ' Else ''WITH DEFAULT_SCHEMA=['' + default_schema_name + '']''' + Char(13)
+ '  End ''Scripter''' + Char(13)
+ '  FROM [' + @databasename + '].[sys].[database_principals] With(NoLock)' + Char(13)
+ '  Where Type In(''S'',''G'',''U'')' + Char(13)
+ ' And name Not In(''sys'',''dbo'',''guest'',''INFORMATION_SCHEMA'')' + Char(13)
+ ' And name Not Like ''lumcoll%'' ' + Char(13)
--+ 'COLLATE DATABASE_DEFAULT' + char(13)
+ 'UNION ALL ' + Char(13)
+ 'Select ''Execute sp_AddRoleMember '''''' + roles.name + '''''', '''''' + users.name + '''''''' ''--Scripter''' + Char(13)
+ ' from [' + @databasename + '].sys.database_principals users With(NoLock) ' + Char(13)
+ '  inner join [' + @databasename + '].sys.database_role_members link With(NoLock) ' + Char(13)
+ '   on link.member_principal_id = users.principal_id' + Char(13)
+ '  inner join [' + @databasename + '].sys.database_principals roles With(NoLock) ' + Char(13)
+ '   on roles.principal_id = link.role_principal_id' + Char(13)
+ 'Where users.name <> ''dbo'' ' + Char(13)
+ ' And users.name Not Like ''lumcoll%'' ' + Char(13)
+ ' And roles.name Not Like ''lumaudit%'' ' + Char(13)
--+ 'COLLATE DATABASE_DEFAULT' + char(13)

Fetch Next From curDatabases Into @databasename
If @@FETCH_STATUS = 0
Select @sqlstmt = @sqlstmt + 'UNION ALL' + Char(13) + 'SELECT ''GO'' ''--Scripter'''+ Char(13)

Exec sp_executesql @sqlstmt

End

Close curDatabases
Deallocate curDatabases