Como Atachar base de datos con nombre distinto al original y sin LOG ????


Algo atípico, pero puede pasar…es más, me paso ayer.

Entre idas y vueltas con el armado de Arrays en uno de los servers, tuvimos que desatachar todas las bases de datos, mover los files a otros discos, desarmar el Array de los mismos y armarlos nuevamente con el esquema deseado para que trabaje mejor nuestro motor de base de datos.

Una vez que hicimos esto, nos encontramos con la sorpresa de que cuando quisimos atachar nuevamente las bases, no se podía hacer porque decía que tenia el Log incorrecto, etc…etc…

Leyendo por la web un par de paginas interesantes, detectamos de que cuando esto pasaba, la única forma de poder leer nuevamente dichos datos, sin tener que restaurar el ultimo backup, es adjuntar la base de tal forma que quede en Emergency Mode, para una vez así, leer dichos datos y transferirlos a donde deseamos con Integration Services.

Pasada la tormenta, me pongo a investigar en un rato de ocio, y encuentro que es posible adjuntar un DataFile con un nombre de base de datos distinto al original y sin tener necesidad de contar con su respectivo archivo de Log, como es esto posible??, sencillo, con la siguiente instrucción.

ALTER DATABASE BaseDatosSET SINGLE_USER
DBCC CHECKDB ('BaseDatos', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE BaseDatos SET MULTI_USER

Como recuperar un Log File cuando el disco que lo contiene explota.


Justamente hoy, tuvimos la desgracia de que se voló el disco que contiente los archivos de Log de todas las bases de un servidor, aproximadamente 10 de ellas quedaron totalmente inaccesibles.La solución rápida para esto, en el caso de que aun podamos conectarnos a una consola de SQL, es ejecutar el siguiente Script por cada BBDD.


ALTER DATABASE BaseDatos SET EMERGENCY
GO

ALTER DATABASE BaseDatos SET SINGLE_USER
GO

DBCC CHECKDB (BaseDatos , REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS
GO

ALTERDATABASE BaseDatos SET online
ALTER DATABASE BaseDatos SET multi_user

Como cambiar el estado de salida de todos los pasos de un Job


En este ejemplo, vemos como podemos alterar la salida de todos los pasos que componene el Job.
Este Job en particular, posee 69 pasos, entonces, recorremos el mismo hasta que @Step sea = 68, ya que el paso 69 es el que informa el error.
Lo primero que debemos hacer, es obtener el @job_id que queremos modificar.
Esto lo hacemos consultando la tabla msdb.dbo.sysjobs por el campo (name).

SELECT job_id FROM msdb.sysjobs WHERE name LIKE ‘%NombreJob%’
DECLARE @Step INT
SET @Step = 1
WHILE @Step < 69
BEGIN
EXEC msdb.dbo.sp_update_jobstep @job_id=N’c064296e-0334-490e-9901-5edcd8df306c’,@step_id=@Step  , @on_fail_action=4, @on_fail_step_id = 69
SET @Step = @Step + 1
END