Deadlock

Rédigé par Sozezzo - - Aucun commentaire

We have same SQL Scripts to try to find out about what it happens when we have or had deadlocks.

 

  • Get current running commands.
  • Create event to find blocked processes and deadlocks.

 

Sources :

Deadlocking
https://technet.microsoft.com/en-us/library/ms177433%28v=sql.105%29.aspx

How to isolate the current running commands in SQL Server
https://www.mssqltips.com/sqlservertip/1811/how-to-isolate-the-current-running-commands-in-sql-server/

How To Monitor Deadlocks in SQL Server
http://blogs.technet.com/b/mspfe/archive/2012/06/28/how_2d00_to_2d00_monitor_2d00_deadlocks_2d00_in_2d00_sql_2d00_server.aspx

A very quick guide to deadlock diagnosis in SQL Server
https://dzone.com/articles/very-quick-guide-deadlock

Finding Blocked Processes and Deadlocks using SQL Server Extended Events
http://www.brentozar.com/archive/2014/03/extended-events-doesnt-hard/#comments

 

Lire la suite de Deadlock

Migrer une base de données

Rédigé par Sozezzo - - Aucun commentaire

Migrer une base de données vers un nouveau serveur est assez simple…

si…

  • Il y a seulement une base de données;
  • Il n’y a pas des objets à migrer;
  • Il n’y a pas de dépendances physiques;

 

Alors, le SQL script proposé fait une partie du processus :

  • Ferme toutes les connexions vers la base de données à migrer;
  • Restreins l’accès à la base de données;
  • Fais une copie de sauvegarde de la base de données;
  • Restaure l’accès à la base de données à multi-utilisateur;
  • Mise hors ligne la base de données;

 

Le SQL script ajoute des scripts pour :

  • Change l’ancien utilisateur de la base de données;
  • Mise hors ligne les bases de données;
  • la restauration en ligne les bases de données;

 

Le script créé l’option :

  • Test : exécute seulement les copie de sauvegarde;
  • Migration : exécute tous les scripts;

Vous devez choisir le répertoire pour les fichiers de sauvegarde.

Lire la suite de Migrer une base de données

SQL script to find database owners using T-SQL and create SQL Script to change it to 'sa'

Rédigé par Sozezzo - - Aucun commentaire

Microsoft provides system stored procedures (dbo.sp_changedbowner) for changing the db owner.
Keep in mind, a user database should have a db owner associated with it; dont mis interpret this witj db_owner role.


I personally prefer setting the db owner to ‘sa’


SELECT NAME,
    suser_sname(owner_sid) AS 'owner',
    CASE
        WHEN suser_sname(owner_sid) = 'sa'
            THEN ''
        ELSE 'USE [' + NAME + ']; EXEC dbo.sp_changedbowner @loginame = N''sa'';'
        END ScriptSql
FROM sys.databases

 

We can fix owner's jobs with this script:


SELECT
      s.name
    , l.name
    , s.[enabled]
    , CASE WHEN l.name <> 'sa' OR l.name IS NULL
      THEN 'EXEC msdb.dbo.sp_update_job @job_id=N'''+CAST(job_id AS nvarchar(MAX))+''', @owner_login_name=N''sa'';'
      ELSE '' END AS ScriptSql
FROM      msdb..sysjobs        s
LEFT JOIN master.sys.syslogins l ON s.owner_sid = l.sid;

 

Script to fix DB/Job owner to 'SA' without question.

PRINT '-- SQL Script to fix DB owner to SA'
SET NOCOUNT ON;
DECLARE @sql NVARCHAR(max);
SET @sql = '';
SELECT @sql = @sql + 'USE [' + sys.databases.NAME + ']; EXEC dbo.sp_changedbowner @loginame = N''sa'', @map = false;' + CHAR(13) + CHAR(10)
FROM            sys.databases
LEFT OUTER JOIN sys.syslogins ON sys.databases.owner_sid = sys.syslogins.sid
WHERE (sys.syslogins.NAME <> N'sa')
    OR (sys.syslogins.NAME IS NULL)
PRINT @sql;
EXEC (@sql);
PRINT '-- SQL Script to fix Job owner to SA'
SET @sql = '';
SELECT @sql = @sql + CASE WHEN l.NAME <> 'sa'
    OR l.NAME IS NULL     THEN 'EXEC msdb.dbo.sp_update_job @job_id=N''' + CAST(job_id AS NVARCHAR(MAX)) + ''', @owner_login_name=N''sa'';' + CHAR(13) + CHAR(10)
                          ELSE '' END
FROM      msdb..sysjobs        s
LEFT JOIN master.sys.syslogins l ON s.owner_sid = l.sid;
PRINT @sql;
EXEC (@sql);

Script to fix database for all online databases.

Rédigé par Sozezzo - - Aucun commentaire

Set database owner = 'sa'

Set RECOVERY = Simple & Shrink databases

 


 

print '-- SQL Script to fix owner and Recouvery mode'
print ''
SET NOCOUNT ON;
Declare @sql nvarchar(max);
declare @dbname nvarchar(255);
BEGIN TRY drop table #db; END TRY BEGIN CATCH END CATCH;
SELECT * INTO #db
FROM sys.databases f
WHERE f.state_desc = 'ONLINE'
    AND (f.database_id > 4)


while ((select count(*) from #db)>0)
BEGIN
    
    
    Set @sql = '';
    SELECT top 1
    @dbname = name,
     @sql =
    
     -- change db owner to SA
     + case when suser_sname(f.owner_sid) = 'sa' THEN '' ELSE 'USE ['+ f.name+']; EXEC dbo.sp_changedbowner @loginame = N''sa'', @map = false;' + CHAR(13) + CHAR(10)  END

     -- SET RECOVERY SIMPLE
     + CASE when f.recovery_model_desc = 'SIMPLE' THEN ''  ELSE +'USE [MASTER]; '+ 'ALTER DATABASE ['+ f.name+'] SET RECOVERY SIMPLE WITH NO_WAIT;'+ CHAR(13) + CHAR(10)
     +'USE [MASTER]; '+'DBCC SHRINKDATABASE(N'''+ f.name+''');' + CHAR(13) + CHAR(10) END
    FROM #db f
    ORDER BY f.name;

    if NOT(@sql = '')
    SET @sql = 'PRINT ''Database:'+@dbname+''';' + CHAR(13) + CHAR(10)+@sql;

    print @sql;
    --exec (@sql);

    delete from #db where name = @dbname;

END

 

Create script to change owner


PRINT '---------------------------';
PRINT '-- SQL Script to fix owner to "sa"';
PRINT '-- '+CAST(getdate() as nvarchar(100));
PRINT '---------------------------';
SET NOCOUNT ON;
DECLARE @sql nvarchar(MAX);
DECLARE @dbname nvarchar(255);
BEGIN TRY DROP TABLE #db; END TRY BEGIN CATCH END CATCH;
SELECT * INTO #db FROM sys.databases f WHERE f.state_desc = 'ONLINE'
AND (f.database_id > 4)

DECLARE @sqltemplate nvarchar(MAX);
SET @sqltemplate = '
PRINT ''-- Database "?" '';
IF (EXISTS(SELECT * FROM sys.databases WHERE NOT(suser_sname(owner_sid) = ''sa'') AND [name] = ''?'' ))
BEGIN
    PRINT ''---- Fix owner user to "sa"''
    USE [?];EXEC dbo.sp_changedbowner @loginame = N''sa'',@map=false;
END;
'
PRINT 'PRINT ''----------------------'';';
PRINT 'PRINT ''-- Script to fix owner to "sa"'';';
PRINT 'PRINT ''----------------------'';';
WHILE ((SELECT count(*) FROM #db)>0) BEGIN
SET @sql = '';
SELECT TOP 1 @dbname = name , @sql = REPLACE(@sqltemplate, '?', name) FROM #db f ORDER BY f.name;
DELETE FROM #db WHERE name = @dbname;
PRINT @sql;
END

 

Sql Script to set recovery mode full.


PRINT '---------------------------';
PRINT '-- SQL Script to Set Recovery Mode FULL';
PRINT '-- '+CAST(getdate() as nvarchar(100));
PRINT '---------------------------';
SET NOCOUNT ON;
DECLARE @sql nvarchar(MAX);
DECLARE @dbname nvarchar(255);
BEGIN TRY DROP TABLE #db; END TRY BEGIN CATCH END CATCH;
SELECT * INTO #db FROM sys.databases f WHERE f.state_desc = 'ONLINE'
AND (f.database_id > 4)

DECLARE @sqltemplate nvarchar(MAX);
SET @sqltemplate = '
PRINT ''-- Database "?" '';
IF (EXISTS(SELECT * FROM sys.databases WHERE NOT(recovery_model_desc = ''FULL'') AND [name] = ''?'' ))
BEGIN
    PRINT ''---- Fix recovery mode full''
    USE Master;ALTER DATABASE [?] SET RECOVERY FULL WITH NO_WAIT;;
END;
'
PRINT 'PRINT ''----------------------'';';
PRINT 'PRINT ''-- Script to Set Recovery Mode FULL'';';
PRINT 'PRINT ''----------------------'';';
WHILE ((SELECT count(*) FROM #db)>0) BEGIN
SET @sql = '';
SELECT TOP 1 @dbname = name , @sql = REPLACE(@sqltemplate, '?', name) FROM #db f ORDER BY f.name;
DELETE FROM #db WHERE name = @dbname;
PRINT @sql;
END

Fil RSS des articles de cette catégorie