Перейти к содержимому

Сжать лог у всех баз на сервере

--select * from [master].[sys].[databases]

--where not name in ('master','tempdb','model','msdb')

 

declare @name nvarchar(512)

declare @cmd nvarchar(512)

DECLARE @Cursor CURSOR

SET @Cursor = CURSOR FOR

select   name from [master].[sys].[databases]

where not name in ('master','tempdb','model','msdb')

 

 

 

OPEN @Cursor

FETCH NEXT FROM @Cursor INTO @name

 

WHILE (@@FETCH_STATUS = 0)

BEGIN

--print @name

 

set @cmd = 

'USE ['+@name+']

GO

DBCC SHRINKFILE (N'''+@name+ '_log'', 0, TRUNCATEONLY)

GO'

 

print @cmd

--exec (@cmd)

 

FETCH NEXT FROM @Cursor INTO @name

end

 

перевод всех бд в simple

declare @db nvarchar(10)
declare @sql nvarchar(256)
declare cursor_size_srv cursor for
SELECT  --@@SERVERNAME AS Server ,
        name AS DBName 
        --recovery_model_Desc AS RecoveryModel ,
        --Compatibility_level AS CompatiblityLevel ,
        --create_date ,
        --state_desc
FROM    sys.databases
where name not in ('master','msdb','model','tempdb') and recovery_model_desc = 'full'
ORDER BY Name; 
 
OPEN cursor_size_srv
FETCH NEXT FROM cursor_size_srv INTO @db
WHILE (@@FETCH_STATUS=0)
BEGIN
set @sql = 'ALTER DATABASE '+@db+' SET RECOVERY SIMPLE WITH NO_WAIT'
print (@sql);
FETCH NEXT FROM cursor_size_srv INTO @db
END
CLOSE cursor_size_srv
DEALLOCATE cursor_size_srv

 

Сенсор для prtg. Сенсор для задания sql

USE msdb

SELECT 
	  TOP 1
	  	/* a.job_id       AS Id
	  ,a.name  AS NAME_job
	 	  , b.run_date
	  , b.run_time ,
	  b.step_id,*/

	  b.run_status
	  
	  --SELECT *
FROM   
       dbo.sysjobs a
       FULL OUTER JOIN dbo.sysjobhistory b
            ON  a.job_id = b.job_id
                AND a.[enabled] = '1'
                    --AND b.run_date = @@servername
WHERE  
       a.name IN ('LSRestore_s0030_ax_molniya_DB') AND b.run_status NOT IN ('4') AND b.step_id IN ('0')
       /*GROUP BY a.name
       ,a.job_id 
       ,b.step_id
       ,b.run_date*/
ORDER BY
       b.run_date   DESC,
       b.run_time  DESC

Настройка самого сенсора в prtg

LSRestore_s0030_ax_molniya_DB _ Sensor Details _ PRTG Network Monitor (S0061) - Mozilla Firefox 2015-12-14 14.02.07

 

ресторинг n баз из одного бэкапа под разными именами

declare @name nvarchar(56)

declare @cmd nvarchar(512)

DECLARE @Cursor CURSOR

SET @Cursor = CURSOR FOR

select '0'+right(servername,2) as name from s0055.rkur_dbastat.dbo.ServerName

where is_disable = 0

--and servername = 's1027'

 

OPEN @Cursor

FETCH NEXT FROM @Cursor INTO @name

 

WHILE (@@FETCH_STATUS = 0)

BEGIN

print @name

set @cmd = 'RESTORE DATABASE [planograms'+@name+'] 

FROM DISK= N''H:\MSSQL\Backup\etalon_planograms_20150112.bak'' 

WITH  FILE = 1 

,MOVE  N''Planograms'' TO N''H:\MSSQL\Data\planograms'+@name+'.mdf''

,MOVE N''Planograms_log'' TO N''H:\MSSQL\Data\planograms'+@name+'_1.ldf''

,  NOUNLOAD

,  STATS = 10

'

print @cmd

--exec (@cmd)

 

FETCH NEXT FROM @Cursor INTO @name

end

 

Как посмотреть файл трассировки в самом sql

SELECT top 50 *
FROM fn_trace_gettable(N'\\192.168.0.38\Backup\Trace_sql_serverov\ho_report\TracE20150822            000000.trc',DEFAULT)
where CONVERT(CHAR(8),StartTime,8) BETWEEN '09:00:00' and '23:00:00'
and not ApplicationName in ('NULL','Symantec Backup Exec™ for Windows Servers')
AND ApplicationName NOT LIKE  ('SQLAgent - TSQL%')
AND ApplicationName NOT LIKE  ('DatabaseMail%')
AND textdata not LIKE  ('RESTORE%')
ORDER BY duration  DESC
SELECT *

FROM fn_trace_gettable(N'C:\TraceFiles\LongRunningQueries.trc',DEFAULT);

 

Как проверить какие трассировки выполняются на sql. Как остановить трассировку

Проверить трассировки

SELECT * FROM   sys.traces;

14-04-2015 10-41-43[7]

Остановить трассировку

DECLARE @TraceID INT ;

 SET @TraceID = 2 ; -- specify value from sp_trace_create

 EXEC sp_trace_setstatus

    @traceid = @TraceID

    ,@STATUS = 0 ;-- stop trace

 -- delete the trace

 EXEC sp_trace_setstatus

    @traceid = @TraceID

  ,@STATUS = 2 ;-- delete trace

14-04-2015 10-44-27[7]

Как сделать трассировку на стороне MS Sql сервера

Проверить какие трассировки у нас запушены на ms sql.

SELECT * FROM   sys.traces;

Остановить запушенную трассировку.

10-04-2015 10-05-39[3]

DECLARE @TraceID INT ;

 SET @TraceID = 5 ; – взять ид из таблички проверки запушенных трассировок 

 EXEC sp_trace_setstatus

    @traceid = @TraceID

    ,@STATUS = 0 ;-- stop trace

 -- delete the trace

 EXEC sp_trace_setstatus

    @traceid = @TraceID

  ,@STATUS = 2 ;-- delete trace

Выбор в profile шаблон TSQL_Duration набор трассировки и фильтр по времени выполнения запросов.

Перенос базы tempdb на другой диск

Запускаем sql при сбои:

NET START MSSQLSERVER /f /T3608

 

Проверяем где находится база tempdb

SELECT name, physical_name AS CurrentLocation

FROM sys.master_files

WHERE database_id = DB_ID(N'tempdb');

GO

Меняем путь

use master

alter database tempdb

modify file(

name = tempdev,

filename = N'C:\Новое_место\tempdb.mdf')

go

 

alter database tempdb

modify file(

name = templog,

filename = N'C:\Новое_место\templog.ldf')

go

Перенос множества файлов tempdb на другие диски(на разные)

use master

alter database tempdb

modify file(

name = tempdev,

filename = N'E:\TEMPDB\tempdb.mdf')

go
alter database tempdb

modify file(

name = tempdev1,

filename = N'E:\TEMPDB\tempdb1.mdf')

GO

alter database tempdb

modify file(

name = tempdev2,

filename = N'E:\TEMPDB\tempdb2.mdf')


Читать далее

Полное восстановление базы, переключение базы в однопользовательский режим потом в многопользовательский

USE [master]

GO

ALTER DATABASE [Имя базы] SET SINGLE_USER 

with rollback immediate;

GO

ALTER DATABASE [Имя базы]

SET READ_ONLY;

GO

RESTORE DATABASE [Имя базы] FROM  DISK = N'Путь до полного бекапа 'WITH FILE = 2 ,  STANDBY = N'Куда будет сохранятся незафиксированые транзакции' NOUNLOAD,  REPLACE,  STATS = 10

GO

ALTER DATABASE [Имя базы] SET MULTI_USER;

GO