sábado, 24 de mayo de 2008

Resource Database

Porqué hablar de esta base de datos que a muchos seguramente no os dirá nada, pues muy sencillo, porque ante una pregunta formulada en sqlservercentral.com me surgió la duda de si era una de las bases de datos del sistema de SQL Server 2005.

La base de datos Resource es de sólo lectura y contiene todos los objetos de sistema (sys.objects). Esta BD hace que las actualizaciones de nuestro SQL Server 2005 sean más sencillas de realizar y más rápidas.

El nombre físico es mssqlsystemresource.mdf y mssqlsystemresource.ldf, están localizadas por defecto en la ruta de instalación de SQL Server 2005 \Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\. Cada instancia tendrá asociada una base de datos resource y no pueden compartirse entre instancias (lógico, ya que cada BD Resource contiene las actualizaciones de cada instancia).

Un aspecto muy importante y a tener en cuenta es que la BD Resource depende de la localización de la BD master. Si cambiamos de lugar la bd master tendremos que hacer lo mismo con la bd Resource.

Más información en:
http://msdn.microsoft.com/en-us/library/ms190940.aspx

sábado, 12 de abril de 2008

Crisis, sí CRISIS

Joder con ZP, antes de las elecciones no había crisis, un mes después sí hay crisis. Que a qué viene esto? Pues muy fácil, el día 14 de este mes iba a celebrarse en Alicante un seminario de Solid Quality Learning impartido por Eladio Rincón y yo estaba apuntado gracias a que mi empresa me pagaba el curso. La desilusión llegaba esta semana cuando recibíamos un mail avisándonos que se suspendía el seminario porque no se llegaba al mínimo de asistentes :-(((

Y claro esto hace reflexionar, sin contar con la gente que se paga el curso de su bolsillo, los que dependen de sus empresas para asistir a este tipo de eventos de formación, si no asisten es porque las empresas no están por la labor de gastar las perras en cursos y ahorrarlo para otros menesteres. En fin que me he desahogado y espero que España remonte el vuelo y para el próximo seminario se cumpla con el mínimo de asistentes.

Vídeos evento del 7 de Marzo GUSENET

Ya tenemos los vídeos de las sesiones celebradas ese día en Clave Informática.
Los 3 primeros vídeos son de David Bernad (http://bernilost.blogspot.com/) un compi de trabajo y amigo ;-) que hizo una exposición de WPF y herramientas con las que trabaja para modelado en 3D

http://gusenet.gruposdeusuarios.net/VideoWPF3DParte1/tabid/359/Default.aspx
http://gusenet.gruposdeusuarios.net/VideoWPF3DParte2/tabid/360/Default.aspx
http://gusenet.gruposdeusuarios.net/VideoWPF3DParte3/tabid/361/Default.aspx

Los vídeos de la segunda charla que trataba de una pequeña introducción a LINQ to SQL por Jorge Martínez

http://gusenet.gruposdeusuarios.net/VideoLINQParte1/tabid/362/Default.aspx
http://gusenet.gruposdeusuarios.net/VideoLINQParte2/tabid/363/Default.aspx
http://gusenet.gruposdeusuarios.net/VideoLINQParte3/tabid/364/Default.aspx

Los vídeos cortesía de Miguel Ángel Gras (saludos ex vecino)

Instalando SQL Server 2008 CTP de Noviembre

Sí, ya se que esto está más que resuelto y que el propio microsoft da la solución, pero el caso es que no tenía internet cuando estaba haciendo la instalación y me quedé un poco con cara de gili al ver ayer que no podía instalar la CTP de Noviembre, en fin mirando el lado positivo, me pegué una viciada a la XBOX 360 xDDD.

Para todos aquellos que vayan a instalar la CTP de Noviembre en una instalación limpia sobre Virtual PC y un XP con SP2 que sepáis que antes de poneros con la instalación tenéis que instalar Windows Installer 3.1 sino os dará una petada como esta:

-Unable to find an entry point named 'MsiSetExternalUIRecord' in DLL 'msi.dll'..

El instalador lo podéis encontrar en el propio DVD en la carpeta:
Servers\redist\Windows Installer
Y también como siempre en el centro de descargas de Microsoft.

Espero que os sea de utilidad a los que aún no tengáis instalada esta CTP y os encontréis con el mismo problema. Salu2

lunes, 31 de marzo de 2008

Varios Microsoft y SQL Server

Estamos a puntito de que Microsoft de por terminado el soporte técnico a SQL Server 2000 en sus versiones 64-Bit, Developer Edition, Enterprise Edition, Standard Edition y Workgroup Edition, la fecha de su defunción es el día 4 de Abril de 2008, eso sí, si disponéis del soporte técnico ampliado podréis disfrutar de él hasta el 9 de Abril de 2013.
Si quieres estar al día puedes visitar este enlace:
http://support.microsoft.com/lifecycle/?p1=2852

Por otra parte, ante el retraso sufrido por SQL Server 2008 RTM, la comunidad está pidiendo a gritos la publicación del Service Pack 3 para SQL Server 2005. Desde el Service Pack 2 ya se han publicado 6 versiones acumulativas y actualmente se está preparando una séptima. Ya sabéis si queréis estar al día debéis visitar:
http://support.microsoft.com/default.aspx/kb/937137/en-us# (y como ellos mismos dicen, "si no se ve gravemente afectados por cualquiera de estos problemas, nosotros recomendamos que espere al Service Pack siguiente de SQL Server 2005 que contiene la revisión en este paquete de actualización acumulativa")

domingo, 24 de febrero de 2008

SMO (SQL MANAGEMENT OBJECTS)

SMO es un conjunto de objetos de programación que cuenta con toda la funcionalidad de administración de la base de datos de SQL Server. De hecho, Management Studio se creó con SQL Management Objects. SMO se implementa como un ensamblado de Microsoft .NET Framework. Podemos utilizar SMO para automatizar las tareas administrativas habituales de SQL Server, como la recuperación mediante programación de los valores de configuración, la creación de nuevas bases de datos, la aplicación de secuencias de comandos de T-SQL, la creación de trabajos de SQL Server Agent y la programación de copias de seguridad. El modelo de objetos SMO es una sustitución más segura, confiable y escalable de los Objetos de administración distribuida (DMO), que se incluyó en las versiones anteriores de SQL Server.Para implementar en nuestra aplicación la funcionalidad de SMO debemos añadir una referencia al espacio de nombres Microsoft.SqlServer.SMO, esta dll la encontraremos en C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies

Ejemplo de cómo crear un Backup con SMO desde VB:

Imports Microsoft.SqlServer.Management.Smo
Public Class frmInicio

Private Sub cmdBackup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBackup.Click
Try
Dim bck As New Backup
Debug.Print(DateTime.UtcNow)
bck.Database = "PRUEBA"
bck.Devices.Add(New BackupDeviceItem("C:\BACKUP\PRUEBA.bak", DeviceType.File))
bck.Action = BackupActionType.Database
bck.SqlBackup(New Server("PCFRAN"))
Debug.Print(DateTime.UtcNow)
MsgBox("Backup realizado con éxito")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class

En los BOL de SQL Server 2005 podemos encontrar numerosos ejemplos de cómo programar jobs, etc. todo con SMO. Como muestra un botón:

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/smo9/html/a15949ef-88d9-4205-892e-0b66588b4fcc.htm

Interceptando Errores en SQL Server con .Net Framework 2.0

Una conexión SqlConnection permanecerá abierta mientras el nivel de severidad del error sea de 19 o menos, para errores iguales o por encima de un nivel 20 se cerrará automáticamente la conexión.
A continuación se muestra información del nivel de severidad y una descripción (información extraída de los BOL de SQL Server 2005)

0-9
Informational messages that return status information or report errors that are not severe. The Database Engine does not raise system errors with severities of 0 through 9.
10
Informational messages that return status information or report errors that are not severe. For compatibility reasons, the Database Engine converts severity 10 to severity 0 before returning the error information to the calling application.
11-16
Indicate errors that can be corrected by the user.
11
Indicates that the given object or entity does not exist.
12
A special severity for queries that do not use locking because of special query hints. In some cases, read operations performed by these statements could result in inconsistent data, since locks are not taken to guarantee consistency.
13
Indicates transaction deadlock errors.
14
Indicates security-related errors, such as permission denied.
15
Indicates syntax errors in the Transact-SQL command.
16
Indicates general errors that can be corrected by the user.
17-19
Indicate software errors that cannot be corrected by the user. Inform your system administrator of the problem.
17
Indicates that the statement caused SQL Server to run out of resources (such as memory, locks, or disk space for the database) or to exceed some limit set by the system administrator.
18
Indicates a problem in the Database Engine software, but the statement completes execution, and the connection to the instance of the Database Engine is maintained. The system administrator should be informed every time a message with a severity level of 18 occurs.
19
Indicates that a nonconfigurable Database Engine limit has been exceeded and the current batch process has been terminated. Error messages with a severity level of 19 or higher stop the execution of the current batch. Severity level 19 errors are rare and must be corrected by the system administrator or your primary support provider. Contact your system administrator when a message with a severity level 19 is raised. Error messages with a severity level from 19 through 25 are written to the error log.
20-25
Indicate system problems and are fatal errors, which means that the Database Engine task that is executing a statement or batch is no longer running. The task records information about what occurred and then terminates. In most cases, the application connection to the instance of the Database Engine may also terminate. If this happens, depending on the problem, the application might not be able to reconnect.
Error messages in this range can affect all of the processes accessing data in the same database and may indicate that a database or object is damaged. Error messages with a severity level from 19 through 25 are written to the error log.
20
Indicates that a statement has encountered a problem. Because the problem has affected only the current task, it is unlikely that the database itself has been damaged.
21
Indicates that a problem has been encountered that affects all tasks in the current database, but it is unlikely that the database itself has been damaged.
22
Indicates that the table or index specified in the message has been damaged by a software or hardware problem.
Severity level 22 errors occur rarely. If one occurs, run DBCC CHECKDB to determine whether other objects in the database are also damaged. The problem might be in the buffer cache only and not on the disk itself. If so, restarting the instance of the Database Engine corrects the problem. To continue working, you must reconnect to the instance of the Database Engine; otherwise, use DBCC to repair the problem. In some cases, you may have to restore the database.
If restarting the instance of the Database Engine does not correct the problem, then the problem is on the disk. Sometimes destroying the object specified in the error message can solve the problem. For example, if the message reports that the instance of the Database Engine has found a row with a length of 0 in a nonclustered index, delete the index and rebuild it.
23
Indicates that the integrity of the entire database is in question because of a hardware or software problem.
Severity level 23 errors occur rarely. If one occurs, run DBCC CHECKDB to determine the extent of the damage. The problem might be in the cache only and not on the disk itself. If so, restarting the instance of the Database Engine corrects the problem. To continue working, you must reconnect to the instance of the Database Engine; otherwise, use DBCC to repair the problem. In some cases, you may have to restore the database.
24
Indicates a media failure. The system administrator may have to restore the database. You may also have to call your hardware vendor.

Ahora veamos la manera de interceptar los errores desde nuestra aplicación, el código que muestro a continuación intercepta posibles errores a la hora de conectar con nuestra base de datos

Private Sub ConectarBD(ByVal cadenaConexion As String)
Dim conn As New SqlConnection(cadenaConexion)
Try
conn.Open()
Catch ex As SqlException
Dim errorMessage As String = ""
'Recorremos todos los errores que nos devuelva.
'Podemos inspeccionar los errores para devolver mensajes personalizados dependiendo
'del tipo de error.
For Each connectionError As SqlError In ex.Errors
errorMessage += connectionError.Message & "error: " & _
connectionError.Number.ToString & ")" & Environment.NewLine
'Aquí podríamos poner un SELECT CASE con los códigos de error más comunes, como
'login de usuario, nombre de la base de datos, etc
If connectionError.Number = 18456 Then
MsgBox("Login inválido, por favor introduzca unas credenciales válidas")
End If
Next
MessageBox.Show(errorMessage)
Finally
conn.Close()
End Try
End Sub