Diario de SQL Server

el_lector_pregunta

El lector pregunta: cómo pasar datos si existe integridad referencial

Escrito por qwalgrande 28-12-2010 en General. Comentarios (0)

Tengo 2 DB en SQL Server 2005 ambas con \"Intregridad Referencial\" y necesito pasar los datos que estan en la DB1 a la DB2 pro si hago un Import and export cancela por el control de Integridad referencial. Desde ya agradezco cualquier ayuda que me puedas brindar.

 

Tienes dos opciones:
- Averiguar y ejecutar el traspaso de datos en el orden correcto en que has de pasar los datos para que la integridad referencial quede respetada (primero las tablas auxiliares, luego las maestras y luego las de detalle).
- Deshabilitar la integridad referencial (para cada tabla, alter table MiTabla nocheck constraint all), pasar los datos y volver a habilitarla (alter table MiTabla check constraint all).

El lector pregunta: Reducir, reorganizar

Escrito por qwalgrande 28-12-2010 en General. Comentarios (0)

Hola Alberto:

 

El dia de ayer ejecute en una base de datos sql 2000 la opcion de reducir archivos que se encuentra en " click derecho sobre la base de datos Todas las tareas\Reducir base de datos". Reduje el archivo Log en el boton "Archivos" ubicado en la seccion "Reducir Archivos", despues di aceptar a ambas ventanas. Tengo entendido que al darle a aceptar a la primera ventana (Todas las tareas\Reducir base de datos), reduce el archivo data.

 

Lo que me ocurrio es lo siguiente:

 

Antes, la cantidad de data era de 3893.69 MB y despues de ejecutar la reduccion la cantidad de data es de 911.21 MB.

 

No hay reporte de incidente de perdida de data, pero si hay una gran alarma por el cambio drastico de tamaño que ha habido ya que ocurrio en produccion.

 

Es posible que se haya reducido tanto? A la espera de tus comentarios.
 
Si lo que ejecutaste es un shrink, es lógico que se hayan reducido los ficheros de log y datos. Ten en cuenta que además se reordenan las páginas, con lo que la reducción no es sólo el sobrante. Si ahora haces otra reducción podrás dejar los ficheros mucho más pequeños.

 

Es importante que tengas en cuenta que este tipo de acciones no son muy recomendables en entornos de producción. Durante el tiempo que estás reduciendo, generas muchos bloqueos y además se produce fragmentación de disco. Lo ideal es configurar un tamaño (el que estimes que pueda ser ) y vigilar que no se llena. Otra cosa sería que estuvieras quedándote sin espacio, en ese caso, hay que tomar medidas drásticas como ésta. Recuerda realizar un backup completo de tu base de datos, ya que con el shrink pierdes la secuencia del log de transacciones.

 

El objetivo fue reducir solo el archivo Log por error ejecute el asistente el cual tambien redujo el de data. La reduccion de data de 3893.69 a 911.31 genero una enorme alarma, pensaron que se perdio Data. Ahora solo me queda elaborar el informe al respecto.

 

Esta tarea la hice en un tiempo en el que se aviso a los usuarios que no iba haber servicio.

 

¿Esta reordenacion de paginas es buena?,  ¿puede afectar en el rendimiento de la bd?

¿Existe otra manera de reordenar las paginas sin hacer shrink?

 

La reordenación y/o reindexación sí es buena y necesaria para un rendimiento adecuado. Hacerlo con un shrink no lo es. Afecta al rendimiento muy positivamente una vez que se completa, aunque puede ocasionar bloqueos en función de cómo lo realices. Lo suyo es que utilices una reindexación a medida, como la que aquí se sugiere (http://ola.hallengren.com/), aunque puedes usar en su lugar cualquier otra fórmula que encuentres y se adapte a tus necesidades. A las malas, usa un plan de mantenimiento.

 

 

El lector pregunta: Un restore que tarda mucho y no termina

Escrito por qwalgrande 02-12-2010 en General. Comentarios (0)

Pregunta: Mi situación actual es la siguiente, tengo una bd en sql2000personal y tengo un backup y necesito restaurarla en mi equipo que tiene SQL2008R2, pero resulta que cuando le doy restaurar se queda colgado no avanza el contador de progreso y se queda infinito...
Veo que lo que hace es generar el log gigantisimo y no se que esta haciendo.

 

Respuesta: En cuanto a lo que me planteas, es normal que tarde bastante, y más si la base de datos es medianamente grande. Pero si haces el restore desde una consulta, verás que va indicándote que debe realizar migraciones de versión tras versión y son muchísimas versiones. Haz eso, lanza el restore desde Management Studio, irás viendo cómo progresan esas migraciones.

 

Entiendo que has pasado el Upgrade Advisor a la base de datos para asegurarte de que es posible la migración.

 

Pregunta: Las bases de datos que tienen estado Restaurando son aquellas que no concluyeron el proceso de restauración y deje que lo realizara por casi 1 hora.
La BD de instancia SQLEXPRESS llego a 90% y se quedo sin hacer nada.

El tamaño que genera de log es gigantismo y aun hay espacio en disco. Pero nada…

 

(se adjunta un backup de la base de datos)

 

Respuesta:El problema está en que la base de datos de la que se hizo backup tenía un log enorme. Ejecuta lo siguiente (reemplaza la ruta del backup):

 

restore filelistonly from disk = N'[RutaDelBackup]\CopiaDeSeguridad.BAK'

 

Verás que el log ocupa 32 Gb. Con ese tamaño es más que normal que se tarde muchísimo tiempo en hacer el redo y levantar la base de datos.

 

Te recomiendo que revises la base de datos original y verifiques que ese tamaño del log es el esperado (para lo que ocupan los datos, no lo es). Así que lo que yo haría sería truncar el log y hacer otro backup que ya sí podrás restaurar en un tiempo razonable.

 

El lector pregunta: : obtener el último día del mes

Escrito por qwalgrande 08-11-2010 en General. Comentarios (0)

Inauguramos una sección, preguntas que me llegan de lectores del blog desde la sección de contacto (http://qwalgrande.blogspot.es/contactar/). Intentaré publicar la pregunta y la respuesta para que así estas dudas sean de utilidad para todo el que quiera acceder a ella. De otro modo, se quedaría resuelta solo para una persona.

 

Pregunta: Tengo una fecha, 10-12-2010, (mm-dd-yyyy) tengo que sacar cual es el dia maximo de ese mes.
 
Ejemplo: 10-12-2010,
resultado: 31

 

Respuesta: Hay varios mecanismos. Uno de ellos es restarle un día al primer día del mes siguiente. Se haría así:

 

declare @dia smalldatetime

select @dia = '20101210'

 

select DATEADD(MONTH, 1, @dia) --> Añado un mes

select CONVERT(char(6), DATEADD(MONTH, 1, @dia), 112) --> Me quedo con la parte de YYYYMM

select CAST(CONVERT(char(6), DATEADD(MONTH, 1, @dia), 112) + '01' as smalldatetime) --> Primer día del siguiente mes

select DATEADD(DAY, -1, CAST(CONVERT(char(6), DATEADD(MONTH, 1, @dia), 112) + '01' as smalldatetime)) --> Último día de este mes

select DATEPART(DAY, DATEADD(DAY, -1, CAST(CONVERT(char(6), DATEADD(MONTH, 1, @dia), 112) + '01' as smalldatetime))) --> La respuesta!!