Preguntas y respuestas sobre SQL&Estudio de clúster, bloqueos misteriosos, la cuenta de SA, etc.

Editado por Nancy Michell

P Necesito comprender mejor cómo funciona el clúster. Nuestro entorno constará de Windows Server® 2003 de 64 bits que ejecuta SQL Server™ 2005, una granja de servidores web (una implementación de escalado del servidor de informes) con SQL Server Reporting Services (SSRS), un servidor de catálogo TempDB de SSRS y SQL Server que inserta datos desde una base de datos de terceros mediante un servidor vinculado y almacenará los datos para SSRS.

Deseamos un clúster tipo activo/activo/pasivo de 3 nodos. El nodo 1 sería activo y almacenaría los datos obtenidos de la base de datos de terceros. El nodo 2 sería activo y almacenaría el catálogo de SSRS. El nodo 3 sería pasivo y sería una conmutación por error para el nodo 1 o el nodo 2. ¿Podrían ayudarme?

R Lamentablemente, demasiadas personas se equivocan por los términos activo/activo y activo/pasivo con respecto al clúster de SQL Server. Creen que el clúster de SQL puede admitir el "escalado" de una base de datos o sesión SQL a través de varios servidores. Eso no es el caso. En SQL Server, no existe una base de datos o sesión tipo activo/activo. Una "sesión" es una instalación de SQL Server con las bases de datos correspondientes. Nuestro clúster según la sesión de SQL Server es activo (1) a pasivo (n) siempre (tenga en cuenta que el valor n puede ser cualquier cifra entre 1 y 7, en función de la versión de SQL Server). Por eso se denomina clúster de conmutación por error.

Una vez que se haya comprendido esto, las personas pueden empezar a pensar en instalar varias sesiones de clúster de conmutación por error en un conjunto de nodos. Por ejemplo, tres servidores físicos, todos ellos usando discos compartidos, podrían tener una sesión activa de forma predeterminada en el Nodo 1 y una segunda sesión activa de forma predeterminada en el Nodo 2, y ambas pueden conmutar por error al Nodo 3. Las sesiones son completamente independientes; no comparten datos ni son de tipo activo/activo. Ambas son de tipo activo/pasivo y ambas comparten la misma sesión de conmutación por error. Si ambas sesiones conmutan por error al Nodo 3, entonces el desafío con el tiempo es saber si el Nodo 3 soportará la carga. Por diseño, la conmutación por error está pensada para depender del poder de procesamiento igual para la conmutación por error. Si el pico de carga requiere dos nodos para procesar bajo un funcionamiento normal, es improbable que el Nodo 3 sobreviviera bajo el pico de carga normalmente asignado a dos nodos.

Dicho eso, dado el costo relativo de hardware capaz de ejecutar un clúster, entendemos cómo las personas sopesarían la probabilidad de que ambos nodos principales tengan un error simultáneamente y que fuercen toda la carga a un nodo. Teniendo eso en cuenta, pueden que tomen la decisión empresarial de asumir el riesgo en lugar de adquirir la capacidad de conmutación por error del 100%.

Afortunadamente, hay buenas noticias: SQL Server 2005 ofrece muchas más opciones para la alta disponibilidad (HA), incluidas alternativas que pueden conmutar por error más rápidamente que un clúster e incluso pueden significar copias duplicadas de datos (el clúster depende de una SAN única). Entre las opciones se incluyen la creación de reflejos, la réplica de punto a punto, etc. Con esas nuevas alternativas, tenemos muchas más opciones para satisfacer todo tipo de necesidades, incluidas algunas que pueden combinar varias características de alta disponibilidad.

El Asistente Microsoft® Cluster Configuration Validation (ClusPrep), ahora disponible para la descarga, reemplaza lo que solía ser la prueba de la lista de certificación de hardware (HCL), que podría llevar meses para validar una configuración completa para considerarla "admisible" bajo clúster. Esto coloca la herramienta de validación de hardware en manos del administrador de la base de datos, reduciendo el costo (tanto monetario como de tiempo) de obtener el hardware certificado colocado. Incluso puede hacer posible validar e implementar hardware heterogéneo dentro de un conjunto de nodos de clúster.

P Parece que un procedimiento de eliminación en uno de mis equipos se bloquea después de 12 horas. No está bloqueado. Mirando al plan de consulta más lento revela un desencadenador que se ejecuta durante 87.327 segundos, por lo que supongo que el procedimiento se bloquea en ese desencadenador. ¿Cómo puedo consultar exactamente qué instrucción se bloquea?

R Es bastante posible que un bucle dentro del desencadenador no sale por una variedad de motivos. Si se bloquea durante mucho tiempo y desea ver qué instrucción se está ejecutando, ejecute el código en la figura 1. Le indicará qué instrucción se ejecuta actualmente y ésta debería ser la que hace que el equipo no responda.

Figure 1 Buscar la instrucción en ejecución

-- Look at the current statement being run:
-- Put results to text (Ctrl + T)
DECLARE @Handle binary(20), 
        @start int, 
        @end int,
        @SPID int

SET    @SPID = spid

SELECT @Handle = sql_handle, 
        @start = stmt_start, 
        @end = stmt_end 
FROM Master..sysProcesses(NOLOCK) 
WHERE SPID = @SPID

IF NOT EXISTS (SELECT * FROM ::fn_get_sql(@Handle))PRINT ‘Handle not found in cache’
ELSE
   SELECT ‘Current Statement’= substring(text, (@start + 2)/2, CASE @end WHEN -1 THEN (datalength(text))
       ELSE (@end -@start + 2)/2 END)
       FROM ::fn_get_sql(@Handle)

P Necesito admitir la réplica transaccional a través de un firewall. El publicador y el distribuidor se encuentran fuera del firewall y el suscriptor está dentro. El suscriptor se define para escuchar en 1433 y éstos son mis nombres de equipo: Publicador: PUBMACHINE, Distribuidor: DISTMACHINE, Suscriptor: SUBMACHINE. ¿Qué puertos tengo que abrir para permitir la instantánea inicial y la publicación por inserción para ser correcta?

R Si usa una suscripción de inserción, abrir el puerto de SQL Server (1433 en su caso) debería ser suficiente, ya que el agente de distribución se ejecutará en el equipo del distribuidor (fuera del firewall) y probablemente tendrá acceso local a los archivos de instantánea generados por el agente de instantánea. Pero si usa una suscripción de extracción, el agente de distribución que se ejecuta en el equipo del suscriptor necesitará acceso a los archivos de instantánea a través del firewall de alguna manera. Aquí están las opciones que puede tener en cuenta.

Suponiendo que los archivos de instantánea ya son accesibles desde un recurso de archivos compartidos fuera del firewall, puede abrir los puertos de archivos compartidos de Windows® a través del firewall de manera que el agente de distribución que se ejecuta dentro del firewall pueda tener acceso a los archivos de instantánea que se encuentran fuera (aunque tenga cuidado con las implicaciones de seguridad que esto puede tener para otras partes de su infraestructura). Tenga en cuenta que si configuró una ruta de acceso local como la ubicación de instantánea predeterminada (valor predeterminado de SSMS), es posible que tenga que usar la opción /AltSnapshotFolder del agente de distribución para invalidar la ubicación de recogida del archivo de instantánea.

También puede configurar la réplica para usar FTP para transferir archivos de instantánea (y necesitaría abrir el puerto 21 para eso).

P Deseo saber si hay inconvenientes en deshabilitar la cuenta de SA en SQL Server 2005 y si esta acción agrega un verdadero valor de seguridad. ¿Hay algún artículo sobre esta pregunta?

R En una instalación nueva de SQL Server 2005 cuando el modo mixto no está habilitado, la cuenta de SA está deshabilitada de forma predeterminada y se genera una contraseña aleatoria para ella. También puede deshabilitarla usted mismo. No hay ningún artículo sobre ello, pero la deshabilitación y el cambio de nombre de inicio de sesión se trata en un documento de recomendaciones.

Si desea protegerse de intentos para interrumpir la cuenta de SA, también puede cambiar su nombre. Sólo recuerde que, si habilita una cuenta deshabilitada, debería establecer una nueva contraseña para ella.

Para responder a su pregunta acerca de si esto ofrece seguridad verdadera, recuerde que la seguridad agregada de deshabilitar la cuenta procede del hecho de que adivinar la contraseña no tendría sentido mientras la cuenta está deshabilitada. No importa el tiempo del que disponga el pirata informático o virus, un ataque por fuerza bruta contra una cuenta bloqueada no tendrá éxito. El cambio de nombre o la deshabilitación de SA interrumpirá las aplicaciones que son dependientes de la cuenta de SA para su conectividad. De todos modos, buscar y, a continuación, corregir o eliminar estas aplicaciones debe considerarse como una prioridad. Como se indicó, la cuenta no se puede usar para conectarse a la base de datos hasta que se vuelva a habilitar. Además, debido a que se produce un error antes en el proceso de autenticación, un intento con error supondrá un impacto inferior en el sistema atacado.

P Una de mis mayores bases de datos de procesamiento de transacciones en línea (OLTP) tiene un archivo de registro que es dos veces mayor al tamaño del archivo de datos. He intentado usar los comandos siguientes para reducir el archivo de registro a un tamaño razonable, pero tengo que reducirlo aún más:

backup database syslogs to backupfile
DBCC SHRINKFILE (syslogs_log)

R Debería cambiar su base de datos de copia de seguridad a una instrucción de registro de copia de seguridad. Otra alternativa podría ser colocar su base de datos en el modo sencillo de recuperación y enviar la instrucción shrinkfile. Después de que se finalice la reducción del registro, establezca la base de datos a su modelo de recuperación anterior y realice una copia de seguridad de la base de datos. Si todavía no se reduce, compruebe que no hay transacciones abiertas (use dbcc opentran). El artículo siguiente de Knowledge Base ofrece más información: support.microsoft.com/kb/907511.

P Si la conmutación por error ocurre durante un trabajo programado del agente de SQL Server, ¿qué pasa con ese trabajo después de la conmutación por error? ¿Tengo que reiniciarlo manualmente?

R Sí, tendrá que iniciarlo manualmente si no tiene algún otro proceso establecido. Si no desea tener que reiniciar trabajos manualmente, podría escribir un script que actualice una tabla tras la finalización del trabajo. Si el valor es igual a 1, el trabajo se ejecutó; cualquier otro valor indica que el trabajo no se completó y un segundo trabajo emitirá posteriormente el comando de inicio. Por tanto, si bien el trabajo se tiene que volver a ejecutar si se produce una conmutación por error durante su paso, al escribir un script se puede aliviar parte de la preocupación de esos trabajos cruciales, durante la noche que se deben completar antes del siguiente día hábil.

Sugerencia: Actualización y DBCC UPDATEUSAGE

¿Está actualizando desde SQL Server 2000 a SQL Server 2005?

De ser así, asegúrese de que usa el derecho DBCC UPDATEUSAGE después de que se actualicen sus bases de datos.

DBCC UPDATEUSAGE notifica y corrige las inexactitudes en los recuentos de página y de fila en las vistas de catálogo. Estas inexactitudes se deben corregir porque pueden hacer que el procedimiento almacenado del sistema sp_spaceused devuelva informes de uso de espacio incorrecto. En SQL Server 2005, estos valores siempre se mantienen correctamente, por lo que estas bases de datos nunca deberían experimentar recuentos incorrectos. Sin embargo, las bases de datos actualizadas a SQL Server 2005 pueden contener recuentos no válidos, por lo que debería ejecutar DBCC UPDATEUSAGE después de realizar la actualización.

Aquí describimos cómo funciona DBCC UPDATEUSAGE. Corrige las filas, las páginas usadas, las páginas reservadas, las páginas hoja y los recuentos de página de datos para cada partición de una tabla o índice. Si no hay inexactitudes en las tablas de sistema, DBCC UPDATEUSAGE no devuelve datos. Si se encuentran y se corrigen inexactitudes, y no ha usado WITH NO_INFOMSGS, DBCC UPDATEUSAGE devuelve las filas y las columnas que se están actualizando en las tablas del sistema.

DBCC UPDATEUSAGE también se puede usar para sincronizar contadores de espacio-uso. Debido a que DBCC UPDATEUSAGE puede tardar algo de tiempo en ejecutarse en tablas o bases de datos de gran tamaño, normalmente sólo debería usarse cuando sospeche que sp_spaceused devuelve valores incorrectos. Tenga en cuenta que sp_spaceused acepta un parámetro opcional para ejecutar DBCC UPDATEUSAGE antes de devolver la información de espacio para la tabla o el índice.

DBCC CHECKDB se mejoró en SQL Server 2005 para detectar cuando los recuentos de página o fila pasa a ser negativo. Cuando se detectan valores negativos, DBCC CHECKDB dará como resultado una advertencia y una recomendación para ejecutar DBCC UPDATEUSAGE para tratar el problema. Aunque pueda parecer como si la actualización de la base de datos a SQL Server 2005 causara este problema, asegúrese de que los números no válidos existían antes del procedimiento de actualización.

Como ejemplo, explicamos aquí cómo se actualizarían los recuentos de página o fila, o ambas, para todos los objetos de la base de datos actual. El comando siguiente especifica 0 para el nombre de la base de datos y DBCC UPDATEUSAGE notifica información actualizada para la base de datos actual:

DBCC UPDATEUSAGE (0);
GO

Para actualizar los recuentos de página o fila, o ambas, por ejemplo, AdventureWorks, y también para suprimir los mensajes de información, ejecutaría un comando similar al siguiente, que especifica AdventureWorks como el nombre de base de datos y, a continuación, suprime todos los mensajes de información:

USE AdventureWorks;
GO
DBCC UPDATEUSAGE (‘AdventureWorks’) WITH NO_INFOMSGS; GO

Para obtener más información, busque DBCC UpdateUsage en los libros en línea de SQL Server.

Thanks to the following Microsoft IT pros for their technical expertise: Ken Adamson, Sunil Agarwal, Siggi Bjarnason, Shaun Cox, Laurentiu Cristofor, Ernie DeVore, Michael Epprecht, Lucien Kleijkers, Raymond Mak, Chat Mishra (MSLI), Niraj Nagrani, Rick Salkind, Jacco Schalkwijk, Vijay Sirohi, Vijay Tandra Sistla, Matthew Stephen, and Buck Woody. Thanks to Saleem Hakani for this month's tip.

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.