Buscar este blog

miércoles, 25 de febrero de 2015

Mover Bases de Datos Model/Msdb/Master/Tempdb y los Archivos de Log del Sistema ErrorLog/SQLDump/AgentLog

    Amigos,  por motivos varios podemos encontrarnos frente a la tarea de tener que mover nuestras Bases de Datos y Archivos de Log del Sistema hacia otra unidad de disco. 

    No es una tarea difícil mas si requiere de un orden. Veamos pues el paso a paso:
  
     

    1) Base de Datos "Master"

      Esta base contiene buena parte de la configuración de la instancia de SQL Srv (logins,
      Bd, Errores etc).  También los Sp extendidos y muchos otros Sp del sistema.

1)   Crear el directorio donde vamos a mover los archivos master.mdf y el master.ldf

2)  Cambiar el path donde el Sql Servr “busca” los archivos , para ello:

Desde dentro del servidor… Start --> All Programs -->Microsoft SQL Server xxxx --> Configuration Tools--> Sql Server Configuration Manager --> SQL Server Services --> SQL Server(MSSQLSERVER) -->Botón derecho --> Properties --> Solapa Advanced --> Startup Parameters  y modificamos los path para el master.mdf y el master.ldf --> Luego “ok”


3)       Detener el servicio del SQL Server (MSSQLSERVER)
4)       Mover los archivos hacia la nueva ubicación (master.mdf y el master.ldf)
5)       Reiniciar el servicio..


2)  Archivo de Log de Errores "ErrorLog"”

Sql server almacena errores del sistema e información adicional de distintas instancias del mismo en archivos ubicados en la carpeta ERRORLOG.
      
1)   Crear el directorio donde vamos a mover los archivos contenidos en la carpeta ERRORLOG

2)  Cambiar el path donde el Sql Servr loguea los archivos , para ello:

Desde dentro del servidor… Start --> All Programs -->Microsoft SQL Server xxxx --> Configuration Tools--> Sql Server Configuration Manager --> SQL Server Services --> SQL Server(MSSQLSERVER) -->Botón derecho --> Properties --> Solapa Advanced --> Startup Parameters  y modificamos los path para ERRORLOG--> Luego “ok”


3)       Detener el servicio del SQL Server (MSSQLSERVER)
4)       Mover los archivos hacia de log de Error a la nueva ubicación
5)       Reiniciar el servicio..


3)  Archivo de Log de Errores "SQLDump"

Sql server almacena crea un archivo de Dump cuando se produce un ‘Crash’ del Sql Server u otro error no documentado. También cuando el comando DBCC CHECKDB encuentra ‘corrupciones’ dentro de la Base de Datos. Por default el SQL Server almacena este tipo de archivos en la carpeta ERROLOG…

1)   Crear el directorio donde vamos a mover los archivos contenidos en la carpeta ERRORLOG

2)  Cambiar el path donde el Sql Servr loguea los archivos , para ello:

       Desde dentro del servidor… Start --> All Programs -->Microsoft SQL Server xxxx --> Configuration Tools--> Sql Server Configuration Manager --> SQL Server Services --> SQL Server(MSSQLSERVER) -->Botón derecho --> Properties --> Solapa Advanced --> Dump Directory y modificamos los path --> Luego “ok”


3)       Detener el servicio del SQL Server (MSSQLSERVER)
4)       Mover los archivos Dump hacia  la nueva ubicación
5)       Startear el servicio..



4)  Base de Datos "TempDB"

Esta base contiene todos los objetos temporales creados explícitamente por el usuario (tablas, sp, variables, etc) y otros objetos internos creados por el motor de la base de datos (por ejemplo tablas de trabajo para almacenar resultados intermedios).

1)       Corroborar la ubicación actual de los archivos correspondientes a la base TempDB

                SELECT name, physical_name AS CurrentLocation, state_desc
   FROM sys.master_files
                   WHERE database_id = DB_ID(N'tempdb');

2)       Crear el directorio donde van a ubicarse los archivos tempdb.mdf y el templog.ldf

3)       Correr un Alter Database y setear las nuevas ubicaciones para los archivos temporales
                      
                 ALTER DATABASE TempDb
                      MODIFY FILE ( NAME = ' tempdev', FILENAME = 'E:\Data\Microsoft SQL
                     Server\MSSQL\Tempdb\tempdb.mdf' )  
                      go
                     ALTER DATABASE TempDb
     MODIFY FILE ( NAME = ' templog', FILENAME = 'E:\Data\Microsoft SQL               Server\MSSQL\Tempdb\templog.ldf' )

4)       Reiniciar el servicio de Sql Server

5)       Borrar el directorio con los archivos de la TempDB “viejos” (que ya se han regenerado)


5)  Base de Datos "MODEL"

Esta base contiene la plantilla de todas las bases de datos del SQL Server. Siempre debe estar presente puesto que la base de datos TempDb se regenera ante cada reinicio del motor de BD tomando como plantilla a la Model

1)       Corroborar la ubicación actual de los archivos correspondientes a la base Model

                SELECT name, physical_name AS CurrentLocation, state_desc
   FROM sys.master_files
                   WHERE database_id = DB_ID(N'model');

2)       Crear el directorio donde vamos a mover los archivos model.mdf y el modellog.ldf

3)       Correr un Alter Database y setear las nuevas ubicaciones para los archivos 
                      
                 ALTER DATABASE Model
                      MODIFY FILE ( NAME = ' modeldev', FILENAME = 'E:\Data\Microsoft SQL
                     Server\MSSQL\Model\Model.mdf' )  
                      go
                     ALTER DATABASE Model
     MODIFY FILE ( NAME = ' modelog', FILENAME = 'E:\Data\Microsoft  SQL             Server\MSSQL\Model\modellog.ldf' )

4)       Stoppear  el servicio de Sql Server

5)        Mover a la nueva carpeta creada en el punto 2) los archivos model.mdf y el modellog.ldf

             6)       Startear el servicio de Sql Server


  6)  Base de Datos "MSDB"

Es la base de datos utilizada por el Sql Server Agent para programar alertas y trabajos.

1)       Corroborar la ubicación actual de los archivos correspondientes a la base MsDb

                SELECT name, physical_name AS CurrentLocation, state_desc
   FROM sys.master_files
                   WHERE database_id = DB_ID(N'msdbl');

2)       Crear el directorio donde vamos a mover los archivos MSDBData.mdf y el MsdbLog.ldf

3)       Correr un Alter Database y setear las nuevas ubicaciones para los archivos 
                      
                 ALTER DATABASE MsDb
                      MODIFY FILE ( NAME = ' MSDBData', FILENAME = 'E:\Data\Microsoft SQL
                     Server\MSSQL\Model\MSDBDatal.mdf' )  
                      go
                     ALTER DATABASE MsDb
     MODIFY FILE ( NAME = ' MSDBlog', FILENAME = 'E:\Data\Microsoft  SQL             Server\MSSQL\Model\MSDBLog.ldf' )

4)       Stoppear  el servicio de Sql Server

5)        Mover a la nueva carpeta creada en el punto 2) los archivos MSDBData.mdf y el MSDBLog.ldf

             6)       Startear el servicio de Sql Server


  7) SQL Server Agent Log

      Es Sql Server Agent mantiene un set de archivos de log con warnings o errores encontrados durante la ejecución de un job.
.

1)   Crear el directorio donde vamos a mover los archivos master.mdf y el master.ldf

2)  Cambiar el path donde el Sql Servr “busca” los archivos , para ello:

Desde dentro del servidor… Start --> All Programs -->Microsoft SQL Server xxxx --> Configuration Tools--> Sql Server Configuration Manager --> SQL Server Agent(MSSQLSERVER)  --> SQL Server(MSSQLSERVER) -->Botón derecho --> Properties --> Solapa Advanced --> Dump Directory  y modificamos los path  --> Luego “ok”


3)       Detener el servicio del SQL Server (MSSQLSERVER)
4)       Mover los archivos de Dump hacia la nueva ubicación
5)       Startear el servicio..

sábado, 20 de diciembre de 2014

Cambiar el Nombre de Una Base de Datos

Amigos,

     Me han preguntado por mail si es posible cambiar el nombre de una base de datos... La persona que me hizo llegar su correo se la notaba preocupada ya que había creado una base y luego había avanzado en el montado de estructuras, users, permisos etc.

     Luego de dos dias de trabajo, a este desarrollador de Guatemala, le llegó la orden de cambiar el nombre de la base puesto que el Project Leader así lo solicitaba.

     El intentó hacerlo pero fracasó, ya que no no siguió los siguientes pasos... .

     Se los dejo, es algo muy sencillo y efectivo...

         
 -- Se setea la base de datos en "Single User"
Alter Database A
Set Single_User with rollback immediate

-- Modifico el Nombre de la Base de Datos --
ALTER DATABASE A
Modify Name = B;
GO

-- Vuelvo la Base de Datos ya renombrada a Multi User --
Alter Database B
Set Multi_User
     

** Por último, sólo es posible cambiar el nombre de las BD de usuarios no de las BD del sistema.

Eso es todo amigos, saludos para todos.

miércoles, 10 de diciembre de 2014

Pregunta: Cómo identifico cual dts package está siendo llamado por el job?

PREGUNTA:


Bruno xxxx
 xxxxx@hotmail.com





Buenas tardes Gustavo.

Te saluda Bruno de Lima-Perú. Estuve buscando la solución a un problema que tengo en sql server y me encontré con tu blog, déjame felicitarte por el trabajo que realizas, he encontrado mucha información.

Te comento que no soy DBA, pero tengo nociones. Estoy realizando un inventario de todos los Jobs y dts de la base de datos sql server 2000.

Cuando estuve inventariando los dts me encontré con esta sorpresa.

He encontrado en la línea de ejecución lo sgte:


DTSRun /~Z0xAABAD4ECCF4B2A08AC5ACF14850EF2865FE933FCD50929A5FB0B21F1200CE14D2A492C5F73D719EAFBCA077C0AC0079B52FC5B1B26771622389205196AA5D334DF6F163A895DFB9F6B66507626FF70285419B49123265B8368DFB9F4777D5A2B4F00238BCB7D2B75A960DC14C00BFC1464C23A7F69114D48108EAD49F684055F26066F7E82A236ABF58F9202EC071FA8F60193

Aquí esta mi duda, no se como se llama el dts.
Que puedo hacer para saber el nombre del dts y de sus parámetros?
Espero me puedas ayudar.
Muchas gracias por todo y que sigas ayudando !!

Respuesta.

Estimado Bruno, muchas gracias por tus conceptos, sigue los siguientes pasos:

1) Copia la línea DTSRUN
2) Abre una ventana de Windows Command
3) Pega la línea DTSRUN dentro de la ventana
4) Al final de la línea agrega (textual) /!X/!C = copy results onto Windows Clipboard
5) Corre el comando
6) Abre el notepad
7) Cliquea "EDIT PASTE", esto va a pegar el comando actual dentro del Notepad
 y te mostrará a ti el nombre del Package.

Suerte y quedo a tu disposición

Gustavo Herrera.

Pregunta "En la empresa donde trabajo utilizan sql server standard edition y no tiene disponible la opción de particionar, que puedo hacer si tengo una tabla de 10 millones de registros?"



PREGUNTA

Alejandro xxxxxxx @yahoo.com




Cordial saludo
Buenos días , señor Gustavo
Mi nombre es Fabio Hernández , trabajo en el área de desarrollo .net y bases de datos sql server , vi un blog suyo muy interesante y habla del tema de particionamiento de tablas SQL SERVER PARA TODOS Gustavo Ricardo Herrera : PARTICIONAR TABLAS EN 5 PASOSEn la empresa donde trabajo utilizan sql server standard edition y no tiene disponible la opcion de particionar, que puedo hacer si tengo una tabla de 10 millones de registros , en donde hay información histórica desde el año 2000 hasta el 2014, normalmente la información consultada es del 2012-2014 , pero en la tabla esta todo el historico, como no puedo particionar por la version del sql server que otra opcion podria hacer
Muchas gracias .
Att
xxxxxxx


CONTESTACION

Que tal Alejandro, saludos desde BsAs.

Perdón por la demora en contestarte, estoy muy atareado por estos dias.

Lo que te ocurre a Ti le ocurre a mucha gente... Van mis consideraciones...

-  Se te ha abierto una oportunidad de solicitarles a los dueños de la compañía para la cual trabajas el upgrade hacia una versión más profesional de Sql Server.  Has pie en la ecuación costo/beneficio y trata pues de explicarles - en el lenguaje más sencillo posible - uno de los problemas a los que se enfrenta la compañía (perfromance pobre de sus bases de datos), por no tener la versión adecuada de Sql Server.

- Una tabla de 10 millones de registros es, a priori, una tabla que no tendría que particionarse, al menos por la cantidad de registro que refieres. Recuerda siempre que el mantenimiento de una partición es una tarea más a futuro...

- Entiendo que tu problema pasa por otro lado...., veamos...

   Pienso que deberías hacer pie en algunos de los siguientes items antes de pensar en particionar.

   -  Determinación de las queries que más tiempo tardan en resolverse (hay un script en mi blog para ello)

   -  Estudio de los planes de ejecución de dichas queries. Apuesto hacia falta de un indexado apropiado o de una lógica "pobre" en las queries a las que te hago referencia.
    
   Por otra parte, desconozco si dispones de, al menos 3 discos físicos para poder distribuir los archivos de datos, log e índices en distintos discos y aprovechar de ese modo la lecto escritura paralela del sql server.

   Una última solución puede ser, yo no te la aconsejo, el crear una base de datos por año y luego simplemente joinear las consultas.

   Entiendo que habiendo revisado los anteriores puntos (planes de ejecución, indexado y lógica de las queries),  encontrarás la solución, sin precisar hacer esto último. 

   Suerte y quedo atento ante cualquier inquietud.

    Saludos desde Buenos Aires, Gustavo Herrera.