- Se incorporó
- 15 Mayo 2008
- Mensajes
- 3.958
Chicos un par de script para flojos SQL 2005/2008 (no me acuerdo si había alguna que no funcionara, cuando las pruebe les aseguro en que versión funciona, pero deberían funcionar en las dos)
Porcentaje de las tareas en segundo plano
(ejemplo cuando estas haciendo una reindexación)
Respaldar todas las Bases de datos
(excluye sistema master, model, msdb, tempdb)
Reducir log
reconstruir todos los indices de todas las bases de datos
Porcentaje de las tareas en segundo plano
(ejemplo cuando estas haciendo una reindexación)
Código:
SELECT percent_complete, start_time, status, command, estimated_completion_time, cpu_time, total_elapsed_time
FROM sys.dm_exec_requests
ORDER BY 1 DESC
Respaldar todas las Bases de datos
(excluye sistema master, model, msdb, tempdb)
Código:
DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
SET @path = 'D:\BackUP\'
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
Reducir log
Código:
DECLARE @dbName AS VARCHAR(100)
DECLARE @cmd AS VARCHAR(MAX)
DECLARE c1 CURSOR FOR
SELECT name FROM master..sysdatabases sdb
WHERE name NOT IN ('master','model','msdb','tempdb','distrbution','ReportServer','ReportServerTempDB')
ORDER BY name
OPEN c1
FETCH NEXT FROM c1
INTO @dbName
WHILE @@FETCH_STATUS = 0
BEGIN
--Establecer la base de datos en uso
SET @cmd = 'USE ' + @dbName
--Si se establece el modo de restauración a simple, las partes inactivas del log de transacción deben ser borradas
--Este comando reducirá el archivo de log un poco
SET @cmd = @cmd + ' ALTER DATABASE ' + @dbName + ' SET RECOVERY SIMPLE'
--Obtener el nombre de log de la base de datos
SET @cmd = @cmd + ' DECLARE @logFile AS NVARCHAR(1000)'
SET @cmd = @cmd + ' SELECT @logFile = name FROM ' + @dbName + '.sys.database_files WHERE type_desc = ''LOG'''
--Cambiar el modo de restauración a Simple no es suficiente, esto reduce el log a 1 MB
SET @cmd = @cmd + ' DBCC SHRINKFILE (@logFile , 1)'
EXEC(@cmd)
FETCH NEXT FROM c1
INTO @dbName
END
CLOSE c1
DEALLOCATE c1
reconstruir todos los indices de todas las bases de datos
Código:
DECLARE @Database VARCHAR(255)
DECLARE @Table VARCHAR(255)
DECLARE @cmd NVARCHAR(500)
DECLARE @fillfactor INT
SET @fillfactor = 90
DECLARE DatabaseCursor CURSOR FOR
SELECT name FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','msdb','tempdb','model','distribution')
ORDER BY 1
OPEN DatabaseCursor
FETCH NEXT FROM DatabaseCursor INTO @Database
WHILE @@FETCH_STATUS = 0
BEGIN
SET @cmd = 'DECLARE TableCursor CURSOR FOR SELECT ''['' + table_catalog + ''].['' + table_schema + ''].['' +
table_name + '']'' as tableName FROM [' + @Database + '].INFORMATION_SCHEMA.TABLES
WHERE table_type = ''BASE TABLE'''
-- create table cursor
EXEC (@cmd)
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @Table
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@@MICROSOFTVERSION / POWER(2, 24) >= 9)
BEGIN
-- SQL 2005 or higher command
SET @cmd = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
EXEC (@cmd)
END
ELSE
BEGIN
-- SQL 2000 command
DBCC DBREINDEX(@Table,' ',@fillfactor)
END
FETCH NEXT FROM TableCursor INTO @Table
END
CLOSE TableCursor
DEALLOCATE TableCursor
FETCH NEXT FROM DatabaseCursor INTO @Database
END
CLOSE DatabaseCursor
DEALLOCATE DatabaseCursor