 TechNet Magazine March 2007
TechNet Magazine March 2007
MARCH 2007
SQL Server

PUESTA A PUNTO DE SQL SERVER

Es el mes dedicado a SQL Server en la revista TechNet Magazine. En este número comprenderá mejor el modo de utilizar SQL Server. Aprenderá a obtener índices limpios y en buen estado para que SQL Server pueda realizar consultas rápidas y ponga a su disposición toda la información que necesita.

Verá cómo los clústeres de SQL Server ofrecen redundancia y admiten un tiempo de actividad mejor. También averiguará lo que implica una alta disponibilidad en su entorno y cómo obtenerla. Por último, aprenderá a poner fin de una vez por todas a los dilemas relacionados con la partición de tablas.

Administración de Windows

Y no se olvide, Mark Russinovich regresa de nuevo este mes con más información sobre el kernel de Windows Vista.

CARACTERÍSTICAS
SQL Server Nuevas herramientas para diagnosticar el estado de los índices

Para obtener el mejor rendimiento de SQL Server, necesita supervisar y mantener los índices en buen estado. Las nuevas vistas y funciones de administración dinámicas le proporcionan una ventana a SQL Server que le ayudará a comprender mejor cómo funcionan sus índices y a descubrir los problemas potenciales de rendimiento.

Randy Dyess Obtención de alta disponibilidad para SQL Server

SQL Server 2005 ofrece varias opciones para mejorar la disponibilidad de la base de datos, desde la réplica hasta los clústeres y el trasvase de registros. Examinaremos más de cerca las distintas opciones a fin de configurar SQL Server y ayudarle a encontrar cuáles son las adecuadas para su entorno.

Zach Nichter Simplificación del mantenimiento de bases de datos con particiones de tablas

En el pasado, trabajar con particiones y tablas muy grandes resultaba una tarea pesada y tediosa, pero con SQL Server 2005 la partición de tablas es mucho más sencilla. Ahora puede crear fácilmente varias particiones, mover dichas particiones, eliminar particiones antiguas e incluso cambiar el modo en que se dividen los datos. Aquí se lo mostramos.

Noah Gomez Los mejores consejos para el clúster de SQL Server

Un clúster de servidor ofrece capacidades de conmutación por error que garantizan un mayor tiempo productivo para sus operaciones críticas. Sin embargo, para que un clúster sea efectivo, debe implementarse adecuadamente. A continuación se muestran algunas sugerencias clave que le ayudarán a acelerar su clúster y mantenerlo en un funcionamiento estable.

Tom Moreau Administración de Windows Dentro del kernel de Windows Vista: Segunda parte

Este mes continuamos con nuestro análisis exhaustivo sobre las novedades del kernel de Windows Vista. En este número, revisaremos algunos avances sobre cómo Windows Vista administra la memoria y explora las áreas relacionadas con el inicio de sistema, el procedimiento de apagado y la administración de energía.

Mark Russinovich
COLUMNAS
Nota del editor

Estantería de trofeos

Joshua Trupin Caja de herramientas

Nuevos productos para profesionales de TI

Greg Steen Utility Spotlight

SyncToy

Jay Munro Preguntas y respuestas sobre SQL

Horario de verano, memoria del servidor y mucho más

Editado por Nancy Michell The Cable Guy

El protocolo DHCPv6

Joseph Davies Windows PowerShell

El poder de las variables

Don Jones 		¡Hola, chicos del scripting!

Respuesta a sus preguntas acerca de las unidades organizativas... por solo 5 centavos

Los chicos del scripting de Microsoft Preguntas y respuestas sobre Exchange

Registros de transacciones, cmdlets, administración remota y más

KC Lemson y Nino Bilic Vigilancia de seguridad

Implementación de EFS: Segunda parte

John Morello Archivos del escritorio

Manual básico de PsTools

Wes Miller Dentro de Microsoft.com

Introducción a la creación de reflejos de bases de datos

Saleem Hakani Notas de campo

Ha llegado el médico

Matt Hester Confidencial de Windows

La estupidez puede ser inteligente

Raymond Chen


 SQL Server: Nuevas herramientas para diagnosticar el estado de los &#237;ndices
SQL Server Randy Dyess

Nuevas herramientas para diagnosticar el estado de los índices
Resumen:
  • Fragmentación de índices
  • Uso de los índices
  • Actividad funcional de los índices
Descargar el código de este artículo: DyessSQLIndex2007_03.exe (151KB)

Uno de los primeros elementos que debe aparecer en cualquier lista de comprobación para la optimización del rendimiento de SQL Server es el ajuste de los índices de una base de datos. La capacidad del optimizador de consultas de SQL Server para hacer un buen uso de los índices durante la ejecución de una consulta depende no sólo de la creación de índices eficaces sino
también del estado de estos. Una serie de vistas y funciones de administración dinámicas (DMV y DMF, respectivamente), incluidas por primera vez en SQL Server™ 2005, puede ayudar a los administradores de bases de datos a determinar la eficacia de los índices y a descubrir cualquier problema de rendimiento.
Las DMV y DMF permiten mirar en el interior de un servidor y obtener información sobre su estado que le ayuda a supervisar el buen estado y rendimiento de la instancia de servidor y a diagnosticar problemas. Los administradores de bases de datos familiarizados con versiones anteriores de SQL Server descubrirán que estas DMV y DMF reemplazarán el uso de comandos DBCC, la ejecución de algunos procedimientos almacenados del sistema, la consulta de numerosas tablas del sistema y la captura de eventos con el Analizador de SQL Server.
Hay disponibles tres funciones y vistas clave (concretamente, sys.dm_db_index_physical_stats, sys.dm_db_index_usage_stats y sys.dm_db_index_operational_stats) para ayudarle a comprobar si los índices funcionan tal y como esperaba. Estas funciones y vistas permiten revisar la E/S y los patrones de bloqueo de los índices, y averiguar si el optimizador de consultas utiliza los índices de un modo que no conduce a contenciones innecesarias en la base de datos.

Fragmentación de índices
La DMF sys.dm_db_index_physical_stats se ha creado para sustituir a DBCC SHOWCONTIG y mostrará una fragmentación del índice. Sin embargo, a diferencia de DBCC SHOWCONTIG, que coloca un bloqueo compartido (S) en la tabla que contiene el índice, sys.dm_db_index_physical_stats sólo coloca un bloqueo compartido intencionado (IS), que reduce notablemente el bloqueo de la tabla durante la ejecución de la función.
Para determinar la fragmentación de un índice cuando se usa sys.dm_db_index_physical_stats, examine una combinación de tres columnas en los resultados de la función. Para determinar la fragmentación lógica de índices (fragmentación de extensión de montones), consulte el valor devuelto en la columna avg_fragmentation_in_percent. La fragmentación lógica es el porcentaje de páginas que no están ordenadas en el nivel de hoja de un índice, mientras que la fragmentación de extensiones es el porcentaje de extensiones desordenadas en el nivel de hoja de un índice. Las fragmentaciones lógicas y de extensiones pueden afectar al rendimiento de un índice al requerir E/S adicional y el desplazamiento del encabezado del disco, ya que este debe omitirse para leer las páginas en orden. Deberá esforzarse para que los dos tipos de fragmentación, lógica y de extensiones, se mantengan lo más cerca posible del valor cero.
La fragmentación interna de un índice es el porcentaje del llenado de página. Por supuesto, querrá que la página de índice esté tan llena como sea posible, pero también necesitará equilibrar el llenado con respecto al número de inserciones en las páginas de índice para que el número de páginas divididas sea lo menor posible.
Examine el argumento avg_page_space_used_in_percent de sys.dm_db_index_physical_stats para determinar el llenado de las páginas de índice. Para configurar correctamente la proximidad de este número con respecto al 100 por cien, ajuste el factor de llenado de un índice al tiempo que observa el número de divisiones de página que se producen. En algún momento, el número de divisiones de página empezará a aumentar notablemente, lo que indica que ha establecido el factor de llenado del índice con un valor demasiado alto. El ajuste de un factor de llenado de índice conlleva tiempo y la realización de pruebas, y no debe realizarse sin la planeación adecuada. Los índices que no tienen inserciones aleatorias en un índice pueden tener los factores de llenado establecidos con un valor cercano a 100 sin preocuparse por el aumento de las divisiones de página.
Para determinar los niveles de fragmentación de todos los índices de la tabla AdventureWorks.HumanResources.Employee, podría utilizar una instrucción como la siguiente:
SELECT *
FROM sys.dm_db_index_physical_stats (DB_ID('AdventureWorks')
,OBJECT_ID('HumanResources.Employee')
,NULL
-- NULL to view all indexes;
-- otherwise, input index number
,NULL -- NULL to view all partitions of an index
,'DETAILED') -- We want all information
Asegúrese de que esta DMF determine automáticamente los índices que hay que volver a generar, los que hay que volver a organizar y los que no necesitan mantenimiento. El examen de los valores de las columnas avg_page_space_used_in_percent y avg_fragmentation_in_percent de esta DMF para la fragmentación de índices que queda fuera del umbral lógico y de densidad aceptado puede ayudarle a determinar qué operación debe llevar a cabo en el índice.
En función del estado de los índices, es posible que el ejemplo de la figura 1 no devuelva datos en su copia de la base de datos de ejemplo de AdventureWorks, pero puede adaptarse fácilmente a otras bases de datos.
Figure 1 Examen de la fragmentación y llenado de páginas (Close Figure 1)
--Reorganize the following indexes in the AdventureWorks database
USE AdventureWorks
GO

SELECT OBJECT_NAME([object_id]) AS 'Table Name',
index_id AS 'Index ID'
FROM sys.dm_db_index_physical_stats (DB_ID('AdventureWorks')
,NULL -- NULL to view all tables
,NULL -- NULL to view all indexes; otherwise, input index number
,NULL -- NULL to view all partitions of an index
,'DETAILED') --We want all information
WHERE ((avg_fragmentation_in_percent > 10
AND avg_fragmentation_in_percent < 15) -- Logical fragmentation
OR (avg_page_space_used_in_percent < 75
AND avg_page_space_used_in_percent > 60)) --Page density
AND page_count > 8 -- We do not want indexes less than 1 extent in size
AND index_id NOT IN (0) --Only clustered and nonclustered indexes

--Rebuild the following indexes in the AdventureWorks database
USE AdventureWorks
GO

SELECT OBJECT_NAME([object_id]) AS 'Table Name',
index_id AS 'Index ID'
FROM sys.dm_db_index_physical_stats (DB_ID('AdventureWorks')
,NULL -- NULL to view all tables
,NULL -- NULL to view all indexes; otherwise, input index number
,NULL -- NULL to view all partitions of an index
,'DETAILED') --We want all information
WHERE ((avg_fragmentation_in_percent > 15) -- Logical fragmentation
OR (avg_page_space_used_in_percent < 60)) --Page density
AND page_count > 8 -- We do not want indexes less than 1 extent in size
AND index_id NOT IN (0) --Only clustered and nonclustered indexes
Debería resultar fácil almacenar los resultados de las consultas en una variable de tabla y, a continuación, recorrer la variable de tabla con el fin de generar una cadena dinámica para la instrucción ALTER INDEX correcta (consulte la figura 2).
Figure 2 Generación de una cadena ALTER INDEX dinámica (Close Figure 2)
--Rebuild the following indexes in the AdventureWorks database
USE AdventureWorks
GO

--Table to hold results
DECLARE @tablevar TABLE(lngid INT IDENTITY(1,1), objectid INT,
index_id INT)

INSERT INTO @tablevar (objectid, index_id)
SELECT [object_id],index_id
FROM sys.dm_db_index_physical_stats (DB_ID('AdventureWorks')
,NULL -- NULL to view all tables
,NULL -- NULL to view all indexes; otherwise, input index number
,NULL -- NULL to view all partitions of an index
,'DETAILED') --We want all information
WHERE ((avg_fragmentation_in_percent > 15) -- Logical fragmentation
OR (avg_page_space_used_in_percent < 60)) --Page density
AND page_count > 8 -- We do not want indexes less than 1 extent in size
AND index_id NOT IN (0) --Only clustered and nonclustered indexes

SELECT 'ALTER INDEX ' + ind.[name] + ' ON ' + sc.[name] + '.'
+ OBJECT_NAME(objectid) + ' REBUILD'
FROM @tablevar tv
INNER JOIN sys.indexes ind
ON tv.objectid = ind.[object_id]
AND tv.index_id = ind.index_id
INNER JOIN sys.objects ob
ON tv.objectid = ob.[object_id]
INNER JOIN sys.schemas sc
ON sc.schema_id = ob.schema_id

Uso de los índices
Aunque sys.dm_db_index_physical_stats es un sustituto eficaz de DBCC SHOWCONTIG y puede ayudar a averiguar el estado de un índice, a menudo afrontará el problema más complejo de determinar qué índices son útiles para las consultas ejecutadas en una tabla. A menudo los desarrolladores o los administradores de bases de datos generan índices en una tabla que creen que el optimizador utilizará durante la ejecución de una consulta. En versiones anteriores de SQL Server, averiguar si estos índices se usaban realmente era mucho más difícil. Había que eliminar el índice y comprobar si el rendimiento de las consultas resultaba afectado, o capturar los planes de ejecución de las consultas y observar el uso del índice.
Hay una nueva vista de administración dinámica, sys.dm_db_index_usage_stats, que facilita la comprensión de cómo utiliza los índices el optimizador de consultas y de las consultas ejecutadas en una tabla. Esta vista puede examinarse para determinar la utilidad de un índice, lo que permite eliminar cualquier índice que el optimizador de consultas no use. Ya no es necesario preocuparse de si un índice desperdicia espacio de almacenamiento o de si el mantenimiento de los índices no usados reduce el rendimiento de la base de datos.
Mediante el examen de los resultados de esta DMV para los índices con búsquedas y exploraciones de cero, puede determinar si un índice se ha utilizado desde la última vez que se inició SQL Server. No obstante, recuerde que hay numerosas DMV y DMF que no se guardan y que se restablecerán solas a cero cuando se reinicie SQL Server. Tenga esto en cuenta cuando utilice una DMV o DMF para determinar el uso de un índice. El índice puede sencillamente no haber sido necesario desde la última vez que se reinició el servicio, pero quizás lo necesiten las consultas de informes de final de semana, final de mes y trimestrales.
Para ver todos los índices de una instancia que no se han utilizado desde la última vez que se reinició el servicio de SQL Server, puede utilizar la instrucción siguiente:
SELECT DB_NAME(database_id),OBJECT_NAME([object_id])
FROM sys.dm_db_index_usage_stats
WHERE user_seeks = 0
AND user_scans = 0
AND user_lookups = 0
AND system_seeks = 0
AND system_scans = 0
AND system_lookups = 0

Actividad funcional de los índices
Si quiere comprender la actividad funcional de sus índices, encontrará muy útil la DMF sys.dm_db_index_operational_stats. Puede utilizarla para ver la E/S, el bloqueo, el cierre y la actividad del método de acceso de cada índice de una base de datos, lo cual puede ayudarle a comprender cómo se utilizan los índices y a diagnosticar los problemas de bloqueo de índices debidos a una actividad exhaustiva de E/S o a la existencia de alguna "zona activa" en el índice.
Utilice las columnas de espera de cierre de esta DMF para establecer con mayor facilidad la cantidad de tiempo que tardan las operaciones de lectura y escritura en obtener acceso a los recursos de un índice. De esta forma, podrá determinar si el subsistema de disco utilizado para almacenar el índice es el adecuado para la actividad de E/S del índice. También puede indicar si el diseño y el uso del índice han introducido una zona activa en la que la actividad exhaustiva en una o más páginas de un índice resulta problemática para los datos contenidos en estas páginas. Esta contención conduce a menudo al bloqueo excesivo de las operaciones que intentan leer o escribir en esta área.
En la figura 3 se muestra cómo determinar los patrones de bloqueo y de E/S de todos los índices de la tabla AdventureWorks.HumanResources.Employee.
Figure 3 Determinación de los patrones de bloqueo y de E/S (Close Figure 3)
SELECT page_latch_wait_count --page latch counts
,page_latch_wait_in_ms --page latch wait times
,row_lock_wait_in_ms --row lock wait times
,page_lock_wait_in_ms --page lock wait times
,row_lock_count --row lock counts
,page_lock_count --page lock counts
,page_io_latch_wait_count --I/O wait counts
,page_io_latch_wait_in_ms --I/O wait times
FROM sys.dm_db_index_operational_stats (DB_ID('AdventureWorks')
,OBJECT_ID('HumanResources.Employee')
,NULL -- NULL to view all indexes; otherwise, input index number
,NULL -- NULL to view all partitions of an index
)

Más información
Las DMV y DMF presentadas en este artículo tienen diversos usos además de los aquí descritos. Emplee el tiempo necesario en revisar los artículos de los libros en línea de SQL Server, en los que se describen estas funciones y vistas, que se indican en la barra lateral "Recursos adicionales", para entender la gran variedad de información que se puede devolver y examinar mediante su uso.
Para obtener más información sobre alguna DMF y DMV adicional de índice que no se haya descrito en este artículo, consulte el blog que publica el equipo de optimización de consultas de SQL Server en blogs.msdn.com/queryoptteam/570176.aspx (en inglés).
Recursos adicionales
  • sys.dm_db_index_physical_stats
  • sys.dm_db_index_usage_stats
  • sys.dm_db_index_operational_stats

Randy Dyess es mentor de Solid Quality Learning, donde está especializado en sistemas de SQL Server OLTP. Randy es autor de numerosos libros y artículos acerca de SQL Server. Es fundador y autor principal de www.TransactSQL.Com y www.Database-Security.Info.
© 2007 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.


 SQL Server: Obtenci&#243;n de alta disponibilidad para SQL Server
SQL Server Zach Nichter

Obtención de alta disponibilidad para SQL Server
Resumen:
  • Creación de reflejos
  • Instantáneas de base de datos
  • Trasvase de registros
  • Clústeres
  • Réplica
Descargar el código de este artículo: NichterHA2007_03.exe (151KB)

La alta disponibilidad es un concepto que todos los administradores de bases de datos deben entender. Se refiere a la capacidad de respuesta y la accesibilidad de un sistema. A veces, tener una alta disponibilidad significa un tiempo de respuesta en segundos, mientras que otras situaciones requieren tiempos de respuesta en

fracciones de segundo. En una ocasión asesoré a una compañía donde los servidores web requerían consultas SQL para tener tiempos de respuesta de retorno en milisegundos; si la respuesta excedía este límite, el sistema de base de datos se consideraba inactivo y el servidor web debía volver a conectarse al siguiente servidor de base de datos disponible.
Con usuarios que demandan aplicaciones cada vez más rápidas, saber cómo lograr una alta disponibilidad y obtener tiempos de respuesta rápidos le ayudarán a planear las aplicaciones que dependen de datos con buen juicio.
Afortunadamente, SQL Server™ 2005 incluye varias opciones para mejorar la disponibilidad, incluidas la réplica, los clústeres, la creación de reflejos de la base de datos, las instantáneas de base de datos y el trasvase de registros de base de datos. Examinaré estas características y le ayudaré a decidir lo que es apropiado para su entorno. Comencemos con la figura 1, que describe las opciones de disponibilidad en SQL Server 2005.
Figure 1 Opciones de alta disponibilidad (Close Figure 1)

Atributos tecnológicos | Réplica | Creación de reflejos de bases de datos | Clústeres | Instantáneas de base de datos | Trasvase de registros
Opción de alta disponibilidad |  |  |  |  |
Tolerancia de requisitos de alta transacción |  |  |  |  |
Disponibilidad de datos en tiempo real |  |  |  |  |
La imagen de los datos es de sólo lectura |  |  |  |  |
Configuración única de hardware |  |  |  |  |
Bajo costo |  |  |  |  |
Ofrece recuperación de datos |  |  |  |  |
Conmutación por error automatizada |  |  |  |  |
Implementación/administración posiblemente compleja |  |  |  |  |
Posibles consideraciones de rendimiento |  |  |  |  |

Definición de alta disponibilidad
Uno de los primeros objetivos al planear una aplicación de alta-disponibilidad consiste en definir lo que significa en su entorno específico. Para algunas organizaciones, una alta disponibilidad significa que debe haber hardware redundante igual al hardware de producción, de forma que los datos y el hardware deben tener un tiempo productivo y una disponibilidad del 99,995 por ciento o superior. Es posible que otras organizaciones requieran que sólo los datos tengan una alta disponibilidad y que les preocupe menos el rendimiento a nivel de producción en caso de que se necesite una conmutación por error. Es muy importante definir en qué consiste la alta disponibilidad para determinar la solución más correcta para su situación.
También es necesario identificar los tipos de interrupción que puede experimentar e indicar cómo estos afectan a los contratos de nivel de servicio. Las interrupciones que pueden afectar a su disponibilidad incluyen un rendimiento planeado, imprevisto y reducido.
Una interrupción planeada suele ser un período de mantenimiento programado sobre el que se notifica a los usuarios de los sistemas con antelación. Una interrupción imprevista suele ser el resultado de un error de hardware o software que impide el acceso a los datos. La reducción del rendimiento también puede causar interrupciones y, por lo general, se mide en el tiempo de respuesta del usuario final que la empresa y la organización de TI suelen acordar de antemano en algún contrato de nivel de servicio.
Además de identificar los posibles orígenes de las interrupciones, también debe determinar el nivel de actividad de los datos y si siempre debe establecerse una conexión en línea o si en ocasiones puede ser cerca de línea o fuera de línea. Asimismo, debe decidir también si la opción de disponibilidad va a estar en la misma ubicación geográfica o en una ubicación remota. Las limitaciones de presupuesto probablemente también desempeñarán un papel decisivo en la decisión que tome. Analicemos ahora cada una de las opciones de disponibilidad.

Creación de reflejos de bases de datos
Antes de examinar la creación de reflejos de base de datos, debería definirse la terminología.
La entidad principal es el servidor de producción principal que aloja la base de datos que envía sus registros de transacción continuamente al servidor reflejado y la base de datos.
La entidad reflejada es el servidor secundario que aloja la copia de seguridad de la base de datos. La copia reflejada se sincroniza de forma coherente con la base de datos principal.
La función indica el propósito de un determinado servidor, tanto si funciona como la entidad principal o la reflejada.
El testigo es la instancia que supervisa los servidores principal y reflejado cuando estos realizan sus tareas y puede iniciar una conmutación por error automática.
Un asociado puede ser el servidor principal o el servidor reflejado.
En un entorno típico, se realizará una copia de seguridad de la base de datos principal en la instancia principal, y dicha copia de seguridad se restaurará en la instancia reflejada (consulte la figura 2). Una vez que se restaure la base de datos, se debe configurar la creación de reflejos en el servidor principal a través de la ventana de propiedades de la base de datos principal en SQL Server Management Studio (SMSS) o mediante secuencias de comandos T-SQL.
Figura 2 Arquitectura de la creación de reflejos de base de datos
Figura 2 Arquitectura de la creación de reflejos de base de datos (Hacer clic en la imagen para reducirla)
Figura 2 Arquitectura de la creación de reflejos de base de datos
Figura 2 Arquitectura de la creación de reflejos de base de datos (Hacer clic en la imagen para ampliarla)
Una vez que se ha configurado la creación de reflejos y se ha establecido la sesión de la creación de reflejos, se sincronizarán las bases de datos principal y reflejada. La base de datos principal enviará su registro de transacciones correspondiente a los eventos producidos desde el momento en que se aplicó la última copia de seguridad en el reflejo. La base de datos reflejada recibirá el registro e intentará aplicarlo del modo más rápido posible. Si utiliza SQL Server 2005 Enterprise Edition, este proceso incluye varios subprocesos; de lo contrario, se trata de una operación de un solo subproceso. En cuanto se aplican estos registros a la entidad reflejada, las bases de datos se consideran sincronizadas y permanecerán sincronizadas hasta que se interrumpa la sesión reflejada.
Cuando los clientes ejecutan nuevas transacciones, el servidor principal ejecuta las transacciones con respecto a la base de datos principal y, mientras realiza esta operación, envía los registros de transacciones de la base de datos principal al registro de rehacer (o a las colas de registro) de la base de datos reflejada, desde donde se selecciona y se aplica a la base de datos reflejada. Una vez que se aplica la transacción y queda confirmada en la base de datos reflejada, se envía una respuesta a la entidad principal para notificar que la transacción se ha confirmado en la entidad reflejada. La entidad principal no confirmará ninguna transacción nueva que pueda entrar en el sistema hasta recibir una confirmación de la entidad reflejada.
En caso de error, la entidad reflejada puede iniciar un error automático y el testigo admite el proceso determinando si la base de datos principal está disponible. Cuando se produce un error, se debe resolver la cuestión de lo que es ahora el asociado reflejado antes de convertirse de nuevo en el asociado principal. Después de resolver los problemas relativos al asociado reflejado, se inicia la vuelta al servidor del asociado reflejado y las bases de datos se sincronizan de nuevo. Una vez que estén sincronizadas, la sesión de la creación de reflejos puede empezar otra vez.
Este modo específico de la creación de reflejos es un modo de alta seguridad que ofrece operaciones de transacción sincrónicas al activar la seguridad de transacción, pero no requiere un testigo porque no saca provecho de la conmutación por error automatizada; todas las conmutaciones por error se inician manualmente. Hay otro tipo de modo de creación de reflejos que ofrece operaciones de transacción sincrónicas: el modo de alta disponibilidad. No sólo requiere la activación de la seguridad de transacción, sino también que se utilice un testigo para la conmutación por error automatizada en caso de que se produzca error.
El tercer y último modo disponible para la creación de reflejos es el de alto rendimiento. Requiere la desactivación de la seguridad de transacción para permitir la compatibilidad con el funcionamiento asincrónico que, a su vez, permite que las transacciones del asociado principal se confirmen sin tener que esperar que el registro de transacciones se escriba en la entidad reflejada. El modo de alto rendimiento no requiere un testigo para la configuración.
Tenga en cuenta que la creación de reflejos requiere la misma edición de SQL Server en la entidad de seguridad y en la reflejada, pero no en el testigo, que puede ser SQL Server Express Edition. Además, es importante que la base de datos principal se encuentre en modo de recuperación completa.
ADO.NET 2.0 está integrado con SQL Server 2005 e incluye compatibilidad con la creación de reflejos de la base de datos, además de ofrecer una conmutación por error transparente para realizar la aplicación en el entorno reflejado. De este modo se da a la aplicación ADO.NET una manera de realizar automáticamente la conmutación por error sin codificación ni configuración adicionales, en el caso de que no se pueda realizar una conexión a la base de datos principal. La configuración es tan fácil como especificar un usuario común entre los dos entornos y el asociado de la conmutación por error en la cadena de conexión. A continuación se ofrece un ejemplo de una cadena de conexión de ADO.NET que identifica al asociado de la conmutación por error del entorno de la base de datos reflejada:
"Provider=SQLNCLI.1;Data Source=MirrorDB;Failover Partner=SQL03;
 Initial Catalog=AdventureWorks;
Persist Security Info=True;User ID=TestUser; Password=TestPswd; Pooling=True;
Connect Timeout=5;Application Name=ADOMirrorTest"
La creación de reflejos de la base de datos quizás sea una opción buena para su empresa en función de los requisitos de datos y aplicaciones, pero hay una serie de cuestiones que debe considerar a fin de obtener un rendimiento óptimo. Por ejemplo, ¿cuál es el nivel de la tasa de transacciones del sistema o el volumen de cambio de datos? Al tener en consideración la creación de reflejos de la base de datos, es fundamental determinar si la velocidad de la red y el ancho de banda son suficientes para soportar el volumen de datos y la tasa de procesamiento de transacciones. Asimismo, debe considerarse la saturación del vínculo. Esta cuestión es especialmente importante si la entidad reflejada se encuentra en otra ubicación geográfica. La supervisión del sistema de antemano es esencial para determinar si hay limitaciones en el entorno que impedirían el funcionamiento eficaz de la creación de reflejos.
La creación de reflejos de base de datos puede ser una opción especialmente buena si se intenta mantener un nivel bajo de costos. De hecho, la arquitectura de la creación de reflejos de la base de datos no requiere discos compartidos ni ninguna habilidad avanzada o especializada para ejecutar el entorno. Y, a diferencia de los clústeres, la creación de reflejos de la base de datos no necesita que ambos asociados tengan el mismo hardware. Además, la creación de reflejos es sencilla de implementar mediante el asistente de instalación que se encuentra en la ficha de creación de reflejos de la ventana de propiedades de base de datos (consulte la figura 3). También se recomienda leer el artículo técnico "Database Mirroring Best Practices and Performance Considerations" (en inglés) en go.microsoft.com/fwlink/?LinkId=80897 para obtener más información útil.
Figura 3 Asistente de instalación para la creación de reflejos
Figura 3 Asistente de instalación para la creación de reflejos (Hacer clic en la imagen para reducirla)
Figura 3 Asistente de instalación para la creación de reflejos
Figura 3 Asistente de instalación para la creación de reflejos (Hacer clic en la imagen para ampliarla)

Instantáneas de base de datos
Las instantáneas de la base de datos constituyen una nueva tecnología que se ofrece en SQL Server 2005 Enterprise Edition, pero no se consideran una opción de alta disponibilidad. Las instantáneas de la base de datos se deben utilizar como una opción de recuperación o de generación de informes viable cuando se usa con otras tecnologías. Una instantánea es una vista de sólo lectura de una base de datos en un determinado punto en el tiempo.
Se crea una instantánea con el comando CREATE DATABASE del siguiente modo:
CREATE DATABASE SnapDB_20061028_2030 ON
(NAME = SnapDB_Data, FILENAME =
    'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\SnapDB_20061028_2030.snp')
AS SNAPSHOT OF SnapDB;
GO
Cuando se crea la instantánea de la base de datos, utiliza uno o varios archivos (archivos dispersos), en lugar de archivos de datos, como haría una base de datos típica. Estos archivos dispersos esencialmente son ubicaciones de almacenamiento virtual que inicialmente no consumen datos. Se utilizan para almacenar datos, sólo si dichos datos se cambian o eliminan en la base de datos de origen. Los datos se escriben en los archivos dispersos en una página de datos cada vez, y la instantánea de la base de datos sólo muestra datos que han cambiado desde que se tomó la instantánea. El resto de los datos proceden de las páginas de datos de la base de datos de origen.
Los archivos de instantánea de base de datos se asignan al tamaño de la base de datos al tomar la instantánea. El tamaño asignado no indica la cantidad de datos que realmente almacenan. Para obtener esta información, ejecute una instrucción de T-SQL como la siguiente:
SELECT *
FROM fn_virtualfilestats(DB_ID(N'SnapDB_20061028_
    2030'), 1);
GO

Gracias al modo en que se almacenan los datos en los archivos dispersos y la base de datos de origen, cuando se tiene acceso a una instantánea de la base de datos, se recuperan las páginas de datos de los archivos de datos de la base de datos de origen y las páginas de datos de los archivos dispersos de la instantánea. Las instantáneas sólo pueden convivir en el servidor con la base de datos de origen de la que se tomó la instantánea debido a la necesidad de compartir páginas de datos. Como esta arquitectura no mejora la E/S de la base de datos de origen, las instantáneas no son una opción de informe válida, ya que no representarán el verdadero estado de la base de datos.
Analicemos una situación en la que la creación de reflejos de base de datos se utiliza junto con las instantáneas. De este modo es posible separar físicamente los datos del informe, la entidad reflejada y las bases de datos de instantáneas de la base de datos principal. La instantánea de la base de datos se programa mediante el agente de SQL Server y una secuencia de comandos personalizada para ofrecer instantáneas actualizadas en intervalos regulares. La secuencia de comandos de ejemplo de la figura 4 muestra el procedimiento almacenado empleado para alcanzar este objetivo. Se ha diseñado para utilizarlo en un trabajo con el objetivo de administrar la creación y la eliminación de instantáneas para una determinada base de datos del entorno. Esto permitiría una solución de creación de informes aceptable, porque los datos de informe estarían aislados de los datos de producción.
Figure 4 Procedimiento almacenado para programar instantáneas (Close Figure 4)
use msdb;
GO
set nocount on
GO

CREATE PROCEDURE usp_snaprefresh
     @database    sysname = NULL    --name of the database to snapshot
    ,@keepsnap    int        = 24   --# of hours to keep a snapshot
                                    --after it was created
                                    --use a value of '0' to keep all
                                    --existing snapshots
    ,@fileloc    sysname            --location for snapshot
        = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\'
AS

DECLARE
     @dt            datetime        ,@cnt          int
    ,@databaseid    int             ,@snap         sysname
    ,@sql           nvarchar(1000)  ,@yy           varchar(4)
    ,@mm            varchar(2)      ,@dd           varchar(2)
    ,@h             varchar(2)      ,@m            varchar(2)
    ,@lname         sysname         ,@pname        sysname
    ,@file          sysname         ,@pos1         int
    ,@pos2          int

-- initialize variables
SELECT
     @dt = getdate()
    ,@cnt = 0, @pos1 = 0, @pos2 = 0
    ,@databaseid = db_id(@database)

-- check if valid database was provided
IF @databaseid IS NULL
BEGIN
    RAISERROR ('Missing database name. Rerun the procedure specifying a
       valid database name.',16,1)
    RETURN (0)
END

--determine if snapshots should be kept
IF @keepsnap <> 0
BEGIN
    -- determine if other snapshots exist for this server older than @
    -- keepsnap value hrs
    SELECT ROW_NUMBER() OVER(ORDER BY name DESC) AS [RowNum],
        name INTO #t1
    FROM master.sys.databases
    WHERE source_database_id = @databaseid
        AND create_date < dateadd(hh,-(@keepsnap),getdate())

    IF (SELECT max(RowNum) FROM #t1 where name is not null) > 0
    BEGIN
        WHILE @cnt <= (SELECT max(RowNum) FROM #t1)
        BEGIN
            SELECT @snap = name FROM #t1 WHERE RowNum = @cnt

            PRINT 'Dropping snapshot ''' + @snap + ''''

            SET @sql = 'DROP DATABASE ' + @snap

            EXEC(@sql)
            SELECT @cnt = @cnt + 1
        END
    END
END

-- break apart point in time date time information for file name
SELECT @yy = convert(varchar(4),year(@dt)),@mm = convert(varchar(2),
   month(@dt))
    ,@dd = convert(varchar(2), day(@dt)),@h = convert(varchar(2),
         datepart(hh,@dt))
    ,@m = convert(varchar(2), datepart(mi,@dt))

-- piece together the database snapshot name and the file name
SELECT @file = @database + '_' + @yy + @mm + @dd + '_' + @h + @m

-- identify logical file name of primary data file
SET @sql = 'SELECT name INTO tempdb..t1
FROM ' + @database + '.sys.database_files
WHERE file_id = 1'

EXEC(@sql)

--setting logical filename for the snap
SELECT @lname = name FROM tempdb..t1

-- making sure the file location ends with '\'
IF substring(@fileloc, len(@fileloc), 1) <> '\'
BEGIN
    SET @fileloc = @fileloc + '\'
END

-- build sql statement to be run
SET @sql = N'CREATE DATABASE ' + @file + ' ON
(NAME = ' + @lname + ', FILENAME = ''' + @fileloc + @file + '.snp'')
AS SNAPSHOT OF ' + @database

EXEC(@sql)

-- cleanup
DROP TABLE tempdb..t1;
GO
Sin embargo, tenga presente que las instantáneas de base de datos se consideran temporales, porque no es posible realizar copias de seguridad de las instantáneas y no pueden existir sin su base de datos de origen. Si un archivo disperso se queda sin espacio, la instantánea se considerará dañada y deberá eliminarse.
Además, con las instantáneas de base de datos, el rendimiento del sistema puede disminuir durante las operaciones de modificación de datos en la base de datos de origen, porque las páginas de datos se escriben en el archivo disperso para cada instantánea de los archivos de datos de la base de datos de origen. A su vez, esto multiplica el número de escrituras por el número de instantáneas que tenga una base de datos.
Los permisos de lectura vienen definidos por la base de datos de origen en el punto de la instantánea y no se pueden cambiar. La instantánea debe residir en la misma instancia que la base de datos de origen porque comparten páginas de datos, así como la misma caché de búfer.
Sólo debe considerar el uso de instantáneas como una solución de generación de informes si también utiliza la creación de reflejos; de lo contrario, no se produce ningún aumento del rendimiento en su entorno. Las instantáneas de la base de datos posiblemente son la manera más rápida de conservar los datos antes de ejecutar una operación dudosa en un sistema. Una base de datos puede volver al estado de la instantánea o se pueden extraer los datos de la instantánea para reemplazar los datos de la base de datos de origen.
Será necesario determinar un estándar de nomenclatura para las bases de datos de instantáneas. El estándar que utilizo es originaldatabasename_date_time.snp. Especifica primero la base de datos de origen, a continuación el día y la hora (en el formato de 24 horas) en que se tomó la instantánea.

Trasvase de registros
El trasvase de registros es una opción limitada de alta disponibilidad que utiliza la copia de seguridad y la recuperación para establecer una solución muy económica. El trasvase de registros saca provecho de las copias de seguridad de los registros de transacciones en un intervalo programado para actualizar una base de datos secundaria.
El trasvase de registros en SQL Server 2005 utiliza los asistentes para realizar el proceso de instalación, programación, inicialización y supervisión (consulte la figura 5). El proceso es sencillo y puede finalizar en pocos minutos.
Figura 5 Asistente de instalación para el trasvase de registros
Figura 5 Asistente de instalación para el trasvase de registros (Hacer clic en la imagen para reducirla)
Figura 5 Asistente de instalación para el trasvase de registros
Figura 5 Asistente de instalación para el trasvase de registros (Hacer clic en la imagen para ampliarla)

Después de identificar la base de datos principal, se crea una programación y se determina la antigüedad del archivo para los archivos de copia de seguridad. A continuación, se deben establecer los archivos de uso compartido para los archivos de copia de seguridad. Una vez que se han establecido los archivos de uso compartido, es necesario definir la ubicación del archivo de la base de datos secundaria y la base de datos se debe inicializar realizando una restauración de la base de datos principal. Por último, se deben establecer las programaciones para las copias de los archivos de copia de seguridad y las restauraciones de las copias de seguridad del registro de transacciones, junto con las alertas o los retrasos necesarios para cada paso.
Una vez que ha finalizado la instalación, el trasvase de registros realiza la copia de seguridad del registro de transacciones de una base de datos según una programación en una ubicación de red compartida. Después de enviar los archivos al recurso compartido, la copia de seguridad se aplica a la base de datos secundaria según una programación establecida.
El trasvase de registros funciona muy bien en diversas situaciones debido a su sencillez. Es una buena opción para alta disponibilidad que es económica y puede soportar un sistema de alta transacción. La base de datos secundaria que se emplea en el trasvase de registros se puede utilizar en modo de sólo lectura, algo muy útil en una base de datos de generación de informes. El trasvase de registros requiere una sobrecarga mínima pero necesita una directiva de alertas en caso de encargarse de errores.
Dos cosas que se deben tener en cuenta si tiene pensado utilizar el trasvase de registros en su entorno: su instalación y administración sencillas, y el hecho de que no requiere habilidades especiales. El trasvase de registros no es una solución de alta disponibilidad en tiempo real, sin embargo, puede combinarse con la creación de reflejos de base de datos con este fin. Está limitado por las programaciones, así como por operaciones tales como copias de seguridad, copias de archivo y restauraciones. También requiere una conmutación por error manual. Por estas razones, el trasvase de registros ofrece una solución sencilla para el entorno que no se centra especialmente en los requisitos de tiempo.

Clústeres de SQL Server
Los clústeres del servidor funcionan en el nivel del sistema operativo e implican la réplica del hardware, así como de recursos de disco compartido para que el clúster pueda obtener acceso a ellos. Los clústeres constituyen el método menos intrusivo para los usuarios finales, pero también es probable que sea el más costoso. Requiere por lo menos el doble de cantidad de hardware necesario para ejecutar una instancia sin agrupar.
El tema de los clústeres es bastante complicado, por lo que antes de analizar todos los detalles aquí, ofreceré una introducción general. Los clústeres requieren dos o varios servidores, que deben instalarse con la misma versión de Windows ® 2000 Advanced o Datacenter Edition, o Windows Server ® 2003 Enterprise o Datacenter Edition. También requiere la instalación de los Servicios de Cluster Server de Microsoft® (MSCS), que trata la propiedad de los recursos compartidos entre los servidores y administra las direcciones IP, los discos compartidos y los nombres de red. Los clústeres también requieren un recurso de disco compartido, generalmente en forma de una red de área de almacenamiento (SAN) o el almacenamiento conectado a una SCSI.
Una instancia de SQL Server también se considera un recurso, y las ediciones Standard y Enterprise de SQL Server 2005 se pueden instalar en configuración de clúster. Consulte "Feature Comparison Chart for SQL Server 2005" (en inglés) en microsoft.com/sql/prodinfo/features/compare-features.mspx para obtener una lista de las características compatibles con ambas ediciones de SQL Server 2005.
Una vez que se han establecido los recursos en el clúster, el nodo secundario del clúster mantiene una comunicación regular con el nodo principal del clúster a través de un latido establecido en una red privada entre los dos nodos del clúster. El latido es un punto de control del intervalo que se toma para determinar si se ha producido un error en el nodo principal.
En caso de que se produzca un error en el nodo principal, los recursos se mueven al nodo secundario al tiempo que se mantiene el estado del servidor lógico de forma local. De este modo, los clientes pueden continuar funcionando con sólo una pausa en la interacción. El proceso entero de conmutación por error puede tardar entre 5 segundos (o menos) y 30 segundos (o más en algunas ocasiones), en función del hardware, el software y los componentes de red implicados en el clúster.
Los clústeres pueden ser una tecnología costosa y compleja que requiere habilidades especializadas para resolver los errores del sistema; sin embargo, ofrece la conmutación por error más fluida para los usuarios finales que tengan cualquiera de las opciones automatizadas de conmutación por error. Todas las aplicaciones son diferentes y algunas de ellas pueden ser incompatibles o no admitir clústeres, lo que, en el peor de los casos, requiere que la aplicación se vuelva a conectar.

Réplica
La réplica de SQL Server 2005 también se puede utilizar en arquitecturas de alta disponibilidad. Ofrece cuatro tipos de réplica: de instantáneas, de transacciones, de punto a punto y de mezcla. El tipo punto a punto tan sólo es una forma de réplica de transacciones, por lo que no lo analizaremos aquí.
Con la réplica, obtiene la posibilidad de tener un sitio y una base de datos secundarios para una alta disponibilidad, tan funcional como la base de datos principal. Esto se puede alcanzar mediante la réplica de mezcla, que toma las transacciones de las bases de datos principal y secundaria y combina los cambios entre sí. Como puede imaginar, con esta configuración se necesita un procedimiento de resolución de conflictos.
La réplica de transacciones es similar en el diseño lógico a la creación de reflejos de base de datos. Las transacciones que se aplican a la base de datos principal se envían a la base de datos secundaria para garantizar que el entorno permanece coherente. Una vez que llegan las transacciones, se aplican a la base de datos secundaria, la cual espera a que se aplique la siguiente transacción en el sistema.
La réplica de instantáneas es muy parecida al trasvase de registros en que se ejecutan en intervalos programados y actualizan la base de datos secundaria con cambios masivos, en lugar de aplicar cada transacción a ambos sistemas cuando se confirman. Ambas tecnologías se utilizan aproximadamente de la misma manera.
La réplica requiere conocimientos especializados, una cuestión importante para los entornos que no disponen de un administrador de bases de datos dedicado. La réplica puede ser un tanto complicada en lo que respecta a la solución de problemas, y requiere un diseño más complejo si se va a utilizar como una opción de alta disponibilidad.
La réplica puede cumplir adecuadamente los requisitos de una solución de alta disponibilidad. Esta tecnología hace lo que las funciones de la creación de reflejos de base de datos pueden hacer en el nivel de registros con la réplica de transacciones, pero sin la opción de una conmutación por error automatizada. Con los recursos suficientes y un poco de creatividad, puede crear una solución de conmutación por error automatizada.
A diferencia de la creación de reflejos de base de datos, las bases de datos de origen y destino son completamente accesibles para las aplicaciones cliente. La réplica ofrece la misma funcionalidad que el trasvase de registros con el uso de la réplica de instantáneas.
Sin embargo, debe tener en cuenta que la tecnología de réplica está completamente comprobada y bien documentada. El uso de la réplica para una solución de alta disponibilidad tiene algunos inconvenientes y el rendimiento puede ser un problema, pero sólo tanto como pueda serlo la creación de reflejos de base de datos. Cualquier solución de alta disponibilidad que diseñe mediante la réplica probablemente tenga una arquitectura más complicada de administrar; no más avanzada necesariamente, pero sin duda más compleja. Asimismo, uno de los mayores obstáculos que hay que tener en cuenta es que si la estructura de tablas de base de datos cambia o, si desea agregar una tabla para la réplica, deberá interrumpir el proceso y volver a definir la publicación a fin de que los cambios se incluyan en las dos bases de datos.

En resumen
Ahora ya sabe por qué la creación de una solución de alta disponibilidad para su entorno requiere un toque de creatividad. Todas las tecnologías de alta disponibilidad de SQL Server 2005 tienen sus ventajas y sus inconvenientes, y cada una de ellas tiende a situaciones diferentes.
El trasvase de registros, la réplica de instantáneas e incluso la creación de reflejos de base de datos en modo de alto rendimiento son métodos adecuados cuando se separa geográficamente una base de datos web principal de los entornos de base de datos secundaria (especialmente si no requieren que los datos secundarios estén disponibles en tiempo real).
Por otro lado, si la base de datos secundaria requiere datos en tiempo real, la réplica de transacciones o la creación de reflejos de base de datos puede llevar la carga si las tasas de transacción en el servidor principal son bajas y el vínculo entre los dos sitios del entorno es rápido y no está saturado.
También debe tomar en consideración el nivel de comodidad que tiene con estas tecnologías. Si ya tiene experiencia con algunas de estas tecnologías, no tendrá problemas. Si no cuenta con un administrador de bases de datos dedicado, intente evitar las tecnologías más complejas, como la réplica donde hay muchos elementos en movimiento, ya que la solución de problemas puede ser una tarea compleja. Considere contratar a un consultor experimentado de SQL Server para que le ayude con el diseño, la implementación y un posible entrenamiento del personal a fin de administrar una nueva alta disponibilidad apropiada para su entorno.
Si en su organización la alta disponibilidad sólo requiere que los datos están disponibles un alto porcentaje de tiempo y el tiempo de inactividad de los datos se considera una cuestión grave, es posible que, en su caso, los clústeres sean la mejor opción.
La cuestión es que SQL Server 2005 ofrece una serie de nuevas opciones para implementar la alta disponibilidad que están hechas a medida para ajustarse a los distintos tipos de entorno. Posiblemente, una sola opción de disponibilidad satisfaga sus necesidades o puede optar por sacar provecho de una combinación de tecnologías pero, como ya sabe ahora, tiene a su disposición una amplia variedad de opciones.

Zach Nichter es un profesional de SQL Server con más de 10 años de experiencia. Ha desempeñado una serie de funciones de soporte técnico de SQL Server, entre las que se incluyen administrador de bases de datos, responsable de equipo, director y consultor. Actualmente, Zach trabaja para Levi Strauss &Co. como arquitecto de administración de bases de datos, y se centra en la supervisión, la arquitectura y el rendimiento de SQL Server, entre otras iniciativas


 SQL Server: Simplificaci&#243;n del mantenimiento de bases de datos con particiones de tablas
SQL Server Noah Gomez

Simplificación del mantenimiento de bases de datos con particiones de tablas
Resumen:
  • Creación de tablas con particiones
  • Adición y combinación de particiones
  • Creación y administración de índices con particiones
Descargar el código de este artículo: GomezPartitioning2007_03.exe (156KB)

En el pasado, los administradores de bases de datos que administraban tablas con millones de filas de datos se veían obligados a crear varias tablas. Una vez que se creaban particiones de estas tablas, el administrador tenía que volverlas
a unir durante la ejecución de un gran número de consultas. La unión de particiones implicaba la creación de una vista con particiones o un procedimiento almacenado de contenedor que averiguara dónde se encontraban los datos y que ejecutara otro procedimiento almacenado con el fin de buscar sólo en las particiones necesarias para devolver el conjunto de datos.
Aunque estos métodos funcionaban, implicaban mucho trabajo. La administración de varias tablas y sus índices, así como los métodos utilizados para unirlas de nuevo a menudo daban como resultado problemas de administración y mantenimiento. Además, la creación de varias tablas para dividir los datos implicaba cierto grado de inflexibilidad, ya que los procedimientos almacenados, los trabajos de mantenimiento, los trabajos de Servicios de transformación de datos (DTS), el código de aplicación y otros procesos tenían que entender la naturaleza de la partición. Así, para que se pudieran agregar o eliminar estas semi-particiones sin modificar el código, estos elementos se creaban normalmente de una forma no dinámica y, como resultado, no eran eficaces.
Las ediciones Enterprise y Developer de SQL Server™ 2005 permiten dividir grandes cantidades de datos contenidos en una única tabla en varias particiones más pequeñas que se pueden administrar y mantener de forma más eficaz. La capacidad para crear segmentos de datos a los que se tiene acceso mediante un único punto de entrada reduce en gran medida los problemas de administración que surgen con el método antiguo. El uso de un único punto de entrada (el nombre de tabla o de índice) oculta los múltiples segmentos de datos del código de aplicación y permite al administrador o al desarrollador cambiar las particiones según sea necesario, sin tener que ajustar el código base.
En resumen, puede crear varias particiones, mover esas particiones, eliminar particiones antiguas e incluso cambiar el modo en que se crean las particiones de los datos sin tener nunca que ajustar el código de su aplicación. Su código de aplicación sencillamente sigue llamando al mismo nombre de tabla base o índice. Mientras tanto, puede reducir la cantidad de datos que contienen los índices individuales, al reducir a su vez los tiempos de mantenimiento de esos índices, y puede aumentar la velocidad de la carga de datos al cargar particiones vacías.
Técnicamente, todas las tablas de SQL Server 2005 se dividen, es decir, cada tabla tiene al menos una partición. Lo que hace SQL Server 2005 es permitir que los administradores de bases de datos creen particiones adicionales en cada tabla. Las particiones de tabla y de índice son particiones de nivel de fila difíciles de definir (la creación de particiones por columnas no está permitida) que permiten un único punto de entrada (el nombre de tabla o de índice) sin que el código de aplicación tenga que conocer el número de particiones tras ese punto de entrada. Las particiones se pueden crear en la tabla base y en los índices asociados con la tabla.

Creación de tablas con particiones
Las funciones y esquemas de particiones se utilizan para crear una tabla que tenga la capacidad de desarrollarse más allá de la única partición predeterminada. Estos objetos son los que permiten dividir los datos en segmentos específicos y controlar dónde se almacenan estos segmentos de datos dentro del diseño de almacenamiento. Puede, por ejemplo, distribuir los datos en varios conjuntos de discos en función de la antigüedad de los datos o según otros factores diferenciadores comunes. Tenga en cuenta que se puede dividir una tabla tomando como base una columna de la tabla y cada partición debe contener los datos que no se pueden colocar en el resto de particiones.
Funciones de partición Al crear una partición de una tabla, la primera decisión que tiene que tomar es cómo quiere dividir los datos en segmentos diferentes. Se utiliza una función de partición para asignar filas individuales de datos en diferentes particiones. Estas filas individuales de datos pueden venir asignadas por cualquier tipo de columna, excepto text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), tipos de datos de alias o tipos de datos definidos por el usuario de Common Language Runtime (CLR). Sin embargo, la función de creación de particiones debe poder colocar una fila de datos en únicamente una partición de tabla; no puede permitir que una fila de datos pertenezca a varias particiones al mismo tiempo.
Para crear una partición de una tabla, debe crear la columna de partición en la tabla de destino. Esta columna de partición puede existir en el esquema de tablas cuando la tabla se crea por primera vez o puede modificar la tabla y agregar la columna en una fecha posterior. La columna puede aceptar valores NULL, pero todas las filas que contengan valores NULL se colocarán de forma predeterminada en la partición del extremo izquierdo de la tabla. Para evitar que ocurra esto, especifique que los valores NULL se coloquen en la partición más a la derecha de la tabla cuando cree la función de partición. El uso de la partición izquierda o derecha constituye una decisión importante de diseño, ya que modifica el esquema de partición y agrega más particiones o elimina las existentes.
Al crear una función de partición, puede elegir una función de partición LEFT (izquierda) o RIGHT (derecha). La diferencia entre las particiones LEFT y RIGHT es el lugar en el que se colocan los valores límite dentro del esquema de partición. Las particiones LEFT (que son las predeterminadas) incluyen el valor límite en la partición, mientras que las particiones RIGHT colocan este valor en la partición siguiente.
Para entender este concepto algo mejor, veamos unas particiones LEFT y RIGHT sencillas:
CREATE PARTITION FUNCTION Left_Partition (int) AS RANGE LEFT
FOR VALUES (1,10,100)

CREATE PARTITION FUNCTION Right_Partition (int) AS RANGE RIGHT
FOR VALUES (1,10,100)
En la primera función (Left_Partition), los valores 1, 10 y 100 se colocan en las particiones primera, segunda y tercera, respectivamente. En la segunda función (Right_Partition), los valores se colocan en las particiones segunda, tercera y cuarta.
Al crear una tabla con particiones, es importante conseguir que las particiones sean lo más uniformes posible. Esto le ayudará a entender el espacio necesario para una partición. El uso de LEFT y RIGHT determinará el lugar en que se colocarán los datos, y este, a su vez, determinará el tamaño de la partición y el tamaño de cualquier índice creado en esta partición.
Puede determinar el número de partición en el que se colocará un valor de datos mediante la función $PARTITION, tal y como se muestra a continuación:
SELECT $PARTITION.Left_Partition (10)
SELECT $PARTITION.Right_Partition (10)
En la primera instrucción SELECT, el resultado será 2. La segunda instrucción SELECT devolverá 3.
Esquemas de partición Tras crear la función y decidir cómo se dividirán los datos, tiene que decidir en qué lugar del subsistema de disco se crearán las particiones individuales. Utilice los esquemas de partición para crear este diseño de disco. Los esquemas de partición administran el almacenamiento de discos de particiones individuales mediante el uso de grupos de archivos para colocar cada partición en una ubicación del subsistema de disco. Puede configurar esquemas de partición para colocar todas las particiones en un solo grupo de archivos, colocar todas las particiones en grupos de archivos diferentes o que varias particiones compartan grupos de archivos. Este último método proporciona al administrador de bases de datos una gran flexibilidad al distribuir la E/S del disco.
En la figura 1 se muestran algunos métodos que puede utilizar para asignar un grupo de archivo o varios a un esquema de partición. Debe tener en cuenta que los grupos de archivos que utilice el esquema de partición deben existir previamente en la base de datos antes de crear el esquema divisor.
Figure 1 Asignación de grupos de archivos a un esquema de partición (Close Figure 1)
--Place all partitions into the PRIMARY filegroup
CREATE PARTITION SCHEME Primary_Left_Scheme
AS PARTITION Left_Partition
--Partition must currently exist in database
      ALL TO ([PRIMARY])

--Place all partitions into the different filegroups
CREATE PARTITION SCHEME Different_Left_Scheme
AS PARTITION Left_Partition
--Partition must currently exist in database
      TO (Filegroup1, Filegroup2, Filegroup3, Filegroup4)
--Filegroups must currently exist in database

--Place multiple partitions into the different filegroups
CREATE PARTITION SCHEME Multiple_Left_Scheme
AS PARTITION Left_Partition
--Partition must currently exist in database
      TO (Filegroup1, Filegroup2, Filegroup1, Filegroup2)
--Filegroups must currently exist in database
Si crea las funciones de partición de ejemplo mostradas en la figura 1 y utiliza el esquema de partición para crear una tabla, podrá determinar en qué lugar de las tablas recién divididas se colocarán las filas de datos individuales. A continuación, puede ver la distribución de estas filas de datos después de que se inserten en la tabla con particiones. El código de todo este proceso tendrá un aspecto parecido al que se muestra en la figura 2.
Figure 2 Colocación de filas de datos y visualización de la distribución (Close Figure 2)
--Prepare database
IF OBJECT_ID('Partitioned_Table') IS NOT NULL
DROP TABLE Partitioned_Table
GO

IF EXISTS(SELECT [name] FROM sys.partition_schemes
WHERE [name] = 'Primary_Left_Scheme')
DROP PARTITION SCHEME Primary_Left_Scheme
GO

IF EXISTS(SELECT [name] FROM sys.partition_functions
WHERE [name] = 'Left_Partition')
DROP PARTITION FUNCTION Left_Partition
GO

--Create partitioned table
CREATE PARTITION FUNCTION Left_Partition (int) AS RANGE LEFT
FOR VALUES (1,10,100)

--Place all partitions into the PRIMARY filegroup
CREATE PARTITION SCHEME Primary_Left_Scheme
AS PARTITION Left_Partition
      ALL TO ([PRIMARY])

CREATE TABLE Partitioned_Table
(
col1 INT
,col2 VARCHAR(15)
) ON Primary_Left_Scheme (col1)

--Determine where values will be placed (this is not required)
--You should try to do this before executing the code
SELECT $PARTITION.Left_Partition (1)
SELECT $PARTITION.Left_Partition (2)
SELECT $PARTITION.Left_Partition (3)
SELECT $PARTITION.Left_Partition (4)
SELECT $PARTITION.Left_Partition (10)
SELECT $PARTITION.Left_Partition (11)
SELECT $PARTITION.Left_Partition (12)
SELECT $PARTITION.Left_Partition (13)
SELECT $PARTITION.Left_Partition (14)
SELECT $PARTITION.Left_Partition (100)
SELECT $PARTITION.Left_Partition (101)
SELECT $PARTITION.Left_Partition (102)
SELECT $PARTITION.Left_Partition (103)
SELECT $PARTITION.Left_Partition (104)

--Insert data into partitioned table
INSERT INTO Partitioned_Table VALUES (1,'Description')
INSERT INTO Partitioned_Table VALUES (2,'Description')
INSERT INTO Partitioned_Table VALUES (3,'Description')
INSERT INTO Partitioned_Table VALUES (4,'Description')
INSERT INTO Partitioned_Table VALUES (10,'Description')
INSERT INTO Partitioned_Table VALUES (11,'Description')
INSERT INTO Partitioned_Table VALUES (12,'Description')
INSERT INTO Partitioned_Table VALUES (13,'Description')
INSERT INTO Partitioned_Table VALUES (14,'Description')
INSERT INTO Partitioned_Table VALUES (100,'Description')
INSERT INTO Partitioned_Table VALUES (101,'Description')
INSERT INTO Partitioned_Table VALUES (102,'Description')
INSERT INTO Partitioned_Table VALUES (103,'Description')
INSERT INTO Partitioned_Table VALUES (104,'Description')

--View the distribution of data in the partitions
SELECT ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] = OBJECT_ID('Partitioned_Table')

Modificación de tablas con particiones
Aunque se haya realizado una planeación cuidadosa por adelantado, en ocasiones tendrá que ajustar las tablas con particiones una vez que se han creado y rellenado. Su esquema de partición puede funcionar tal y como esperaba, pero puede que, por ejemplo, necesite agregar nuevas particiones conforme se acumulan datos nuevos o quizás tenga que eliminar de golpe grandes cantidades de datos divididos. Afortunadamente, las tablas con particiones y las estructuras subyacentes de partición permiten que se realicen cambios una vez que se ha creado la tabla y rellenado con datos.
Adición de particiones Hay muchos planes de partición que incluyen la capacidad de agregar una partición nueva en una fecha futura. Este punto en el tiempo puede ser una fecha específica o puede depender de un valor en una columna de identidad incremental. Sin embargo, si no ha planeado esto por adelantado, puede llevar a cabo este procedimiento en una fecha posterior y agregar particiones nuevas a una tabla con particiones. Observe la tabla creada en la figura 2. Puede agregar una partición nueva a esta tabla que contenga los valores superiores a 500, de la siguiente forma:
--Determine where values live before new partition
SELECT $PARTITION.Left_Partition (501)  --should return a value of 4

--Create new partition
ALTER PARTITION FUNCTION Left_Partition ()
SPLIT RANGE(500)

--Determine where values live after new partition
SELECT $PARTITION.Left_Partition (501)  --should return a value of 5
La capacidad para agregar particiones proporciona una gran flexibilidad. En la figura 3 se muestra cómo puede agregar una partición al lado izquierdo de la función. En este caso, necesita indicar al esquema de partición el lugar en el que debe colocar la nueva partición ya que ha agotado todos los grupos de archivos que se crearon cuando generó por primera vez el esquema de partición. Incluso aunque utilice el grupo de archivos PRIMARY para todas las particiones, aún tiene que indicar al esquema de partición que vuelva a utilizar el grupo de archivos PRIMARY para la partición nueva.
Figure 3 Adición de una partición al lado izquierdo de la función (Close Figure 3)
--Determine where values live after new partition
SELECT $PARTITION.Left_Partition (5)   --should return a value of 2
SELECT $PARTITION.Left_Partition (1)   --should return a value of 1
SELECT $PARTITION.Left_Partition (10)  --should return a value of 2

--Add new filegroups to the partitioning scheme
ALTER PARTITION SCHEME Primary_Left_Scheme
NEXT USED [PRIMARY]

--Create new partition
ALTER PARTITION FUNCTION Left_Partition ()
SPLIT RANGE(5)

--Determine where values live after new partition
SELECT $PARTITION.Left_Partition (5)   --should return a value of 2
SELECT $PARTITION.Left_Partition (1)   --should return a value of 1
SELECT $PARTITION.Left_Partition (10)  --should return a value of 3
Combinación de dos particiones SQL Server permite eliminar particiones únicas de una tabla al tiempo que mantiene los datos. De esta forma, puede combinar datos activos más antiguos con datos archivados, o reducir el número de particiones que tiene, y aliviar así la carga de administración de la tabla con particiones. También puede utilizar este procedimiento para combinar particiones, y mover los datos de un grupo de archivos a otro para liberar espacio en disco en algunos conjuntos de discos. El código de la figura 4 muestra cómo puede mover los datos de una partición a otra dentro del mismo grupo de archivos.
Figure 4 Traslado de los datos de una partición a otra (Close Figure 4)
--Prepare database
IF OBJECT_ID('multiple_partition') IS NOT NULL
DROP TABLE multiple_partition
GO

IF EXISTS(SELECT [name] FROM sys.partition_schemes
WHERE [name] = 'Primary_Left_Scheme')
DROP PARTITION SCHEME Primary_Left_Scheme
GO

IF EXISTS(SELECT [name] FROM sys.partition_functions
WHERE [name] = 'Left_Partition')
DROP PARTITION FUNCTION Left_Partition
GO

--Create partitioned table
CREATE PARTITION FUNCTION Left_Partition (int) AS RANGE LEFT
FOR VALUES (1,10,100)

--Place all partitions into the PRIMARY filegroup
CREATE PARTITION SCHEME Primary_Left_Scheme
AS PARTITION Left_Partition
--Partition must currently exist in database
      ALL TO ([PRIMARY])

CREATE TABLE multiple_partition
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
) ON Primary_Left_Scheme (col1)

INSERT INTO multiple_partition VALUES (1,'Description')
INSERT INTO multiple_partition VALUES (2,'Description')
INSERT INTO multiple_partition VALUES (3,'Description')
INSERT INTO multiple_partition VALUES (4,'Description')
INSERT INTO multiple_partition VALUES (10,'Description')
INSERT INTO multiple_partition VALUES (11,'Description')
INSERT INTO multiple_partition VALUES (12,'Description')
INSERT INTO multiple_partition VALUES (13,'Description')
INSERT INTO multiple_partition VALUES (14,'Description')
INSERT INTO multiple_partition VALUES (100,'Description')
INSERT INTO multiple_partition VALUES (101,'Description')
INSERT INTO multiple_partition VALUES (102,'Description')
INSERT INTO multiple_partition VALUES (103,'Description')
INSERT INTO multiple_partition VALUES (104,'Description')

--Verify partitions
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] = OBJECT_ID('multiple_partition')

--Check where data would be placed
SELECT $PARTITION.Left_Partition (1)
SELECT $PARTITION.Left_Partition (10)
SELECT $PARTITION.Left_Partition (100)
SELECT $PARTITION.Left_Partition (101)

--Merge two partitions
ALTER PARTITION FUNCTION Left_Partition()
MERGE RANGE (10)

--Verify partitions
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] = OBJECT_ID('multiple_partition')

--Check where data would be placed
SELECT $PARTITION.Left_Partition (1)
SELECT $PARTITION.Left_Partition (10)
SELECT $PARTITION.Left_Partition (100)
SELECT $PARTITION.Left_Partition (101)
Traslado de una tabla de una sola partición a una tabla con varias particiones Durante las rutinas de carga, a menudo hay grandes cantidades de datos que deben cargarse en la base de datos y, a continuación, modificarse o agregarse antes de que se trasladen a la tabla de datos real. La creación de particiones de SQL Server 2005 permite desplazar una tabla con una sola partición a una tabla con varias particiones. Esto significa que puede cargar datos en una sola tabla de carga, modificar estos datos y, a continuación, desplazar la tabla entera a una tabla existente sin la carga que supone desplazar cada fila individual de datos. Esta capa de partición no implica la alteración de las estructuras de partición subyacentes. Lo que implica es la modificación de la tabla con particiones. El código de la figura 5 muestra cómo puede lograr esto.
Figure 5 Traslado de una tabla completa a una tabla existente (Close Figure 5)
--Prepare database
IF OBJECT_ID(‘multiple_partition’) IS NOT NULL
DROP TABLE multiple_partition
GO

IF OBJECT_ID(‘single_partition’) IS NOT NULL
DROP TABLE single_partition
GO

IF EXISTS(SELECT [name] FROM sys.partition_schemes
WHERE [name] = ‘Primary_Left_Scheme’)
DROP PARTITION SCHEME Primary_Left_Scheme
GO

IF EXISTS(SELECT [name] FROM sys.partition_functions
WHERE [name] = ‘Left_Partition’)
DROP PARTITION FUNCTION Left_Partition
GO

--Create single partition table
CREATE TABLE single_partition
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
)

--Table must have a CHECK Constraint
ALTER TABLE single_partition
WITH CHECK
ADD CONSTRAINT CK_single_partition
    CHECK (col1 > 100)

INSERT INTO single_partition VALUES (101,’Description’)
INSERT INTO single_partition VALUES (102,’Description’)
INSERT INTO single_partition VALUES (103,’Description’)
INSERT INTO single_partition VALUES (104,’Description’)

--Create partitioned table
CREATE PARTITION FUNCTION Left_Partition (int) AS RANGE LEFT
FOR VALUES (1,10,100)

--Place all partitions into the PRIMARY filegroup
CREATE PARTITION SCHEME Primary_Left_Scheme
AS PARTITION Left_Partition
--Partition must currently exist in database
      ALL TO ([PRIMARY])

CREATE TABLE multiple_partition
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
) ON Primary_Left_Scheme (col1)

INSERT INTO multiple_partition VALUES (1,’Description’)
INSERT INTO multiple_partition VALUES (2,’Description’)
INSERT INTO multiple_partition VALUES (3,’Description’)
INSERT INTO multiple_partition VALUES (4,’Description’)
INSERT INTO multiple_partition VALUES (10,’Description’)
INSERT INTO multiple_partition VALUES (11,’Description’)
INSERT INTO multiple_partition VALUES (12,’Description’)
INSERT INTO multiple_partition VALUES (13,’Description’)
INSERT INTO multiple_partition VALUES (14,’Description’)
INSERT INTO multiple_partition VALUES (100,’Description’)

--Verify partitions
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID(‘multiple_partition’), OBJECT_
      ID(‘single_partition’))

--Move the single table into the partitioned table
ALTER TABLE single_partition SWITCH TO multiple_partition PARTITION 4

--Verify partitions
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID(‘multiple_partition’), OBJECT_ID(‘single_partition’))
Traslado de una partición de una tabla a otra Una tarea administrativa común es la de trasladar los datos más antiguos a tablas separadas de archivo. El proceso de archivado implica generalmente una serie de instrucciones que pueden generar un uso adicional de recursos en los registros de transacciones. No obstante, el cambio de propiedad de una partición de una tabla a otra es un método sencillo para archivar grandes cantidades de datos sin causar una carga en el registro de transacciones. Esta característica permite al administrador de bases de datos trasladar los segmentos de datos más antiguos de las tablas activas a las archivadas. Sin embargo, puesto que los datos no se mueven realmente, la cantidad de tiempo que consume este proceso puede ser notablemente inferior al que se emplea cuando se trasladan filas individuales de datos. En la figura 6 se muestra cómo puede realizar este procedimiento.
Figure 6 Traslado de los datos más antiguos a las tablas archivadas (Close Figure 6)
--Prepare database
IF OBJECT_ID('active_data') IS NOT NULL
DROP TABLE active_data
GO

IF OBJECT_ID('archive_data') IS NOT NULL
DROP TABLE archive_data
GO

IF EXISTS(SELECT [name] FROM sys.partition_schemes
WHERE [name] = 'Active_Scheme')
DROP PARTITION SCHEME Active_Scheme
GO

IF EXISTS(SELECT [name] FROM sys.partition_functions
WHERE [name] = 'Active_Partition')
DROP PARTITION FUNCTION Active_Partition
GO

IF EXISTS(SELECT [name] FROM sys.partition_schemes
WHERE [name] = 'Archive_Scheme')
DROP PARTITION SCHEME Archive_Scheme
GO

IF EXISTS(SELECT [name] FROM sys.partition_functions
WHERE [name] = 'Archive_Partition')
DROP PARTITION FUNCTION Archive_Partition
GO

--Create active function
CREATE PARTITION FUNCTION Active_Partition (int) AS RANGE LEFT
FOR VALUES (1,10,100)

--Create archive function
CREATE PARTITION FUNCTION Archive_Partition (int) AS RANGE LEFT
FOR VALUES (100,200,300)

--Place all partitions into the PRIMARY filegroup
CREATE PARTITION SCHEME Active_Scheme
AS PARTITION Active_Partition
--Partition must currently exist in database
      ALL TO ([PRIMARY])

--Place all partitions into the PRIMARY filegroup
CREATE PARTITION SCHEME Archive_Scheme
AS PARTITION Archive_Partition
--Partition must currently exist in database
      ALL TO ([PRIMARY])

CREATE TABLE active_data
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
) ON Active_Scheme (col1)

CREATE TABLE archive_data
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
) ON Archive_Scheme (col1)

INSERT INTO active_data VALUES (1,'Description')
INSERT INTO active_data VALUES (2,'Description')
INSERT INTO active_data VALUES (3,'Description')
INSERT INTO active_data VALUES (4,'Description')
INSERT INTO active_data VALUES (10,'Description')
INSERT INTO active_data VALUES (11,'Description')
INSERT INTO active_data VALUES (12,'Description')
INSERT INTO active_data VALUES (13,'Description')
INSERT INTO active_data VALUES (14,'Description')
INSERT INTO active_data VALUES (100,'Description')

INSERT INTO archive_data VALUES (200,'Description')
INSERT INTO archive_data VALUES (300,'Description')
INSERT INTO archive_data VALUES (400,'Description')

--Verify partitions
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID('active_data'),OBJECT_ID('archive_
      data'))

--Switch ownership of partition to another table
ALTER TABLE active_data SWITCH PARTITION 3 TO archive_data PARTITION 1

--Verify partitions
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID('active_data'),OBJECT_ID('archive_
      data'))
Uso de una sola partición para crear una tabla nueva Puede mover una sola partición de una tabla con particiones existente a una tabla vacía sin particiones. Al hacerlo, un administrador de bases de datos puede realizar el mantenimiento de índices en la partición individual o eliminar fácilmente grandes cantidades de datos sin tener que registrar el proceso de eliminación. El ejemplo de la figura 7 muestra cómo trasladar una partición a una tabla vacía y, a continuación, utilizar esta tabla nueva para colocar los datos.
Figure 7 Traslado y eliminación de datos (Close Figure 7)
--Prepare database
IF OBJECT_ID('active_data') IS NOT NULL
DROP TABLE active_data
GO

IF OBJECT_ID('archive_data') IS NOT NULL
DROP TABLE archive_data
GO

IF EXISTS(SELECT [name] FROM sys.partition_schemes
WHERE [name] = 'Active_Scheme')
DROP PARTITION SCHEME Active_Scheme
GO

IF EXISTS(SELECT [name] FROM sys.partition_functions
WHERE [name] = 'Active_Partition')
DROP PARTITION FUNCTION Active_Partition
GO

--Create active function
CREATE PARTITION FUNCTION Active_Partition (int) AS RANGE LEFT
FOR VALUES (1,10,100)

--Place all partitions into the PRIMARY filegroup
CREATE PARTITION SCHEME Active_Scheme
AS PARTITION Active_Partition
--Partition must currently exist in database
      ALL TO ([PRIMARY])

CREATE TABLE active_data
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
) ON Active_Scheme (col1)

CREATE TABLE archive_data
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
)

INSERT INTO active_data VALUES (1,'Description')
INSERT INTO active_data VALUES (2,'Description')
INSERT INTO active_data VALUES (3,'Description')
INSERT INTO active_data VALUES (4,'Description')
INSERT INTO active_data VALUES (10,'Description')
INSERT INTO active_data VALUES (11,'Description')
INSERT INTO active_data VALUES (12,'Description')
INSERT INTO active_data VALUES (13,'Description')
INSERT INTO active_data VALUES (14,'Description')
INSERT INTO active_data VALUES (100,'Description')

--Verify partitions
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID('active_data'),OBJECT_ID('archive_
      data'))

--Switch ownership of partition to another table
ALTER TABLE active_data SWITCH PARTITION 3 TO archive_data

--Verify partitions
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID('active_data'),OBJECT_ID('archive_
      data'))

--Drop all archive data without logging
DROP TABLE archive_data
GO

--Verify partitions
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID('active_data'),OBJECT_ID('archive_
      data'))

Índices con particiones
La capacidad para crear particiones de los datos de una tabla incluye también la capacidad para crear índices con particiones. Esta capacidad permite al administrador de bases de datos diseñar la estructura del índice en función de los datos divididos en lugar de basarse en los datos de la tabla completa. La creación de índices con particiones da como resultado árboles B individuales en los índices con particiones. La división de los índices tiene como efecto el crear índices más pequeños que el motor de almacenamiento puede mantener con mayor facilidad durante la modificación, la adición o la eliminación de datos. Estos índices más pequeños también los puede mantener individualmente el administrador de bases de datos, lo que facilita el mantenimiento en conjuntos de datos grandes.
Creación de índices con particiones Al crear índices con particiones, puede crear índices alineados o no alineados. Con los índices alineados, debe crear el índice con una relación directa con los datos divididos. Con los índices no alineados, tendrá que elegir un esquema diferente de partición.
El método preferido es el alineado y se realizará automáticamente si crea la tabla de partición y, a continuación, crea los índices sin especificar un esquema diferente de partición. El uso de índices alineados ofrece la flexibilidad de crear particiones adicionales en la tabla y la capacidad de cambiar la propiedad de una partición a otra tabla. Estas capacidades son a menudo el motivo por el que los administradores de bases de datos crean tablas con particiones en primer lugar, y el uso sencillo del esquema de partición de la tabla en sus índices le permitirá probablemente alcanzar sus objetivos de partición.
Puede crear índices en tablas en las que los datos del índice no estén alineados con los datos de la tabla. Si los datos se encuentran en una tabla con particiones, podrá unir los datos de diferentes formas (los datos divididos pueden unirse de manera eficaz con otros datos divididos mediante el optimizador de consultas). De manera alternativa, puede realizar este procedimiento con una tabla sin particiones, lo que permite crear un índice con particiones (en la tabla de una sola partición) para reducir el mantenimiento de los índices.
El código de la figura 8 creará un índice sin agrupar con particiones en una tabla con particiones. El índice no agrupado se alineará con la tabla y utilizará la columna de partición de la tabla como clave del índice no agrupado.
Figure 8 Índice con particiones sin agrupar en tabla con particiones (Close Figure 8)
--Prepare database
IF OBJECT_ID('multiple_partition') IS NOT NULL
DROP TABLE multiple_partition
GO

IF EXISTS(SELECT [name] FROM sys.partition_schemes
WHERE [name] = 'Primary_Left_Scheme')
DROP PARTITION SCHEME Primary_Left_Scheme
GO

IF EXISTS(SELECT [name] FROM sys.partition_functions
WHERE [name] = 'Left_Partition')
DROP PARTITION FUNCTION Left_Partition
GO

--Create partitioned table
CREATE PARTITION FUNCTION Left_Partition (int) AS RANGE LEFT
FOR VALUES (1,10,100)

--Place all partitions into the PRIMARY filegroup
CREATE PARTITION SCHEME Primary_Left_Scheme
AS PARTITION Left_Partition
--Partition must currently exist in database
    ALL TO ([PRIMARY])

CREATE TABLE multiple_partition
(
col1 INT
,col2 VARCHAR(15)
) ON Primary_Left_Scheme (col1)

--Create partitioned non-clustered index
CREATE NONCLUSTERED INDEX cl_multiple_partition ON multiple_
      partition(col1)

INSERT INTO multiple_partition VALUES (1,'Description')
INSERT INTO multiple_partition VALUES (2,'Description')
INSERT INTO multiple_partition VALUES (3,'Description')
INSERT INTO multiple_partition VALUES (4,'Description')
INSERT INTO multiple_partition VALUES (10,'Description')
INSERT INTO multiple_partition VALUES (11,'Description')
INSERT INTO multiple_partition VALUES (12,'Description')
INSERT INTO multiple_partition VALUES (13,'Description')
INSERT INTO multiple_partition VALUES (14,'Description')
INSERT INTO multiple_partition VALUES (100,'Description')
INSERT INTO multiple_partition VALUES (101,'Description')
INSERT INTO multiple_partition VALUES (102,'Description')
INSERT INTO multiple_partition VALUES (103,'Description')
INSERT INTO multiple_partition VALUES (104,'Description')

--Verify partitions
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] = OBJECT_ID('multiple_partition')

--Verify index partitions
SELECT partition_id, index_id FROM sys.partitions pt
WHERE pt.[object_id] = OBJECT_ID('multiple_partition')
El código de la figura 9 creará un índice sin alinear y sin agrupar en una tabla con particiones. Este índice no agrupado utilizará columnas diferentes para su clave de índice, que se puede utilizar en combinaciones intercaladas en otras tablas con particiones.
Figure 9 Índice no alineado sin agrupar en tabla con particiones (Close Figure 9)
--Prepare database
IF OBJECT_ID('multiple_partition') IS NOT NULL
DROP TABLE multiple_partition
GO

IF EXISTS(SELECT [name] FROM sys.partition_schemes
WHERE [name] = 'Primary_Left_Scheme')
DROP PARTITION SCHEME Primary_Left_Scheme
GO

IF EXISTS(SELECT [name] FROM sys.partition_schemes
WHERE [name] = 'Index_primary_Left_Scheme')
DROP PARTITION SCHEME Index_primary_Left_Scheme
GO

IF EXISTS(SELECT [name] FROM sys.partition_functions
WHERE [name] = 'Left_Partition')
DROP PARTITION FUNCTION Left_Partition
GO

IF EXISTS(SELECT [name] FROM sys.partition_functions
WHERE [name] = 'Index_Left_Partition')
DROP PARTITION FUNCTION Index_Left_Partition
GO

--Create partitioned index function
CREATE PARTITION FUNCTION Index_Left_Partition (int) AS RANGE LEFT
FOR VALUES (10,50,100)

--Create partitioned table
CREATE PARTITION FUNCTION Left_Partition (int) AS RANGE LEFT
FOR VALUES (1,10,100)

--Place all index partitions into the PRIMARY filegroup
CREATE PARTITION SCHEME Index_primary_Left_Scheme
AS PARTITION Index_Left_Partition
--Partition must currently exist in database
      ALL TO ([PRIMARY])

--Place all partitions into the PRIMARY filegroup
CREATE PARTITION SCHEME Primary_Left_Scheme
AS PARTITION Left_Partition
--Partition must currently exist in database
      ALL TO ([PRIMARY])

CREATE TABLE multiple_partition
(
col1 INT
,col2 INT
) ON Primary_Left_Scheme (col1)

--Create non-aligned partitioned nonclustered index
CREATE NONCLUSTERED INDEX cl_multiple_partition ON multiple_
     partition(col2)
ON Index_primary_Left_Scheme (col2)

INSERT INTO multiple_partition VALUES (1,10)
INSERT INTO multiple_partition VALUES (2,10)
INSERT INTO multiple_partition VALUES (3,10)
INSERT INTO multiple_partition VALUES (4,10)
INSERT INTO multiple_partition VALUES (10,50)
INSERT INTO multiple_partition VALUES (11,50)
INSERT INTO multiple_partition VALUES (12,50)
INSERT INTO multiple_partition VALUES (13,50)
INSERT INTO multiple_partition VALUES (14,50)
INSERT INTO multiple_partition VALUES (100,100)
INSERT INTO multiple_partition VALUES (101,100)
INSERT INTO multiple_partition VALUES (102,100)
INSERT INTO multiple_partition VALUES (103,100)
INSERT INTO multiple_partition VALUES (104,100)

--Verify row count on partitioned data
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] = OBJECT_ID('multiple_partition')
AND p.index_id = 0

--Verify row count on partitioned index
--Row counts will not match those found in the data partitions
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] = OBJECT_ID('multiple_partition')
AND p.index_id <> 0
Mantenimiento de los índices con particiones En el pasado, el mantenimiento de índices en tablas grandes que contenían millones o incluso miles de millones de filas de datos requería mucho más del tiempo del que tenían los administradores de bases de datos. Este mantenimiento solía omitirse debido a que los datos se bloqueaban mientras el índice se volvía a generar. Con SQL Server 2005, el administrador de bases de datos puede realizar el mantenimiento del índice en línea sin bloquear la tabla subyacente durante un largo período de tiempo. No obstante, incluso este enfoque (que requiere que se realice el mantenimiento de índices mientras los usuarios consultan los datos) puede ralentizar aún más el sistema debido al uso de recursos. Un enfoque más adecuado es dividir los índices en segmentos más pequeños y, a continuación, realizar el mantenimiento de índices en esas particiones más pequeñas. Por ejemplo, para realizar el mantenimiento de índices en una partición de índice, podría sencillamente anexar el fragmento de código siguiente al final del código mostrado en la figura 8.
ALTER INDEX cl_multiple_partition
ON multiple_partition
REBUILD Partition = 2
Tenga en cuenta que este mantenimiento de índices en particiones de índice individuales debe realizarse sin conexión y puede provocar el bloqueo de la tabla durante el proceso. Para que esto no ocurra, puede mover la partición única a una partición independiente, realizar el mantenimiento de índices y, a continuación, devolver la partición a la tabla principal. Este proceso causará algunos problemas de rendimiento cuando la partición se devuelva a la tabla y se actualice el índice agrupado, pero es menos problemático que bloquear toda la tabla y consume menos recursos del sistema.

Resumen
Como puede ver, la creación de particiones en tablas de SQL Server 2005 proporciona una flexibilidad mucho más mejorada para el almacenamiento y el mantenimiento de los datos en tablas de gran tamaño, sin tener que rehacer código de aplicación o procesos de SQL Server. Con estas capacidades, SQL Server ha demostrado ser una plataforma competente para las bases de datos críticas del ámbito empresarial.

Noah Gomez es administrador de bases de datos sénior del equipo de desarrollo de SQL Server para Verizon y está especializado en VLDB y en aplicaciones a gran escala. Es miembro de la Professional Association for SQL Server (PASS) y formó parte del equipo de administradores de bases de datos de Verizon que trabajó en las bases de datos de varios terabytes galardonadas con varios premios del Winter Corp. Top Ten Grand Prize en 2003.


 SQL Server: Los mejores consejos para el cl&#250;ster de SQL Server
SQL Server Tom Moreau

Los mejores consejos para el clúster de SQL Server
Resumen:
  • Ejecución de SQL Server en un clúster
  • Requisitos de hardware y software
  • Clúster de un nodo
  • Opciones de alta rentabilidad

Un clúster de servidor permite conectar varios servidores físicos, o nodos, que funcionan como asociados de conmutación por error entre sí. La redundancia que proporciona un clúster se traduce en más tiempo productivo para sus operaciones
críticas. He implementado un buen número de clústeres en mis 13 años de trabajo con SQL Server™ y cada uno de ellos presentó un grupo de problemas único. Esta experiencia me ha permitido recopilar varias sugerencias que pueden ayudarle a que sus esfuerzos por usar el clúster sean más sencillos y eficaces.
Los clústeres de servidor aprovechan las capacidades integradas de clúster de Enterprise Edition de la familia Windows Server®. De hecho, con fines de implementación de clústeres, Windows Server 2003 es con diferencia mejor que Windows 2000 Advanced Server. Para maximizar las prestaciones que obtendrá de los clústeres, necesitará el hardware adecuado y, para ello, tendrá que realizar algunos gastos. No basta con añadir un par de servidores con un disco compartido y no puede depender del hecho de que algunos componentes individuales aparezcan o no en Windows® Catalog (anteriormente conocido como Lista de compatibilidad de hardware). Todo el sistema en su conjunto debe aparecer en Windows Catalog. Pero no se preocupe, existen algunas soluciones de clúster rentables y aprobadas. En la figura 1 se muestra una configuración típica de clúster.
Figura 1 Un clúster típico
Figura 1 Un clúster típico (Hacer clic en la imagen para reducirla)
Figura 1 Un clúster típico
Figura 1 Un clúster típico (Hacer clic en la imagen para ampliarla)
Por supuesto, el hardware no constituye la única consideración que debe tener en cuenta en sus cavilaciones sobre el clúster; además, también necesita elegir la edición correcta de SQL Server 2005. La edición Enterprise Edition permite el uso de clústeres y presenta otras características útiles, como la capacidad de aprovechar más las CPU, las vistas particionadas actualizables y distribuidas, el trasvase de registros integrado y el uso automático de vistas indizadas. Si ya dispone de una licencia de Enterprise Edition, considere el clúster, tenga o no los servidores necesarios (entre dos y ocho) para crear un clúster tradicional (en breve hablaremos de los clústeres de un nodo). Si dispone de SQL Server 2005 Standard Edition, puede instalar un clúster de dos nodos.
Las ediciones Windows Server 2003 Enterprise y Datacenter se suministran con el clúster integrado. Lo único que tiene que hacer es ejecutar el Administrador de clústeres para configurarlo. Puede añadir todos los nodos al mismo tiempo o de uno en uno. De forma parecida, cuando instale SQL Server, podrá elegir si desea instalar un servidor no agrupado individual o una instancia virtual en un clúster. Si elige instalar una instancia virtual, podrá instalar en todos los nodos del clúster, sólo en algunos o incluso en uno solo.
Finalmente, para alcanzar el objetivo real de alta disponibilidad de clústeres, necesita contar con personas cualificadas y con unos procedimientos muy ensayados por si surgen problemas. Aunque el clúster ofrece una buena garantía ante los errores de hardware, no puede impedir los errores de usuario, como los que pudiera causar un administrador de base de datos muerto de sueño en mitad de la noche.

Clústeres de un nodo
Aunque lo único que necesite por el momento sea un único servidor, considere la creación de un clúster de un nodo. Esto le permitirá actualizar a un clúster más adelante sin tener que volver a crearlo. Sólo tiene que asegurarse de que el hardware que elige se encuentra en la sección de clúster de Windows Catalog.
La decisión de añadir un nodo más adelante no tiene que deberse exclusivamente a motivos de alta disponibilidad. Piense en lo que puede ocurrir si descubre que su servidor no tiene la capacidad necesaria. Esto se traduce en una migración, un proceso que conlleva tiempo y esfuerzo. Si tiene un clúster de un nodo, la migración es más fácil con un tiempo de inactividad mucho menor. Agregue el nodo nuevo al clúster, agregue los binarios y los Service Packs de SQL Server al nodo nuevo y, a continuación, lleve a cabo una conmutación por error en el nodo nuevo. Seguidamente, agregue cualquier actualización posterior a los Service Packs y, por último, expulse el nodo antiguo. El tiempo de inactividad comprende únicamente el tiempo que se tarda en llevar a cabo la conmutación por error y agregar las actualizaciones (si las hay).

Adición de nodos
Puesto que todos los nodos de un clúster deben ser idénticos, querrá actuar cuanto antes para conseguir este nodo extra, en lugar de dejarlo para más tarde. Si espera demasiado tiempo, el nodo podría dejar de fabricarse. En un proyecto, tuve que reconstruir un nodo en un clúster de SQL Server 2000. Hice que la administración de red/SO se encargara de la compilación básica del equipo y, a continuación, intervine para volver a añadirla al clúster y prepararla para su funcionamiento como nodo de SQL Server. Todo fue bien, hasta que realicé una conmutación por error en el nodo nuevo. Muy a mi pesar, dio errores enseguida. En resumen, aunque había preparado un documento detallado sobre la creación de un clúster nuevo, incluida la adición de las cuentas de servicio de clúster y de servicio de SQL Server a ambos nodos, el documento no se había seguido de forma explícita. El equipo de administración no agregó estas cuentas de servicio al nodo reconstruido, por lo que ya no existían los privilegios que tenían antes de la reconstrucción.
Tardé bastante tiempo en localizar este error. Un día se me ocurrió mirar en la pertenencia a grupos local. En cuanto agregué las dos cuentas, la conmutación por error se llevó a cabo sin problemas. Entonces llegué a una conclusión. La reconstrucción de un nodo es algo que no se hace a menudo y, cuando se hace, suele ser por una emergencia. Aunque había confeccionado un documento, no se utilizó. Podríamos haber automatizado la parte de seguridad al escribir sencillamente una secuencia de comandos breve que agregara estas dos cuentas y que realizara otras personalizaciones necesarias. No obstante, las cosas han mejorado en SQL Server 2005. El instalador requiere que se establezcan los grupos de nivel de dominio para las cuentas de servicio de SQL Server.
Por supuesto, esto me hizo reflexionar de nuevo. Se pueden crear secuencias de comandos que invoquen CLUSTER.EXE para agregar el nodo a su clúster Microsoft ® Cluster Server (MSCS). Lo único que tiene que hacer es incluir el nombre del nodo en la secuencia de comandos y esta se encargará del resto. En una emergencia, la automatización es su mejor aliado.

Clústeres N + 1
A veces, el motivo de agregar un nodo a un clúster no es la sustitución de un nodo. Es posible que quiera agregar más instancias de SQL Server al clúster y cada una de ellas necesitará recursos de disco independientes. Aunque es posible ejecutar varias instancias en un solo nodo, todas compartirán la CPU y la RAM, y eso podría dar lugar a un rendimiento pobre. La situación ideal es que en cada nodo se ejecute únicamente una instancia. ¿Cómo se puede garantizar esto al realizar la conmutación por error? Es sencillo: la respuesta es que un nodo no contiene servicios en ejecución, mientras que cada uno del resto de los nodos ejecuta una instancia de SQL Server. En realidad, esa es la definición de un clúster N + 1: N instancias que se ejecutan en N + 1 nodos. El nodo extra es la copia de seguridad.

Actualización de SQL Server
La actualización de una instancia en clúster de SQL Server no está pensada para corazones débiles. Está en clúster por un motivo: necesita tiempo de actividad. No obstante, SQL Server 2005 ofrece varias mejoras que podrá utilizar para continuar con el proceso de actualización sin demasiado tiempo de inactividad.
¿Qué opciones tiene? Examinemos en primer lugar la solución más costosa: la creación de un clúster completamente nuevo, lo que implica servidores nuevos y, quizás, una red de área de almacenamiento (SAN) también nueva. Lo más probable es que pueda utilizar los conmutadores existentes de la red, pero eso es todo. Obviamente, este enfoque no resulta barato pero tiene sus ventajas. El nuevo hardware ofrece normalmente un rendimiento mucho mejor que el antiguo, gracias al aumento constante de la capacidad de disco y la velocidad. De esta forma, sólo con el hardware nuevo conseguirá un aumento considerable del rendimiento. Incluso puede que quiera alquilar su equipo para que siempre esté a la última.
Una vez que tenga el hardware necesario, podrá crear su nuevo SQL Server virtual en esta instalación, copiar sus bases de datos de producción y, a continuación, ejercitar el sistema nuevo, dejando el tiempo suficiente para eliminar los errores antes del momento del traslado. Sólo tiene que asegurarse de incluir en secuencias de comandos los inicios de sesión del servidor existente. Consulte support.microsoft.com/kb/246133. Otra buena idea es actualizar su secuencia de comandos de compilación de inicio de sesión, en caso de que se produzcan errores muy graves.
Para minimizar el tiempo de inactividad, lo más probable es que tenga que utilizar el trasvase de registros, a menos que sus bases de datos sean muy pequeñas y disponga de un período de tiempo en el que no hay usuarios conectados. Puede trasvasar los registros hasta justo antes del traslado. A continuación, expulse a los usuarios, corte y trasvase el registro final y, por último, haga que la aplicación señale a la nueva instancia. Revise la sección siguiente sobre la creación de reflejos de bases de datos para descubrir una alternativa interesante al trasvase de registros. Si utiliza alias DNS, probablemente no le haga falta que las aplicaciones señalen a la nueva instancia. En su lugar, solo tendrá que actualizar el alias DNS. Este enfoque tiene la ventaja de que si ya ha realizado parte de la migración y tiene que volver al original, al menos dispondrá del original.
Puede tomar una ruta menos costosa, pero que requiere más planeación por adelantado. Un clúster puede admitir más de una instancia de SQL Server, pero cada instancia debe tener sus propios recursos de disco. De modo que cuando esté destripando su SAN, reserve un LUN para una actualización futura. Para realizar la actualización, instale los binarios de SQL Server en este recurso de disco. Puede ejercitar el sistema y, cuando esté preparado, apague el SQL Server actual, traslade los recursos de disco del antiguo grupo SQL Server, actualice las dependencias y ponga en línea la instancia nueva de SQL Server. Adjunte las bases de datos de la instancia antigua, y ya está. Ha realizado copias de seguridad de todo por adelantado, ¿verdad?
Este enfoque es el menos costoso y conlleva cierto riesgo. Si algo sale mal, no podrá separar las bases de datos de la instancia nueva y volverlas a colocar. Sólo podrá restaurarlas a partir de copias de seguridad, y esto puede implicar un tiempo de inactividad considerable.
Una alternativa es colocar dos instancias de SQL Server en su SAN, siempre que tenga espacio suficiente. Restaure las copias de seguridad de producción (y el trasvase de registros) en la nueva instancia, y continúe con el procedimiento que he descrito anteriormente. Sin embargo, ahora dispone de un comodín. Cuando termine la migración, podrá liberar los recursos de SAN de la instancia antigua. El costo será únicamente el precio de los discos adicionales.

Equilibrio de carga
Empecemos por desacreditar un concepto erróneo muy común. Los clústeres de MSCS se utilizan para obtener una disponibilidad alta, pero no para equilibrar la carga. Además, SQL Server no incluye ninguna capacidad automática de equilibrio de carga. Tendrá que equilibrar la carga mediante el diseño físico de la aplicación. ¿Qué significa eso?
Cuando una tabla aumenta de tamaño, es lógico esperar que se produzca cierta reducción en el rendimiento, especialmente cuando se llevan a cabo búsquedas en ella. Cuando alcanza los millones o los miles de millones de filas, la solución tradicional ha sido utilizar vistas particionadas, que se confeccionan a partir de tablas con esquemas idénticos agrupadas mediante UNION ALL. Además, se emplean restricciones CHECK para diferenciar las tablas miembro y, de esta forma, se evita la duplicación de datos en la vista particionada. Si la columna que se utiliza en la restricción CHECK forma también parte de la clave principal, la vista podrá actualizarse.
Si las tablas miembro se encuentran en sus propios grupos de archivos, puede que obtenga un mayor rendimiento del disco si los archivos de estos grupos se encuentran en unidades físicas separadas. Las tablas pueden estar incluso en bases de datos separadas. Sin embargo, en SQL Server 2005, siempre que los datos se encuentren en la misma base de datos, podrá utilizar la partición de tablas, que resulta mucho más fácil de implementar.
Pero supongamos que ha hecho todo lo que ha podido con la partición de tablas o con las vistas particionadas (locales) y el rendimiento sigue siendo bajo. Si tiene SQL Server 2000 o SQL Server 2005, puede utilizar las vistas particionadas distribuidas. La diferencia principal es que las tablas miembro pueden residir en instancias diferentes de SQL Server, y estas instancias se pueden instalar en un clúster N + 1. ¿Por qué es esta una buena idea? Si alguna tabla miembro pierde la conexión en una vista particionada, toda la vista se quedará sin conexión. Al incluir estos miembros como parte de un clúster, dispondrá de la confiabilidad que necesita para asumir los problemas de rendimiento y proporcionar equilibrio de carga.

¿Necesita realmente un clúster?
Es posible que tenga algunos servidores de reserva sin utilizar y que ninguno aparezca en la sección de clústeres de Windows Catalog. Es una lástima tener que salir a comprar nuevos servidores que admitan un clúster cuando dispone de estos otros.
La creación de reflejos de bases de datos puede ser una alternativa atractiva al clúster. La creación de reflejos conlleva tres elementos: una instancia que alberga la base de datos reflejada se denomina "principal"; el servidor de copia de seguridad se denomina "reflejo", y, si desea que la conmutación por error sea automática, es necesario un tercer servidor, denominado "testigo". En resumen, una transacción en una base de datos de la instancia principal se vuelve a ejecutar en el reflejo. Si la instancia principal se interrumpe, la base de datos puede conmutar por error en el reflejo, de manera automática si tiene un testigo. Debe configurar la creación de reflejos con cada una de las bases de datos de aplicaciones y no puede reflejar las bases de datos de sistema.
El reflejo es una instancia separada de SQL Server, a diferencia de lo que ocurre con un clúster, y su ubicación puede encontrarse a miles de kilómetros. Sus cachés se llenan con la actividad de actualización que se produce como resultado de las transacciones duplicadas de la instancia principal. Por supuesto, dé por sentado que la única actividad del reflejo es la recepción de las transacciones reflejadas de la instancia principal. La conmutación por error es normalmente más rápida que en un clúster, puesto que SQL Server ya se ejecuta en el reflejo. Dado que las memorias cachés están al menos parcialmente cebadas, el rendimiento inicial no es tan lento como podría serlo en un escenario de clústeres. Además, tenga en cuenta que cuando una base de datos reflejada conmuta por error, las funciones de la instancia principal y del reflejo se invierten.
La desventaja de la creación de reflejos de bases de datos es que se necesita el doble de la capacidad total en disco que con un clúster. Necesitará también una mayor potencia de CPU, si desea utilizar el modo sincrónico sin pérdida de datos. A lo dicho, una disponibilidad alta no resulta barata.

Un enfoque combinado
Puesto que un reflejo puede encontrarse en una ubicación bastante remota con respecto a la instancia principal, constituye una buena opción para los planes de recuperación de desastres (DR). Su clúster puede ser la primera línea de defensa pero, ¿qué ocurre si utiliza tanto los clústeres como la creación de reflejos? En una conmutación por error de clústeres, si tiene un testigo como parte de la configuración de creación de reflejos, el reflejo se convertirá en la instancia principal, mientras el servidor SQL Server en clúster se conecta en línea. Sin embargo, tenga en cuenta que la conmutación por error de la nueva instancia principal no se realiza de manera automática en el nuevo reflejo (en clúster). En consecuencia, es mejor no permitir la conmutación por error automática en las bases de datos reflejadas cuando se utilicen junto con un clúster.
DR no es la única razón por la que querrá utilizar la creación de reflejos; también es útil si tiene que aplicar un Service Pack o una revisión a su instancia principal, en cuyo caso puede realizar manualmente la conmutación por error en el reflejo. Al aplicar el Service Pack o la revisión, el servidor principal antiguo se queda sin conexión temporalmente y las transacciones realizadas que se producen en la nueva instancia principal se colocan en la cola, a la espera de ser devueltas al reflejo nuevo (instancia principal antigua). Una vez que se termina la instalación del Service Pack o de la revisión, tendrá lugar la sincronización y, al final, los dos servidores quedarán completamente sincronizados. Ahora, puede intercambiar las funciones de la instancia principal y el reflejo. El tiempo de inactividad ha abarcado únicamente los pocos segundos de llevar a cabo la conmutación por error y por recuperación. Puede utilizar este enfoque para migrar su SQL Server a otro equipo. Pero no realice la conmutación por recuperación.

Los servidores virtuales aportan flexibilidad.
La virtualización permite ejecutar uno o más sistemas operativos al mismo tiempo en un único servidor físico. El software de virtualización añade otra capa de capacidades al concepto de clúster porque permite agrupar el software. En consecuencia, si el servidor en el que se ejecuta el host presenta errores, entonces este, junto con sus SO invitados, conmutarán por error a un nodo de copia de seguridad. Esta podría ser una forma muy sencilla de migrar un servidor invitado. Además, el SO invitado no necesita ser compatible con clústeres. De esta forma, podría ejecutar SQL Server Workgroup Edition en un sistema operativo Windows Server 2003 invitado, que se ejecute en un clúster en Microsoft Virtual Server 2005. Indirectamente, lo que ha hecho es agrupar Workgroup Edition (consulte la figura 2).
Figura 2 Uso de un servidor virtual
Figura 2 Uso de un servidor virtual (Hacer clic en la imagen para reducirla)
Figura 2 Uso de un servidor virtual
Figura 2 Uso de un servidor virtual (Hacer clic en la imagen para ampliarla)

Todo bajo control
Si es el encargado de una implementación de SQL Server, necesita saber que el servidor siempre va a estar disponible. El clúster de servidor ayuda a garantizar que sea así. En este artículo se ofrecen algunas sugerencias aprendidas con mucho trabajo para ayudarle a empezar. Encontrará más información útil en la barra lateral "Recursos sobre clúster".
Recursos sobre clúster
Para obtener más información sobre los métodos aquí utilizados y sobre los diversos productos que necesita para configurar su clúster de SQL Server, consulte los siguientes recursos:
  • SQL Server 2005 Failover Clustering (en inglés)
  • SQL Server 2000 Failover Clustering (en inglés)
  • Windows Server 2003 R2 Enterprise Edition–Cluster Server (en inglés)
  • Microsoft Cluster Server Administrator’s Guide (en inglés)
  • Microsoft Virtual Server 2005 R2 (en inglés)

Tom Moreaucuenta con una licenciatura y un doctorado y las certificaciones MCSE y MCDBA. Es consultor independiente especializado en la administración, diseño e implementación de bases de datos de SQL Server. Vive en Toronto, Canadá. Tom lleva utilizando SQL Server desde 1993 y recibió el galardón MVP en 2001. Ha escrito más de 100 artículos y es coautor de un libro sobre SQL Server. Gracias al MVP de SQL Server Geoff Hiten por su útil aportación.


 Administraci&#243;n de Windows: Dentro del kernel de Windows&#160;Vista: Segunda parte
Administración de Windows Mark Russinovich

Dentro del kernel de Windows Vista: Segunda parte
Resumen:
  • Administración de memoria
  • Inicio y apagado
  • Administración de energía

El mes pasado, en la primera entrega de esta serie de tres partes, señalé las mejoras del kernel de Windows Vista en las áreas de procesos y E/S.
Esta vez hablaré de los avances sobre la forma en que Windows Vista administra la memoria, así como las mejoras destacadas del inicio, el apagado y la administración de energía del sistema (Primera parte).
Cada versión de Windows® mejora la escalabilidad y el rendimiento, en lo que Windows Vista™ no es diferente. El Administrador de memoria de Windows Vista incluye numerosas mejoras, como el uso más extenso de técnicas de sincronización libres de bloqueo, bloqueo concreto, empaquetado más comprimido de estructuras de datos, E/S de paginación mayor, compatibilidad con arquitecturas modernas de memoria de GPU y uso más eficiente del búfer de traducción de direcciones. Además, ahora la administración de memoria de Windows Vista ofrece asignación dinámica de espacio de direcciones según los requisitos de las diferentes cargas de trabajo.
Existen cuatro características potenciadoras del rendimiento basadas en nuevas tecnologías que hacen su presentación en un sistema operativo en Windows Vista: SuperFetch, ReadyBoost, ReadyBoot y ReadyDrive. Las abordaré con todo detalle más adelante en este artículo.

Espacio dinámico de direcciones de kernel
Windows y las aplicaciones que ejecuta se han encontrado con el obstáculo que presentan los límites de espacio de direcciones de los procesadores de 32 bits. El kernel de Windows se ciñe de forma predeterminada a 2 GB o a la mitad del espacio total de direcciones virtuales de 32 bits, con la otra mitad reservada para uso del proceso cuyo subproceso se esté ejecutando actualmente en la CPU. Dentro de su mitad, el kernel tiene que asignarse a sí mismo, asignar los controladores de dispositivos, la memoria caché del sistema de archivos, las pilas de kernel, las estructuras de datos de códigos por sesión y los búferes no paginados (memoria física bloqueada) y paginados asignados por controladores de dispositivos. Antes de Windows Vista, el Administrador de memoria determinaba en el momento del inicio cuánto espacio de direcciones se debía asignar a estos diversos objetivos, pero esta inflexibilidad a veces conducía a situaciones en las que una de las regiones se llenaba mientras que otras seguían teniendo mucho espacio disponible. El agotamiento de un área puede llevar a errores en la aplicación e impedir que los controladores de dispositivos completen las operaciones de E/S.
En Windows Vista de 32 bits, el Administrador de memoria administra dinámicamente el espacio de direcciones del kernel, y asigna y desasigna el espacio de los distintos usos según requieran las demandas de la carga de trabajo. Así, la cantidad de memoria virtual utilizada para almacenar los búferes paginados puede crecer cuando los controladores de dispositivos piden más, y puede reducirse cuando los controladores la liberan. Por lo tanto, Windows Vista puede ocuparse de una gran variedad de cargas de trabajo. Igualmente, la versión de 32 bits del próximo Windows Server®, cuyo nombre en código es "Longhorn", dará cabida a más usuarios simultáneos de Terminal Server.
Por supuesto, en sistemas de 64 bits de Windows Vista, las restricciones de espacio de direcciones no son actualmente una limitación práctica y, por tanto, no requieren un tratamiento especial, ya que están configuradas de forma óptima.

Prioridades de memoria
Del mismo modo que Windows Vista añade prioridades de E/S (como señalé en la última entrega), también implementa prioridades de memoria. Para entender cómo usa Windows las prioridades de memoria, hace falta comprender cómo implementa el Administrador de memoria su memoria caché, llamada "lista En espera". En todas las versiones de Windows anteriores a Windows Vista, cuando el sistema recuperaba una página física (que suele tener 4 KB de tamaño) propiedad de un proceso, el Administrador de memoria solía colocar la página al final de la lista En espera. Si el proceso quería obtener acceso a la página otra vez, el Administrador de memoria tomaba la página de la lista En espera y la reasignaba al proceso. Cuando un proceso quería utilizar una página nueva de memoria física y no había ninguna libre disponible, el Administrador de memoria le daba la página al principio de la lista En espera. Este esquema trataba todas las páginas en espera esencialmente como iguales, y utilizaba únicamente la hora a la que se colocaron en la lista para ordenarlas.
En Windows Vista, cada página de la memoria tiene una prioridad en un rango de 0 a 7, de modo que el Administrador de memoria divide la lista En espera en ocho listas en las que se almacenan páginas con una prioridad particular. Cuando el Administrador de memoria quiere tomar una página de la lista En espera, primero toma las páginas de las listas con poca prioridad. La prioridad de una página refleja generalmente la del subproceso que causa su asignación en primer lugar. Si la página es compartida, refleja la más alta de las prioridades de memoria de los subprocesos que la comparten. Los subprocesos heredan el valor de prioridad de página del proceso al que pertenecen. El Administrador de memoria utiliza las prioridades más bajas para las páginas que lee del disco cuando anticipa accesos a la memoria de un proceso.
De forma predeterminada, los procesos tienen un valor de prioridad de página de 5, pero las funciones permiten que las aplicaciones y el sistema puedan cambiar el proceso y los valores de prioridad de página de los subprocesos. El punto fuerte de las prioridades de memoria se encuentra sólo cuando las prioridades relativas de las páginas se entienden a gran escala, que es la función de SuperFetch.

SuperFetch
Un cambio considerable del Administrador de memoria está en la forma de administrar la memoria física. La administración de la lista En espera que usaban las anteriores versiones de Windows tiene dos limitaciones. Primero, el establecimiento de prioridades entre las páginas reside sólo en el comportamiento más reciente de los procesos y no anticipa los requisitos futuros de la memoria. Segundo, los datos utilizados para el establecimiento de prioridades se limitan a la lista de páginas propiedad de un proceso en algún punto concreto en el tiempo. Estos defectos pueden tener como resultado situaciones como el "síndrome de después de comer", en el que el usuario deja el equipo un rato y entonces se ejecuta una aplicación que requiere mucha memoria (como un análisis de antivirus o una desfragmentación de disco). Esta aplicación obliga a que el código y los datos que las aplicaciones activas habían guardado en la memoria caché se sobrescriban con las actividades que requieren mucha memoria. Cuando el usuario vuelve, experimenta un rendimiento lento, ya que las aplicaciones tienen que solicitar los datos y el código del disco.
Windows XP incluía compatibilidad con captura previa que mejoraba el rendimiento del inicio de aplicaciones y el arranque al realizar E/S de discos grandes para cargar de antemano la memoria con los datos del sistema de archivos y el código esperados, según inicios anteriores de arranque y aplicaciones. Windows Vista va un paso más allá con SuperFetch, un esquema de administración de memoria que mejora el enfoque al que se obtuvo acceso menos recientemente con información histórica y administración proactiva de memoria.
SuperFetch está implementado en %SystemRoot%\System32\Sysmain.dll como servicio de Windows que se ejecuta dentro de un proceso de host del servicio (%SystemRoot%\System32\Svchost.exe). El esquema depende del Administrador de memoria, para poder recuperar los historiales de uso de páginas así como dirigir al Administrador de memoria para cargar de antemano los datos y el código de los archivos en disco o de un archivo de paginación en la lista En espera y asignar las prioridades a las páginas. El servicio SuperFetch esencialmente amplía el seguimiento de páginas a datos y código que estuvieran alguna vez en la memoria, pero que el Administrador de memoria volviera a usar para hacer sitio a otros datos y código nuevos. Almacena esta información en archivos de escenario con la extensión .db en el directorio %SystemRoot%\Prefetch junto con archivos estándares de captura previa empleados para optimizar el inicio de la aplicación. Gracias a este conocimiento profundo del uso de la memoria, SuperFetch puede cargar de antemano los datos y el código cuando la memoria física está disponible.
Siempre que la memoria se quede libre, por ejemplo, cuando una aplicación salga o libere memoria, Superfetch pedirá al Administrador de memoria que capture los datos y el código recientemente desechados. Esto se lleva a cabo con una tasa de unas pocas páginas por segundo con E/S de prioridad muy baja, de modo que la carga previa no tenga efectos para el usuario ni para otras aplicaciones activas. Por lo tanto, si deja el equipo para ir a comer y una tarea secundaria que requiera mucha memoria hace que el código y los datos de sus aplicaciones activas se desechen de la memoria mientras ha salido, normalmente SuperFetch podrá reponer todo, o la mayor parte, en la memoria antes de que vuelva. SuperFetch incluye también compatibilidad específica con escenarios para los modos de hibernación y de espera, el cambio rápido de usuario (FUS) y el inicio de aplicaciones. Cuando el sistema hiberna, por ejemplo, SuperFetch almacena los datos y el código en un archivo de hibernación esperado (basado en hibernaciones anteriores), al que tendrá acceso durante la subsiguiente reanudación. En cambio, si reanuda Windows XP, cuando solicite los datos que estaban en la memoria caché, habrá que volver a leerlos del disco.
Consulte la barra lateral "Acerca de SuperFetch" para obtener más información sobre el efecto que tiene SuperFetch en la memoria disponible.
Acerca de SuperFetch
Después de usar el sistema Windows Vista un rato, verá un número bajo en el contador de memoria física libre en la página de rendimiento del Administrador de tareas. Eso es porque SuperFetch y el almacenamiento en caché de Windows estándar hacen uso de toda la memoria física disponible para guardar en la memoria caché los datos de disco. Por ejemplo, cuando arranca por primera vez, si ejecuta inmediatamente el Administrador de tareas, debería advertir el valor de la memoria libre en disminución conforme el número de la memoria caché aumenta. O bien, si ejecuta un programa que necesita mucha memoria y después lo cierra (irá bien cualquiera de los "optimizadores de RAM" de software gratuito que asignan grandes cantidades de memoria y después la liberan) o sencillamente copia un archivo muy grande, el número Libre aumentará y el gráfico Uso de memoria física caerá conforme el sistema recupere la memoria desasignada. Sin embargo, con el tiempo, SuperFetch volverá a llenar la memoria caché con los datos obligados a salir de la memoria, de modo que el número En caché subirá y el número Libre disminuirá.
Acerca de la memoria
Acerca de la memoria (Hacer clic en la imagen para reducirla)
Acerca de la memoria
Acerca de la memoria (Hacer clic en la imagen para ampliarla)

ReadyBoost
La velocidad de las CPU y las memorias están dejando atrás rápidamente a la de los discos duros, de modo que los discos suelen ser un cuello de botella en el rendimiento del sistema. La E/S aleatoria de disco es especialmente costosa porque el tiempo de búsqueda del cabezal de disco está entorno a los 10 milisegundos, una eternidad para los procesadores actuales de 3 GHz. Mientras que la RAM es ideal para guardar en caché los datos de disco, es relativamente costosa. La memoria flash, sin embargo, suele ser más barata y puede atender las lecturas aleatorias hasta 10 veces más rápido que un disco duro normal. Windows Vista, por lo tanto, incluye una característica llamada ReadyBoost para aprovechar los dispositivos de almacenamiento de memoria flash con la creación de una capa intermedia de almacenamiento en caché que se encuentre lógicamente entre la memoria y los discos.
ReadyBoost consiste en un servicio implementado en %SystemRoot%\System32\Emdmgmt.dll, que se ejecuta en un proceso de host del servicio, y un controlador de filtro de volumen, %SystemRoot%\System32\Drivers\Ecache.sys. Emd es el dispositivo de memoria externo, el nombre de trabajo de ReadyBoost durante su desarrollo. Al insertar un dispositivo de memoria flash (como una llave USB) en un sistema, el servicio ReadyBoost comprueba el dispositivo para determinar sus características de rendimiento y almacena los resultados de la prueba en HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Currentversion\Emdmgmt, como se muestra en la figura 1.
Figura 1 Resultados de la prueba del dispositivo de ReadyBoost en el Registro
Figura 1 Resultados de la prueba del dispositivo de ReadyBoost en el Registro (Hacer clic en la imagen para reducirla)
Figura 1 Resultados de la prueba del dispositivo de ReadyBoost en el Registro
Figura 1 Resultados de la prueba del dispositivo de ReadyBoost en el Registro (Hacer clic en la imagen para ampliarla)
Si todavía no utiliza ningún dispositivo para guardar en caché, y el nuevo dispositivo es de un tamaño de 256 MB a 32 GB, tiene una tasa de transferencia de 2,5 MB/s o más en las lecturas aleatorias de 4 KB y una tasa de transferencia de 1,75 MB/s o más en las escrituras aleatorias de 512 KB, entonces ReadyBoost preguntará si quiere dedicar hasta 4 GB del almacenamiento para el almacenamiento en caché de disco. Aunque ReadyBoost pueda utilizar NTFS, limita el tamaño máximo de caché a 4 GB para adaptarse a las limitaciones de FAT32. Si está de acuerdo, entonces el servicio creará un archivo de almacenamiento en caché llamado Readyboost.sfcache en la raíz del dispositivo y pedirá a SuperFetch que rellene previamente la memoria caché en segundo plano.
Después de que el servicio ReadyBoost haya iniciado el almacenamiento en caché, el controlador del dispositivo de Ecache.sys interceptará todas las lecturas y escrituras de los volúmenes de disco duro local (C:\, por ejemplo) y copiará cualquier dato que se escriba en el archivo de almacenamiento en caché que el servicio haya creado. Ecache.sys comprime los datos y suele alcanzar una proporción de compresión de 2:1, por lo que un archivo de caché de 4 GB contendría 8 GB de datos. El controlador cifra cada bloque que escribe con el Estándar de cifrado avanzado (AES) mediante una clave de sesión por arranque generada aleatoriamente para garantizar la privacidad de los datos en la memoria caché si el dispositivo se retira del sistema.
Cuando ReadyBoost observa lecturas aleatorias que se pueden satisfacer desde la memoria caché, las atiende desde allí, pero debido a que el acceso de lecturas secuenciales es mejor en un disco duro que en una memoria flash, permite que las lecturas que forman parte de las pautas de accesos secuenciales vayan directamente al disco, aunque los datos estén en la memoria caché.

ReadyBoot
Windows Vista utiliza la misma captura previa al iniciar que Windows XP si el sistema tiene menos de 512 MB de memoria, pero si el sistema tiene 700 MB o más de RAM, utiliza una caché en RAM para optimizar el proceso de arranque. El tamaño de la memoria caché depende de la RAM total disponible, pero es suficientemente grande para crear una caché razonable y aún así otorgarle al sistema la memoria que necesita para arrancar sin problemas.
Después de cada arranque, el servicio ReadyBoost (el mismo servicio que implementa la característica ReadyBoost recién descrita) utiliza el tiempo de inactividad de la CPU para calcular el plan de almacenamiento en caché al iniciar para el siguiente arranque. Analiza la información de seguimiento de archivos de los cinco arranques anteriores e identifica a qué archivos se tuvo acceso y dónde residen en el disco. Almacena los seguimientos procesados en %SystemRoot%\Prefetch\Readyboot como archivos .fx y guarda el plan del almacenamiento en caché en HKLM\System\CurrentControlSet\Services\Ecache\Parameters en valores REG_BINARY denominados según los volúmenes internos de disco a los que hacen referencia.
La memoria caché se implementa mediante el mismo controlador de dispositivo que implementa el almacenamiento en caché de ReadyBoost (Ecache.sys), pero el llenado de la memoria caché se rige por el servicio ReadyBoost al iniciarse el sistema. Mientras la memoria caché de arranque se comprime como la memoria caché de ReadyBoost, otra diferencia entre la administración de la memoria caché de ReadyBoost y la de ReadyBoot es que en el modo ReadyBoot, a excepción de las actualizaciones del servicio ReadyBoost, la memoria caché no cambia para reflejar los datos que se leen o escriben durante el arranque. El servicio ReadyBoost elimina la memoria caché 90 segundos después del comienzo del arranque, o si las necesidades de otra memoria lo exigen, y registra la estadística caché en HKLM\System\CurrentControlSet\Services\Ecache\Parameters\ReadyBootStats, como se muestra en la figura 2. Las pruebas de rendimiento de Microsoft muestran que ReadyBoot ofrece mejoras de rendimiento de alrededor del 20 por ciento sobre la captura previa heredada de Windows XP.
Figura 2 Estadística del rendimiento de ReadyBoot
Figura 2 Estadística del rendimiento de ReadyBoot (Hacer clic en la imagen para reducirla)
Figura 2 Estadística del rendimiento de ReadyBoot
Figura 2 Estadística del rendimiento de ReadyBoot (Hacer clic en la imagen para ampliarla)

ReadyDrive
ReadyDrive es una característica de Windows Vista que aprovecha las nuevas unidades de disco duro híbrido llamadas H-HDD. Un H-HDD es un disco con una memoria flash permanente incrustada (también conocida como NVRAM). Los H-HDD más comunes incluyen entre 50 MB y 512 MB de caché, pero el límite de caché de Windows Vista es de 2 TB.
Windows Vista utiliza los comandos ATA-8 para definir los datos de disco que se van a incluir en la memoria flash. Por ejemplo, Windows Vista guardará los datos de arranque en la memoria caché cuando el sistema se apague, permitiendo así que se reinicie más rápido. Almacena también partes de los datos de archivo de hibernación en la memoria caché cuando el sistema hiberna para que la subsiguiente reanudación sea más rápida. Dado que la memoria caché se habilita aun cuando el disco mantiene una velocidad baja de giro, Windows puede utilizar la memoria flash como caché de escritura en disco, que evita aumentar la velocidad de giro del disco cuando el sistema se está alimentando de la batería. Al mantener el eje del disco desactivado, se puede ahorrar buena parte de la energía que consume la unidad de disco en uso normal.

Base de datos de configuración de arranque
Windows Vista ha mejorado varios aspectos del inicio y el apagado. El inicio ha mejorado con la introducción de la base de datos de configuración de arranque (BCD) para almacenar la configuración de inicio del sistema y del sistema operativo, los procesos de inicio de nuevo flujo y de organización del sistema, la nueva arquitectura de inicio de sesión y la compatibilidad con los servicios de inicio automático demorado. Los cambios en el apagado de Windows Vista incluyen los avisos de apagado para los servicios de Windows, solicitud de apagado de los servicios de Windows y un cambio considerable en la forma en que el sistema operativo administra las transiciones de estado de energía.
Uno de los cambios más visibles en el proceso de inicio es la ausencia de Boot.ini en la raíz del volumen del sistema. Eso es porque la configuración de arranque, que en versiones anteriores de Windows se almacenaba en el archivo de texto Boot.ini, ahora se almacena en la BCD. Una de las razones por las que Windows Vista utiliza la BCD es que unifica las dos arquitecturas actuales de arranque compatibles con Windows: MBR y EFI. MBR se usa generalmente en sistemas de escritorio x86 y x64, mientras que EFI se usa en sistemas basados en Itanium (aunque es probable que los equipos de escritorio admitan EFI en un futuro próximo). La BCD resume el firmware y tiene otras ventajas sobre Boot.ini, como la compatibilidad con cadenas Unicode y los ejecutables alternativos de arranque previo.
La BCD se almacena en el disco en un subárbol de registro que se carga en el registro de Windows para obtener acceso mediante API de registro. En los equipos, Windows la almacena en Boot\Bcd en el volumen del sistema. En sistemas EFI, está en la partición del sistema EFI. Cuando se carga el subárbol, aparece en HKLM\Bcd00000000, pero el formato interno está sin documentar, así que editarlo requiere el uso de una herramienta como %SystemRoot%\System32\Bcdedit.exe. Las interfaces para manipular la BCD también se encuentran disponibles para las secuencias de comandos y los editores personalizados mediante el Instrumental de administración de Windows (WMI) y podrá utilizar la utilidad de configuración del sistema de Windows (%SystemRoot%\System32\Msconfig.exe) para editar o agregar los parámetros básicos, como las opciones de depuración del kernel.
La BCD divide la configuración de arranque de gran plataforma, como la selección predeterminada del sistema operativo y el tiempo de espera del menú de arranque, a partir de la configuración específica del sistema operativo, como las opciones de arranque de sistema operativo y la ruta de acceso al cargador del arranque del sistema operativo. Por ejemplo, en la figura 3 se muestra que cuando se ejecuta Bcdedit sin opciones de línea de comandos, muestra la configuración de la plataforma en la sección del Administrador de arranque de Windows a la cabeza del resultado, seguida de la configuración específica del sistema operativo en la sección del cargador de arranque de Windows.
Figura 3 Configuración que se muestra en BCDEdit
Figura 3 Configuración que se muestra en BCDEdit (Hacer clic en la imagen para reducirla)
Figura 3 Configuración que se muestra en BCDEdit
Figura 3 Configuración que se muestra en BCDEdit (Hacer clic en la imagen para ampliarla)
Cuando inicia una instalación de Windows Vista, este nuevo esquema divide las tareas del cargador de sistema operativo (Ntldr) en versiones anteriores de Windows en dos archivos ejecutables diferentes: \BootMgr y %SystemRoot%\System32\Winload.exe. Bootmgr lee la BCD y muestra el menú de arranque del sistema operativo, mientras que Winload.exe se ocupa de la carga del sistema operativo. Si realiza un arranque limpio, Winload.exe cargará los controladores de dispositivos de inicio del arranque y los archivos del sistema operativo centrales, incluso Ntoskrnl.exe, y transferirá el control al sistema operativo. Si el sistema se está reanudando después de una hibernación, entonces ejecutará %SystemRoot%\System32\Winresume.exe para cargar los datos de hibernación en la memoria y reanudar el sistema operativo.
Bootmgr incluye también compatibilidad para archivos ejecutables adicionales de arranque previo. Windows Vista viene con la herramienta de diagnóstico de memoria de Windows (\Boot\Memtest.exe) preconfigurada como opción para comprobar la salud de la RAM, pero otros fabricantes pueden agregar sus propios archivos ejecutables de arranque previo como opciones que aparecerán en el menú de arranque de Bootmgr.

Procesos de inicio
En versiones anteriores de Windows, la relación entre varios procesos de sistema era poco intuitiva. Por ejemplo, cuando el sistema arranca, el administrador interactivo de inicio de sesión (%SystemRoot%\System32\Winlogon.exe) inicia el servicio Subsistema de autoridad de seguridad local (Lsass.exe) y el Administrador de control de servicios (Services.exe). Además, Windows utiliza un contenedor de espacio de nombres llamado Sesión para aislar los procesos que se ejecutan en sesiones de inicio diferentes. Pero antes de Windows Vista, el usuario iniciaba la sesión en la Sesión 0 (compartida por la consola), la sesión utilizada por los procesos de sistema, que creaba problemas potenciales de seguridad. Dicho problema aparecía, por ejemplo, cuando un servicio de Windows mal escrito ejecutándose en la Sesión 0 mostraba una interfaz de usuario en la consola interactiva, lo que permitía que el código malintencionado pudiera atacar la ventana mediante intrusiones y obtener posiblemente los privilegios administrativos.
Para abordar estos problemas, se volvieron a diseñar varios procesos del sistema para Windows Vista. El Administrador de sesión (Smss.exe) es el primer proceso en modo de usuario creado durante el arranque como en versiones anteriores de Windows, pero en Windows Vista el Administrador de sesión inicia una segunda instancia de sí mismo para configurar la Sesión 0, que se dedica únicamente a procesos de sistema. El proceso del Administrador de sesión para la Sesión 0 inicia la aplicación de inicio de Windows (Wininit.exe), un proceso de subsistema de Windows (Csrss.exe) para la Sesión 0 y, a continuación, se cierra. La aplicación de inicio de Windows continúa iniciando el Administrador de control de servicios, el Subsistema de autoridad de seguridad local y un proceso nuevo, el Administrador de sesión local (Lsm.exe), que administra las conexiones de Terminal Server en el equipo.
Cuando un usuario inicia la sesión en el sistema, el Administrador de sesión inicial crea una instancia nueva de sí mismo para configurar la nueva sesión. El nuevo proceso de Smss.exe inicia un proceso del subsistema de Windows y un proceso de Winlogon para la sesión nueva. El hecho de tener las copias principales de uso de sí mismo del Administrador de sesión para iniciar sesiones nuevas no ofrece ninguna ventaja en un sistema cliente, pero en sistemas "Longhorn" de Windows Server que actúan como Terminal Server, se pueden ejecutar varias copias simultáneamente para permitir un inicio de sesión de múltiples usuarios más rápido.
Con esta nueva arquitectura, los procesos del sistema, incluidos los servicios de Windows, quedan aislados en la Sesión 0. Si un servicio de Windows, que se ejecuta en la Sesión 0, muestra una interfaz de usuario, el servicio Detección de servicios interactivos (%SystemRoot%\System32\UI0Detect.exe) lo notificará a cualquier administrador de inicio de sesión con el inicio de una instancia de sí mismo en el contexto de seguridad del usuario y la presentación del mensaje que aparece en la figura 4. Si el usuario selecciona el botón "Mostrarme el mensaje", el servicio alternará entre el escritorio y el escritorio del servicio de Windows, donde el usuario podrá interactuar con la interfaz de usuario del servicio y después volver a su propio escritorio. Para obtener más información sobre lo que sucede al inicio, consulte la barra lateral "Visualización de las relaciones del proceso de inicio".
Figura 4 El servicio ha mostrado una ventana
Figura 4 El servicio ha mostrado una ventana (Hacer clic en la imagen para reducirla)
Figura 4 El servicio ha mostrado una ventana
Figura 4 El servicio ha mostrado una ventana (Hacer clic en la imagen para ampliarla)
Visualización de las relaciones del proceso de inicio
Podrá utilizar Process Explorer de Sysinternals (microsoft.com/technet/sysinternals) para ver el árbol de inicio de procesos de Windows Vista.
La captura de pantalla incluye la columna Sesión, que se puede agregar mediante el cuadro de diálogo de la columna Process Explorer. El proceso resaltado es el Smss.exe inicial. Debajo está el Csrss.exe y el Wininit.exe de la Sesión 0, que están justificados a la izquierda porque su proceso primario, la instancia de Smss.exe configurada por la Sesión 0, se ha cerrado. Los tres secundarios de Wininit son Services.exe, Lsass.exe y Lsm.exe.
Process Explorer identifica un conjunto de procesos en ejecución en la Sesión 1, que es la sesión a la que estoy conectado a través de una conexión del Escritorio remoto. Process Explorer muestra los procesos que se ejecutan en su misma cuenta resaltados en azul. Finalmente, la Sesión 2 se inicia en preparación de que un usuario se conecte con la consola y cree una sesión de inicio nueva. Es en esta sesión donde Winlogon se ejecuta y utiliza LogonUI para pedir al nuevo usuario de la consola que "Presione Ctrl+Alt+Supr para iniciar una sesión", y donde Logonui.exe solicitará al usuario sus credenciales.
Proceso de inicio e información de sesión
Proceso de inicio e información de sesión (Hacer clic en la imagen para reducirla)
Proceso de inicio e información de sesión
Proceso de inicio e información de sesión (Hacer clic en la imagen para ampliarla)

Proveedores de credenciales
Incluso la arquitectura de inicio de sesión cambia en Windows Vista. En versiones anteriores de Windows, el proceso de Winlogon cargaba la DLL de autenticación e identificación gráfica (GINA) especificada en el registro para mostrar una IU de inicio de sesión que pedía a los usuarios sus credenciales. Desgraciadamente, el modelo GINA sufre varias limitaciones: sólo se puede configurar un GINA, la escritura de un GINA completo es difícil para otros fabricantes y los GINA personalizados que no tienen interfaces de usuario estándares cambian la experiencia del usuario de Windows.
En vez de un GINA, Windows Vista utiliza la nueva arquitectura de proveedor de credenciales. Winlogon inicia un proceso separado, el host de interfaz de usuario de inicio de sesión (Logonui.exe), que carga los proveedores de credenciales configurados en HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Currentversion\Authentication\Credential Providers. Logonui puede alojar múltiples proveedores de credenciales simultáneamente; de hecho, Windows Vista se entrega con proveedores interactivos (Authui.Dll) y de tarjetas inteligentes (Smart-cardcredentialprovider.dll). Para garantizar una experiencia de usuario uniforme, LogonUI administra la interfaz de usuario que ven los usuarios finales, pero permite también a los proveedores de credenciales especificar elementos personalizados, como texto, iconos y controles de edición.

Servicios de inicio automático demorado
Si alguna vez ha iniciado la sesión en un sistema de Windows inmediatamente después de que se inicie, habrá experimentado probablemente alguna demora antes de que el escritorio esté configurado completamente y pueda interactuar con el shell y cualquier aplicación que inicie. Mientras está iniciando la sesión, el Administrador de control de servicios inicia los diversos servicios de Windows configurados como servicios de inicio automático que, por lo tanto, se activan al iniciar. Muchos servicios realizan inicializaciones que exigen mucho a la CPU y a los discos, y que compiten con sus actividades de inicio de sesión. Con el fin de mejorar este aspecto, Windows Vista introduce un servicio nuevo para el inicio llamado inicio automático demorado, que pueden utilizar los servicios si no tienen que estar activos inmediatamente después del arranque de Windows.
El Administrador de control de servicios inicia los servicios configurados para el inicio automático demorado después de que los servicios del inicio automático han terminado de iniciarse y establece la prioridad del subproceso inicial en THREAD_PRIORITY_LOWEST. Este nivel de prioridad es la causa de que toda la E/S de disco que el subproceso realiza tenga prioridad de E/S muy baja. Cuando un servicio termina de inicializarse, el Administrador de control de servicios establece su prioridad en normal. La combinación del inicio demorado, la prioridad baja de CPU y memoria, y la prioridad en segundo plano de disco reduce mucho las interferencias con un inicio de sesión de usuario. Muchos servicios de Windows, incluidos la transferencia inteligente en segundo plano, Cliente de Windows Update y Windows Media® Center, utilizan el nuevo tipo de inicio para ayudar a mejorar el rendimiento de inicio de sesión después de un arranque.

Apagado
Un problema que ha acosado a los escritores de los servicios de Windows es que durante un apagado de Windows hay, de forma predeterminada, un máximo de veinte segundos para realizar una limpieza general. Las versiones de Windows anteriores a Windows Vista no han sido compatibles con un apagado limpio que espera a que todos los servicios se cierren porque un servicio de depuración de errores puede mantener en espera un apagado indefinidamente. Algunos servicios, como los que tienen operaciones de apagado relacionadas con la red o tienen que guardar grandes cantidades de datos en el disco, quizás requieran más tiempo, por lo que Windows Vista ofrece un servicio para solicitar avisos de apagado.
Cuando Windows Vista se apaga, el Administrador de control de servicios notifica primero a los servicios que solicitan aviso de apagado. Esperará indefinidamente a que estos servicios terminen, pero si tienen un error y no responden a consultas, el Administrador de control de servicios renunciará y seguirá adelante pasados tres minutos. Una vez que todos estos servicios hayan terminado o el tiempo de espera haya caducado, el Administrador de control de servicios seguirá con el apagado de los servicios de tipo heredado para el resto de los servicios. La directiva de grupo y los servicios de Windows Update registran el aviso de apagado en una instalación actualizada de Windows Vista.
La directiva de grupo y los servicios de Windows Update utilizan también otra característica de los servicios de Windows Vista: orden de apagado. Los servicios siempre han podido especificar las dependencias de inicio que el Administrador de control de servicios sigue para iniciar los servicios en un orden que los satisfaga, pero hasta Windows Vista no se han podido especificar las dependencias de apagado. Ahora los servicios que se registran para los avisos de apagado se pueden insertar a sí mismos en la lista almacenada en HKLM\System\CurrentControlSet\Control\PreshutdownOrder y el Administrador de control de servicios los apagará según su orden. Consulte la barra lateral "Identificación de un servicio de inicio automático demorado y aviso de apagado" para obtener más información sobre estos servicios.

Administración de energía
La suspensión y la hibernación son otras formas de apagado. La administración de energía de depuración de errores en controladores y aplicaciones ha sido problemática desde que Windows 2000 introdujo la administración de energía en la línea de base de Windows NT® de los sistemas operativos de Windows. Muchos usuarios esperaban que su equipo portátil se suspendiera o hibernara al cerrar la tapa antes de embarcarse en un viaje y, al llegar a su destino se han encontrado sólo una maleta caliente, una batería agotada y datos perdidos. Esto es porque Windows siempre ha pedido a los controladores de dispositivos y las aplicaciones su consentimiento para cambiar el estado de energía, y un solo controlador o aplicación que no responde podría impedir la transición.
En Windows Vista, el Administrador de energía del kernel todavía informa a los controladores y las aplicaciones de los cambios de estado de energía para que puedan prepararse, pero ya no solicita permiso. Además, el Administrador de energía espera, como máximo, 20 segundos para que las aplicaciones respondan a las notificaciones de cambio, en lugar de los dos minutos que esperaba en versiones anteriores de Windows. Como resultado, los usuarios de Windows Vista pueden estar más seguros de que sus sistemas respetan la hibernación y la suspensión.

Próximamente
Tal como mencioné antes, esta es la segunda entrega de una serie de tres. La primera parte trataba las mejoras del kernel de Windows Vista en las áreas de E/S y procesos. Esta vez, me he centrado en las mejoras de Windows Vista en cuanto a la administración de la memoria, el inicio y el apagado. La próxima vez, concluiré la serie con la descripción de los cambios del kernel en cuanto a confiabilidad y seguridad.
Identificación de un servicio de inicio automático demorado y aviso de apagado
El comando integrado SC se actualiza en Windows Vista para mostrar los servicios configurados como servicios de inicio automático demorado:
Uso de SC para mostrar el tipo de inicio
Uso de SC para mostrar el tipo de inicio (Hacer clic en la imagen para reducirla)
Uso de SC para mostrar el tipo de inicio
Uso de SC para mostrar el tipo de inicio (Hacer clic en la imagen para ampliarla)
Desgraciadamente, el comando SC no informa de los servicios que han solicitado el aviso de apagado, pero puede utilizar la utilidad PsService de Sysinternals para consultar si un servicio acepta el aviso de apagado:
Visualización del estado de avisos de apagado
Visualización del estado de avisos de apagado (Hacer clic en la imagen para reducirla)
Visualización del estado de avisos de apagado
Visualización del estado de avisos de apagado (Hacer clic en la imagen para ampliarla)

Mark Russinovich es empleado técnico de Microsoft en la división de servicios y plataformas. Es coautor de Microsoft Windows Internals (Microsoft Press, 2004) y orador frecuente en conferencias de desarrolladores y TI. Se unió a Microsoft con la adquisición reciente de la compañía que cofundó, Winternals Software. También creó Sysinternals, donde publicó las utilidades Process Explorer, Filemon y Regmon


 Nota del editor: Estanter&#237;a de trofeos
Nota del editor
Estantería de trofeos
Joshua Trupin

HAN PASADO TRES DÉCADAS de mi vida sin que haya ganado nada. Los décimos de lotería que compro nunca incluyen los números acertados. Cuando me como un yogur de los que suelen tener premio, siempre dice "Lo siento, inténtelo de nuevo". En las quinielas siempre escojo equipos perdedores.
Teniendo en cuenta este historial tan poco afortunado, no es de extrañar que me invada una fuerte emoción cuando realmente gano algo. La revista TechNet Magazine acaba de ser galardonada con cuatro premios por la Sociedad para la comunicación técnica (STC). Es maravilloso que se reconozca todo el esfuerzo que ponemos en cada número. Me gustaría dedicar un momento para agradecer a nuestro personal y a los autores su gran contribución.
El número de marzo/abril de 2006 ofrecía una guía clara y accesible de Active Directory en forma de póster rompecabezas. Tuvo mucho éxito; de hecho, aún recibimos a diario solicitudes para obtener una copia. La STC concedió a nuestro póster el premio de excelencia para guías de software.
Dos de nuestros artículos también recibieron menciones. El artículo de agosto de 2006 "Playing with Exchange in a Sandbox", de Greg Taylor y Simon Shepherd, y el de mayo/junio de 2006 "Deconstructing Common Security Myths", de Jesper Johansson y Steve Riley, han recibido premios de mérito de la STC.
La propia revista TechNet Magazine recibió el premio de excelencia para &revistas profesionales. No podría estar más orgulloso de este reconocimiento, y este sentimiento se hace extensible a todas las personas que integran nuestro equipo.
No se preocupe, no nos vamos a dormir en los laureles. En este número, Mark Russinovich analiza en mayor profundidad los cambios del kernel de Windows Vista, información clave de gran valor para cualquier profesional de TI que trabaje en la implementación de equipos de escritorio o en servicios de soporte técnico. Este mes también le ofrecemos un estudio más exhaustivo de SQL Server, desde el uso de metadatos de índice y la partición de tablas hasta opciones de alta disponibilidad y sugerencias para los clústeres.
En One TechNet Magazine Plaza nunca nos tomamos un momento de respiro... ... gracias a las fechas de entrega. Sin embargo, a veces nos gusta cambiar de aires. Estaremos en Microsoft TechoEd en Orlando del 4 al 8 de junio de 2007 (consulte microsoft.com/teched). Visítenos y conozca a algunos de los editores y autores premiados de TechNet Magazine. Tenemos algunos obsequios y hemos planeado cosas divertidas, por lo que nunca se sabe: es posible que con nosotros también se convierta en ganador. Joshua Trupin
Mi agradecimiento a los siguientes expertos técnicos de Microsoft: Vijay Bharadwaj, Paul Bowden, Elden Christensen, Manish Karla, Michael Murgolo, Rajeev Nagar, John Peng, Mark Russinovich, Abraham Samuel, Mark Scurrell, Jim Truher, George Walters y Buck Woody.

Joshua Trupin


 Caja de herramientas: Nuevos productos para profesionales de TI
Caja de herramientas
Nuevos productos para profesionales de TI
Greg Steen

Administración de sincronización de la red
ViceVersa Pro
www.tgrmn.com

A menos que su infraestructura esté compuesta por un único equipo, probablemente tiene que mover archivos entre los entornos todo el tiempo. Desde los archivos de registro, pasando por las versiones de aplicaciones, hasta las copias de seguridad de base de datos, la información siempre está en movimiento por la red. Y es importante saber lo que necesita copiar para mantener entornos diferentes en sincronización. Para la mayoría de los profesionales de TI, el desplazamiento de estos archivos entre entornos de forma manual no es una opción, por no mencionar que suele ser mala idea, ya que puede originar sincronizaciones incorrectas.
ViceVersa Pro de TGRMN Software permite programar y automatizar fácilmente estas tareas. La aplicación ofrece cuatro modos de copia diferentes. La función de sincronización básica ofrece una sincronización de origen a destino, mientras que el modo de sincronización avanzada ofrece una sincronización bidireccional de archivos y directorios con seguimiento de archivos. Los otros dos modos son la copia de seguridad (que reflejará el origen) y la consolidación.
El modo de copia de seguridad refleja el origen en el destino al agregar y eliminar los archivos del destino, pero puede elegir también la réplica de archivos, que sólo copiará archivos en el destino. Esto podría resultar muy útil si tiene usuarios que eliminan cosas inesperadamente. La sincronización bidireccional se lleva a cabo como sugiere su nombre e incluye, además, el seguimiento de eliminación y conflictos. Si un archivo cambia en el origen y el destino antes de la siguiente sincronización, se observa un conflicto y se puede conciliar el problema manualmente. El método de consolidación es semejante a la sincronización bidireccional, pero no realiza un seguimiento de conflictos o eliminaciones.
Protéjase frente a errores de copia y pérdida de datos.
Protéjase frente a errores de copia y pérdida de datos. (Hacer clic en la imagen para reducirla)
Protéjase frente a errores de copia y pérdida de datos.
Protéjase frente a errores de copia y pérdida de datos. (Hacer clic en la imagen para ampliarla)
ViceVersa Pro puede ayudar con las tareas de envío de registros mediante las características de cifrado y compresión de archivos integradas del modo de copia de seguridad. La aplicación comprime los archivos de origen en formato gzip estándar que, a su vez, puede estar protegido por contraseña.
La aplicación incluye también una útil comparación de archivos integrada aunque, si lo prefiere, también puede establecer que ViceVersa Pro utilice un programa de comparación de archivos externo. Con el fin de ofrecer compatibilidad con un entorno global, ViceVersa acepta caracteres Unicode y rutas de acceso que superen los 256 caracteres. La aplicación también cuenta con compatibilidad integrada para la sincronización con la hora de Internet, de modo que puede establecerla para que señale a su equipo NTP local o a cualquier servidor NTP externo si admite solicitudes de salida del entorno en el que va a usar la aplicación.
A veces, el uso del ancho de banda puede convertirse en una preocupación, sobre todo si el tráfico pasa por una red privada virtual o una red WAN. En este caso, ViceVersa permite reducir la cantidad de ancho de banda que utiliza la aplicación en cada tarea de sincronización. Esto puede ayudar a garantizar la respuesta del nivel de producción de los servidores de los que copia o a los que copia. O, si lo prefiere, puede establecer un umbral máximo de utilización de CPU para garantizar también la disponibilidad en el servidor cuando se ejecute la aplicación.
ViceVersa Pro protege frente a errores de copia y pérdida de datos gracias a un algoritmo de copia segura. La aplicación también lleva a cabo comprobaciones de redundancia cíclicas con el fin de garantizar la integridad de los datos. Puede programar que las tareas de sincronización se ejecuten en casi cualquier intervalo, incluido en modo de tiempo real (esto sincronizará los archivos a medida que se vayan agregando o eliminando de las carpetas de sincronización).
Otra interesante característica de ViceVersa Pro es que la interfaz de usuario permite obtener una vista preliminar de todas las operaciones antes de ejecutarlas. Esto le ayudará a asegurarse de copiar lo que quiere copiar (no hay nada como acabar con un par de gigas de archivos de registro en el directorio del sistema).
En definitiva, si está buscando una herramienta de sincronización de funcionalidad completa y bajo precio, ViceVersa Pro puede ser lo que necesita.
Precio: 59,95 dólares por usuario.

Administración de discos del sistema
Partition Manager 8.0 Professional Edition
www.partition-manager.com/corporate/professional
Si está buscando una aplicación que le ayude a administrar sus discos de sistema, la aplicación Partition Manager 8.0 Professional Edition de Paragon Software Group definitivamente merece su atención.
Como función principal, esta aplicación basada en Windows® proporciona una interfaz intuitiva basada en asistente que permite, de forma fácil, crear, eliminar, modificar y formatear particiones de disco duro, ya se encuentren en formato FAT16/32, NTFS, Ext2/3 o HPFS. También puede cambiar el tamaño de las particiones existentes o moverlas de un disco a otro.
Además de todo esto, puede realizar conversiones entre tipos de sistemas de archivos, por ejemplo, a NTFS desde FAT16/32, o de Ext2 a Ext3 y viceversa. Al copiar una partición de un disco a otro, el tamaño de la partición cambiará automáticamente para ajustarse al tamaño del disco, lo que puede resultar práctico para ampliar la unidad de datos del sistema sin tener que copiar todos los archivos de forma manual. Una característica útil de esta versión es la capacidad de hacer un "hot resize" (cambio de tamaño inmediato), que permite aumentar el tamaño de una partición NTFS activa sin tener que reiniciar Windows.
Aumente el tamaño de una partición NTFS activa, sin reiniciar.
Aumente el tamaño de una partición NTFS activa, sin reiniciar. (Hacer clic en la imagen para reducirla)
Aumente el tamaño de una partición NTFS activa, sin reiniciar.
Aumente el tamaño de una partición NTFS activa, sin reiniciar. (Hacer clic en la imagen para ampliarla)
Otra característica útil de esta versión es que permite convertir discos dinámicos a discos básicos en Windows 2000, Windows XP y Windows Server® 2003. Partition Manager es compatible con discos de al menos 500 GB (límite de prueba de Paragon; no se trata de un límite físico real) así como con unidades conectadas a USB y FireWire. Partition Manager es compatible con discos duros PATA (IDE), SATA y SCSI.
Partition Manager permite crear un CD de recuperación (o un DVD o incluso un disquete) para restaurar el sistema después de un error de disco catastrófico. O, si elimina por error una partición pero el sistema sigue activo, puede deshacer la eliminación a través de la interfaz. Incluso puede cambiar el tamaño de clúster del disco para mejorar el rendimiento. La aplicación también proporciona una vista de ejecución previa virtual que permite evaluar los cambios en el disco antes de llevarlos a cabo físicamente.
También puede mejorar un disco duro del sistema con Partition Manager 8.0. La aplicación permite copiar una partición o toda la imagen de disco duro en un disco nuevo, y adapta su tamaño a la partición de destino.
Por último, Partition Manager presenta un desfragmentador de disco incrustado que puede desfragmentar unidades de disco que estén completas hasta el 99 por ciento, aunque es de esperar que tome medidas antes de que una unidad alcance este estado.
Precio: 99,95 dólares por la versión Professional Edition.

Agregue finalización automática a su editor SQL.
SQL Prompt: IntelliSense para SQL
www.red-gate.com/products/SQL_Prompt/index.htm

Es tentador pensar que todas las bases de datos se crean y estructuran con convenciones lógicas de nomenclatura de forma normalizada; sin embargo, todos sabemos que ese no es el caso. Al desempeñar la función de administrador del sistema o de la base de datos, suelo tener que tomar como referencia la estructura de tabla al crear o ejecutar consultas, y aún más si actúo como desarrollador.
Aunque SQL Server™ Management Studio for SQL Server 2005 nos ha facilitado la vida gracias a la integración de un explorador de objetos en la sección de vista de árbol de la interfaz, aún sigo esperando esa característica a la que tanto me he acostumbrado con el IDE de Visual Studio®: IntelliSense®. Afortunadamente, Red-Gate Software ha creado SQL Prompt, que proporciona una finalización automática de los editores de Microsoft SQL Server.
La aplicación se ejecuta en la barra de tareas y detecta cuándo empieza a trabajar en un editor. Primero, SQL Prompt solicitará la información de conexión de la base de datos, de modo que pueda almacenar en caché todos los datos de objetos. Esto acelera el rendimiento y reduce la sobrecarga, aunque si modifica constantemente objetos en la instancia de la base de datos, tendrá que acordarse de limpiar la memoria caché (una acción sencilla en dos pasos) para ver los cambios que haya realizado en la lista de mensajes.
Además de los IDE de Visual Studio, Enterprise Manager, Query Analyzer y SQL Server Management Studio, SQL Prompt también se integra de forma directa con UltraEdit y EditPlus 2. En la ficha Options (Opciones) de la interfaz de usuario de configuración, podrá indicar qué palabras clave SQL desea que desencadenen la lista de candidatos (por ejemplo, FROM, JOIN y EXEC). El desencadenamiento de SQL Prompt en SQL JOINS incluso le proporcionará su instrucción ON (siempre y cuando tenga referencias establecidas o el nombre de los campos sea el mismo). Aquí también puede establecer accesos directos de texto para insertar fragmentos de código. Por ejemplo, la aplicación establece "ssf" seguido de la tecla Tab para deletrear "SELECT * FROM". También puede hacer que SQL Prompt cambie automáticamente las palabras clave SQL a mayúsculas a medida que escribe. Sin duda alguna, esto y los fragmentos de código ofrecen un gran ahorro de tiempo.
En la ficha Candidates (Candidatos) de la interfaz de usuario de configuración, puede establecer si desea que SQL Prompt utilice nombres de columna completos, agregue un prefijo con la información de propietario/esquema o coloque los nombres entre corchetes. Además, podrá establecer qué tipos de funciones SQL desea que aparezcan en la lista de candidatos. Si utiliza SQL, puede que desee incluir esta herramienta en su repertorio.
SQL Prompt seguirá siendo gratuita hasta la versión 3.0 (en el momento de la redacción de este artículo, se encuentra en fase beta final). El precio de la versión 3.0 aún no se ha publicado.
Precio: Gratis.

Calcule sin dificultades los tamaños de página.
Atomic Web Page Size Calculator
www.info-pack.com/pagesize
El ancho de banda del usuario final sigue en aumento y las nuevas tecnologías permiten ofrecer contenido web de forma más rápida; sin embargo, el tamaño de página continúa siendo importante. Todo esos bytes pueden suponer un gran costo de ancho de banda en el caso de sitios con mucho tráfico.
La utilidad Atomic Web Page Size Calculator de Info-pack.com le ofrece una forma sencilla y rentable de comprobar el tamaño de las páginas de su sitio web. Lo único que tiene que hacer es escribir la dirección URL de la página cuyo tamaño desea comprobar. El programa obtendrá acceso a ella y calculará el tamaño de todos los elementos, incluida cualquier imagen de referencia externa (elementos que quizás no aparezcan en los registros web de su domino principal).
No pierda de vista el costo del ancho de banda.
No pierda de vista el costo del ancho de banda. (Hacer clic en la imagen para reducirla)
No pierda de vista el costo del ancho de banda.
No pierda de vista el costo del ancho de banda. (Hacer clic en la imagen para ampliarla)
La calculadora es compatible con archivos JavaScript, de imágenes y páginas, así que podrá obtener datos acerca de la mayoría de los recursos de página. La aplicación también le avisará cuando encuentre un recurso 404 "roto". Cuando haya obtenido la información sobre el tamaño de la dirección URL especificada, haga clic en el botón Report (Informe) para consultar el desglose del tamaño y los cálculos del tiempo que se tardará en descargar la página a distintas velocidades de conexión.
Sería estupendo si la aplicación pudiera ocuparse de varias direcciones URL al mismo tiempo, pero quizás esto se incluirá en una futura versión. Si busca una manera rápida de comprobar el tamaño de las páginas de su equipo de desarrollo, esta aplicación puede ser lo que busca.
Precio: 19,95 dólares directo.

Escriba a Caja de herramientas
Si tiene una herramienta o utilidad favorita que desearía ver comentada aquí, póngase en contacto con el autor en tntools@microsoft.com.
Greg Steen es un profesional emprendedor y entusiasta de la tecnología. Siempre está buscando nuevas herramientas y métodos para ayudar a simplificar las operaciones y el desarrollo para los profesionales de TI.


 Utility Spotlight: SyncToy
Utility Spotlight
SyncToy
Jay Munro
Descargar el código de este artículo: SynctToy (971KB)

UN DOLOR DE CABEZA QUE ataca a los profesionales de TI, los administradores de red y el personal del departamento de soporte es la llamada de un usuario cuyo equipo se va al traste sin una copia de seguridad. La tarea de conseguir que incluso los más espabilados guarden su trabajo en la red en lugar de hacerlo de forma local puede resultar difícil. SyncToy puede ser de gran ayuda.
Diseñado originalmente para sincronizar fotografías digitales entre la cámara, el equipo y las unidades externas, SyncToy es una manera flexible y segura de realizar copias de seguridad de casi cualquier clase de archivo. SyncToy se ejecuta en Windows Vista™, así como en Windows® XP y Windows Server® 2003, y trabaja con unidades locales, externas o USB, en la red o en recursos compartidos de grupos de trabajo.
SyncToy utiliza una arquitectura de carpetas emparejadas donde debe especificar un directorio izquierdo y derecho. Puede crear tantas parejas de carpetas como desee y sincronizar una o todas ellas con un solo clic de botón. Para crear una pareja de carpetas, utilizará un asistente rápido de cuatro pasos, y deberá escribir o pegar una ruta de acceso, o buscar una ubicación para las carpetas izquierda y derecha. SyncToy admite nombres de archivo UNC (como \MyServer\Joe_smith\backup), así como rutas de acceso y asignaciones de unidades locales (E:\doc_backup). Una vez que se han especificado las rutas de acceso, debe elegir una de las cinco acciones que SyncToy va a realizar al comparar las carpetas.
Sync (Sincronizar) Copia los archivos nuevos y actualizados en ambas direcciones. Si elimina un archivo en una carpeta o cambia su nombre, dicha acción se replica en la otra.
Echo (Eco) Copia los archivos nuevos y actualizados, elimina archivos y cambia su nombre sólo de la carpeta izquierda a la derecha.
Subscribe (Suscribir) Copia los archivos actualizados de la derecha a la izquierda, y sólo si el archivo ya existe en la izquierda. Los cambios realizados en la izquierda no se replicarán en la derecha.
Contribute (Contribuir) Copia los archivos nuevos y actualizados de la izquierda a la derecha, y omite las eliminaciones.
Combine (Combinar) Mantiene varios equipos en modo "lockstep" al copiar archivos que existen en un lado pero no el otro. Los archivos que se eliminan o cambian de nombre en cualquiera de ambos lados no se ven afectados ni se replican.
Cuando seleccione la acción, escoja un nombre descriptivo para la pareja de carpetas y ya habrá terminado. Actualmente, SyncToy no permite editar las rutas de acceso ni cambiar nombres una vez que se ha creado la pareja de carpetas: si comete un error, seleccione la pareja de carpetas, haga clic para eliminar y vuelva a crearla. Puede establecer varias opciones, por ejemplo, puede elegir los archivos y los subdirectorios que se van a incluir y si desea guardar los archivos sobrescritos en la papelera de reciclaje (opción activada de forma predeterminada).
Sincronización de los archivos con SyncToy
Sincronización de los archivos con SyncToy (Hacer clic en la imagen para reducirla)
Sincronización de los archivos con SyncToy
Sincronización de los archivos con SyncToy (Hacer clic en la imagen para ampliarla)

El cuadro de diálogo principal de SyncToy muestra las parejas de carpetas a la izquierda, junto con las rutas de acceso, las opciones y las acciones para la pareja seleccionada. La opción All Folder Pairs (Todas las parejas de carpetas) incluye todas las parejas de carpetas y es posible ejecutar las funciones Preview (Vista previa) o Run All (Ejecutar todas) en las parejas seleccionadas. Como es de esperar, Preview (Vista previa) muestra el proceso como si realmente estuviese llevando a cabo la sincronización, pero no hace cambios. Sin duda, esto es útil al programar sincronizaciones desatendidas. La vista previa muestra un informe, que indica las operaciones que se habrían realizado. Si está satisfecho con el resultado, haga clic en Run (Ejecutar).
La programación no está integrada, aunque el archivo de Ayuda ofrece una orientación bastante buena para los programadores de Windows Vista y Windows XP. Es posible que los usuarios sin experiencia técnica necesiten ayuda al realizar la configuración, pero basta con hacerlo una vez, ya que todos cambios en las parejas de carpetas, las acciones y las opciones se realizan en SyncToy.
Al igual que ocurre con las demás herramientas Power Toys y aunque se ha redactado con los mismos estándares que el software de trasvase normal, la herramienta SyncToy no cuenta con soporte de Microsoft, sino que se obtiene a través de foros de comunidad y documentación. De modo que tendrá que buscarse la vida. El archivo de Ayuda está escrito para todos los niveles de uso y abarca todas las características de un modo bastante extenso. La interfaz del usuario es lo suficientemente intuitiva como para aprender los principios básicos la primera vez que se utiliza.
Así que descargue SyncToy y enseñe a sus usuarios a realizar copias de seguridad de los archivos. Seguro que todos dormirán mucho mejor.

Jay Munro es redactor del equipo de asistencia al usuario de Windows en Microsoft, especializado en Internet Explorer. Con anterioridad fue director de proyectos para los laboratorios de la revista PC Magazine.


 Preguntas y respuestas sobre SQL: Horario de verano, memoria del servidor y mucho m&#225;s
Preguntas y respuestas sobre SQL
Horario de verano, memoria del servidor y mucho más
Editado por Nancy Michell

Horario de verano
P Dado los próximos cambios del horario de verano en Estados Unidos con el fin de cumplir con la directiva Energy Policy Act 2005, ¿debo actualizar SQL Server™?
R No. En este momento no hay actualizaciones específicas de SQL Server necesarias para la compatibilidad con los cambios del horario de verano. SQL Server depende del sistema operativo subyacente para los datos relacionados con la hora, lo que significa que, si el sistema operativo informa de las fechas y horas correctas, SQL Server informará y utilizará los mismos valores. Para cumplir los próximos cambios del horario de verano, será necesario que actualice su copia de Windows®, tal como se indica en support.microsoft.com/kb/928388. Esto será necesario en todos los sistemas operativos de Windows anteriores a Windows Vista™ (que ya incluye los cambios) para cumplir con los cambios del horario de verano, incluidas las versiones con SQL Server. (Australia también está experimentando algunos cambios. Consulte support.microsoft.com/kb/912475.)

Conexión con Windows Vista
P He instalado Windows Vista y no puedo conectar con SQL Server 2005 en mi sistema. Soy administrador local y solía conectarme sin problemas. ¿Qué ha sucedido?
R Este comportamiento está previsto en Windows Vista y SQL Server 2005 sin Service Pack 2 (SP2). Windows Vista cuenta con un modelo de seguridad nuevo (Control de cuenta de usuario) que, de hecho, encuentra su pertenencia al grupo de administradores locales y le pide que compruebe las operaciones que requieren privilegios administrativos. Si hace clic en el botón Permitir, sus credenciales, entre las que se incluyen el token de administrador, se envían a la aplicación. En el caso de SQL Server Management Studio (SSMS), no se le muestra un cuadro de diálogo, ya que la simple ejecución de la herramienta no requiere permisos administrativos. El problema es que, de forma predeterminada, la función de Administrador del sistema de SQL Server 2005 incluye el grupo Administradores locales del sistema operativo, que es lo que su cuenta utilizaba en el pasado para tener acceso a SQL Server. Puesto que Windows Vista no envía este permiso, no se obtiene acceso.
Se debe tener en cuenta que la ejecución de SQL Server 2005 sin SP2 no es compatible con Windows Vista y que el SP2 incluye una herramienta que agregará la cuenta automáticamente. Si aún está esperando el SP2, la corrección es bastante sencilla. Su cuenta de usuario individual de Windows se debe agregar a SQL Server, en su caso a la función de Administrador del sistema. Para esto, haga clic con el botón secundario en SQL Server Management Studio y seleccione Ejecutar como administrador. Conecte con SQL Server y agregue su cuenta de Windows a la función del Administrador del sistema. Consulte SQL Server Books Online (en inglés) para obtener más información sobre cómo funciona.

Réplica de transacciones con vistas
P Si tengo una vista publicada y la actualizo, sé que se replicará la transacción. Sin embargo, si actualizo la tabla de base de esta vista, ¿se replicará esta transacción? Del mismo modo, si tengo una tabla publicada y creo una vista de ella, y actualizo la vista en vez de la tabla de base, ¿se replicará la transacción?
R Si la tabla de base está configurada como artículo de una publicación (es decir, la tabla de base se ha configurado también para réplica), se replicará cualquier actualización de la tabla de base.
Cuándo se replica una vista, de forma predeterminada, todo lo que se replica como parte de una vista es la parte de esquema de la vista, o el código detrás de la vista, no los datos subyacentes (a menos que tenga una vista indizada). A continuación, aún sin réplica, cada vez que actualice una vista (en este caso, esto significa ejecutar una instrucción DML con la vista como objetivo), en realidad está actualizando los datos de la tabla subyacente, no la vista. Una vista es simplemente un almacenamiento lógico de una instrucción de consulta sin almacenamiento físico adjunto (de nuevo, a menos que utilice vistas indizadas).

Memoria máxima del servidor
P Tengo un equipo con Windows Server® 2003 y SQL Server 2000, con 5 GB de RAM. Digamos que utilizo el conmutador /3GB para aumentar mi espacio de direcciones virtuales de modo de usuario, el conmutador /PAE para cargar la versión de extensión de dirección física (PAE) del kernel de Windows, y establezco las extensiones de ventana de dirección (AWE) habilitadas como 1 (y habilito las páginas de bloqueo en la memoria). Con las AWE habilitadas, ¿configurará la opción de memoria máxima del servidor el tamaño de la memoria caché de datos o el tamaño de todas las memorias caché de búfer (datos, procesos, sesiones, etcétera)? Ya que sólo la memoria caché de datos puede hacer uso de la memoria asignada a las extensiones de ventana de dirección, si configuro la memoria máxima del servidor en 4 GB, ¿utilizará la memoria caché de datos únicamente 1 GB (la parte asignada por las extensiones), o puede utilizar este 1 GB adicional y continuar el uso o competir con el resto de consumidores de memoria en el espacio de direcciones estándar?
R La memoria máxima del servidor siempre limitará el tamaño del grupo de búferes; sin embargo, el único consumidor que puede utilizar la memoria asignada a las extensiones de ventana de dirección es la memoria caché de datos, nada más.
De este modo, para su primera pregunta, aun con las extensiones de ventana de dirección habilitadas, la memoria máxima del servidor sigue limitando todo el grupo de búferes, aunque los consumidores ajenos a la memoria caché de datos no utilizarán jamás la memoria asignada a las extensiones de ventana de dirección.
En el caso de la segunda pregunta, la memoria caché de datos utilizará memoria asignada a las extensiones de ventana de dirección más el resto de la memoria del grupo de búferes que considere apropiado SQL Server. No se limitará únicamente a la memoria de extensiones de ventana de dirección; resulta que es el único consumidor que puede hacer uso de la memoria de extensiones. Si no está seguro de lo que hace el conmutador /3GB, consulte Raymond Chen's blog (en inglés).

Creación de perfiles y rendimiento
P Tengo SQL Server 2005 reflejado en la producción. Al iniciar SQL Server Profiler en el equipo de base de datos y escribir los datos de traza en un archivo, se produce una caída drástica del rendimiento. ¿Por qué?
R La razón de la caída del rendimiento depende de dónde se ejecute Profiler. Si lo ejecuta interactivamente en el equipo servidor, la interfaz de usuario de Profiler consume memoria y CPU en el servidor, lo que afectará al rendimiento.
Si ejecuta Profiler interactivamente en una estación de trabajo, estará desplazando la información de eventos en toda la red. Esto afecta a la capacidad de proceso. Si esta es la misma red que usa para la creación de reflejo, comprobará que se produce una repercusión aquí también. Del mismo modo, si almacena el resultado de Profiler en un recurso compartido de red, estará desplazando los datos por toda la red y afectará de forma negativa al rendimiento.
Probablemente, la mejor manera de mitigar todo esto sea ejecutar Profiler de forma no interactiva en el servidor que ejecuta la instancia cuyo perfil se va a crear y, a continuación, dirigir el resultado a un archivo local. Aún se consumirán recursos del servidor, aunque este enfoque suele generar la menor repercusión. Esto funciona mucho mejor que la traza de Profiler (en memoria). La traza de archivos utiliza la memoria del sistema de manera más eficaz. Dispone de búferes mayores y los vacía en el disco de forma más eficaz. Tampoco depende de procesos externos (como SQL Server Profiler).
Por último, los datos de traza se escriben en un archivo de disco mientras Profiler sigue creando perfiles. El archivo de traza se comparte para que otros usuarios puedan consultar en tiempo real los datos de perfiles de forma remota. Si llama al archivo de traza interactivamente, significa que ha invocado manualmente a Profiler y que está viendo el resultado en la pantalla. Se pueden crear trazas mediante programación sin resultado visual, motivo por el que debería ejecutar las cosas de forma no interactiva.
Puede crear un recurso compartido al inicio de un directorio local para que otros usuarios puedan tener acceso a los archivos incluidos aquí (esto no suele crear problemas). Como se ha indicado anteriormente, no es buena idea enviar el resultado de traza a un archivo de un recurso compartido remoto, particularmente uno al que se tiene acceso a través de la misma canalización de red que se utiliza para la creación de reflejos.
También debe seleccionar el conjunto mínimo de eventos necesario para la investigación. Para la ubicación del archivo de traza, debería elegir la unidad de disco más rápida del sistema (preferiblemente distinta de las unidades de registro de transacciones y de base de datos de SQL Server). Si aún experimenta una degradación considerable del rendimiento, divida los eventos en dos o más trazas, cada una dirigida a un disco duro diferente. Incluso si las trazas están destinadas al mismo disco duro, podrá beneficiarse de una división, ya que cada traza contará con su propio conjunto de búferes. Consulte sp_trace_create y los temas relacionados en los libros en línea de SQL Server para obtener más información.

Problemas de clústeres
P Intento instalar SQL Server en un clúster con Windows Server 2003. Cada vez que lo intento, aparece un error que indica "El programa de instalación no pudo realizar las operaciones necesarias en los nodos del clúster". En sqlstp.log se indica:
Script file copied to '\\SERVER01\ADMIN$\SERVER01_MSSQLSERVER.iss' successfully.
Installing remote service (SERVER01)...
An error occured in the service create (SERVER01): 1069...
¿Qué puede estar sucediendo?
R Hay varias razones posibles para este error. El programa de instalación instala Windows NT® Service en todos los nodos seleccionados para administrar de forma remota el proceso de instalación en equipos individuales. Por lo tanto, tiene que ser consciente de ciertos inconvenientes que se puede encontrar.
Primero, puede que los usuarios de la cuenta de dominio tengan una directiva de grupo que rechaza el permiso de inicio de sesión como servicio. Recuerde que la directiva de dominio sobrescribe la directiva de equipo local. Cerciórese de que utiliza una cuenta sin estas restricciones.
Segundo, la cuenta de inicio de sesión del equipo donde ejecuta la instalación debe tener acceso de administración en todos los nodos a causa de lo siguiente: el proceso de instalación maestro requiere el acceso remoto al Registro para todos los equipos; el programa de instalación copia cnvsvc.exe en el directorio Windows del equipo remoto; o el programa de instalación utiliza API de Windows estándar que utilizan sólo el permiso de la cuenta que ha iniciado la sesión para tener acceso a equipos remotos. Por estas razones, debe iniciar la sesión como administrador en todos los modos de forma predeterminada.

Plan de recuperación ante desastres
P Estoy planteándome utilizar la creación de reflejos de base de datos (el modo asíncrono) o el trasvase de registros para implementar mi estrategia de recuperación ante desastres para mis bases de datos de SAP. Mis sitios de producción y recuperación ante desastres tendrán una conexión de 100 Mb de ancho de banda no dedicada a la sesión de creación de reflejos. La conexión se compartirá con diferentes sesiones de creación de reflejos o incluso con otros servidores de recuperación ante desastres.
Si hay un problema de red que evita que se envíe el registro a la base de datos reflejada, ¿se volverá a intentar?
Si se suspende la sesión de creación de reflejos, ¿hay algún período de retención? Y, además de las vistas de sistema, ¿existe alguna información de registro que pueda utilizar para supervisar el tráfico de creación de reflejos y la transmisión de registros?
R Empecemos por responder la pregunta siguiente: ¿Cuál es la lógica de reintento de la creación de reflejos de base de datos? Esto puede considerarse de dos modos: Primero, si hay un problema de red temporal, el estado de la sesión de creación de reflejos se desconecta. Existe un valor de tiempo de espera de red predeterminado de 10 segundos, lo que significa que no se puede enviar un registro desde la base de datos principal a la base de datos reflejada. En dichos casos, la entidad principal se seguirá ejecutando "expuesta" y la transacción se validará en el cliente. Una vez resuelto el problema de red, la sesión de creación de reflejos volverá a intentarlo automáticamente sin intervención del usuario. Intentará actualizarse usando los registros; primero se sincronizarán los socios y, a continuación, se sincronizará el estado.
Segundo, si se produce un problema de puesta al día, el estado de la sesión de creación de reflejos se suspende. Un problema de puesta al día significa que la base de datos reflejada no puede validar los registros en la base de datos. Los problemas de puesta al día suelen estar causados principalmente por un archivo físico que no se encuentra o por espacio en disco insuficiente. En dichos casos, la entidad principal se seguirá ejecutando expuesta y la transacción se validará en el cliente. Después de corregir el problema manualmente en el servidor reflejado, la sesión de creación de reflejo requiere intervención:
ALTER DATABASE <db> SET PARTNER RESUME;
Con respecto a los períodos de retención, la respuesta es que, tanto si la sesión de creación de reflejo se desconecta como si se suspende, los registros se conservarán hasta que se restaure la sesión, y se refuerzan en el reflejo todos los registros desde el momento en que se suspendió la sesión hasta el momento en que se reanudó. Básicamente, aunque la sesión de creación de reflejos se desconecte o se suspenda, el registro de la entidad principal no se puede truncar, ya que se interrumpiría la cadena de puesta al día de registros. Esto significa que el registro de la entidad principal crecerá sin límites hasta que se restaure la sesión. Por tanto, no existe límite de retención en la sesión de creación de reflejos; la única restricción real es el espacio en disco que el servidor principal tiene para almacenar el registro, ya que este no se puede truncar.
Por último, no hay archivo de registro específico que pueda utilizar para supervisar la creación de reflejos. SQL Server 2005 ofrece una herramienta de GUI denominada Monitor de creación de reflejo de la base de datos para este propósito, que permite a los administradores del sistema ver y actualizar el estado y configurar umbrales de advertencia en varias métricas clave del rendimiento. Puede obtener una alerta de esta herramienta cuando no se realice correctamente el reflejo. La principal preocupación de rendimiento relacionada con la creación de reflejos de base de datos es el procesamiento oportuno de los registros. Para obtener más información acerca de la supervisión de la creación de reflejos de base de datos, consulte el artículo en msdn2.microsoft.com/fr-fr/library/ms365781.aspx (en inglés).

Agradecimiento especial a los siguientes profesionales de TI de Microsoft por la aportación de sus conocimientos técnicos: Chad Boyd, Sandu Chirica, Alan Doby, Kaloian Manassiev, Luciano Moreira, Ivan Penkov, Sivagaminathan Rajarethinam, Deborah To, Patrick Woodward, Buck Woody, Stanley Yau y Warren Young.


 The Cable Guy: El protocolo DHCPv6
The Cable Guy
El protocolo DHCPv6
Joseph Davies

El Protocolo de configuración dinámica de host (DHCP) se diseñó para encargarse de la asignación de direcciones IP y otra información de red a los equipos, de forma que puedan comunicarse en la red automáticamente. Con una red IPv6, en realidad no necesita DHCP para configurar direcciones, aunque puede haber buenas razones para utilizarlo. DHCP para IPv6 (DHCPv6) puede
proporcionar configuración de direcciones con estado o configuración sin estado a hosts de IPv6. Los hosts de IPv6 pueden utilizar varios métodos de configuración de direcciones:
La configuración automática de direcciones sin estado se utiliza para configurar las direcciones locales de vínculos y las direcciones no locales de vínculos adicionales mediante el intercambio de mensajes de solicitación de enrutador y anuncio de enrutador con los enrutadores vecinos.
La configuración automática de direcciones con estado se utiliza para configurar direcciones no locales de vínculos a través del uso de un protocolo de configuración como DHCP.
Un host de IPv6 realiza la configuración de direcciones sin estado automáticamente y utiliza un protocolo de configuración (como DHCPv6) en el mensaje de anuncio de enrutador basado en las siguientes marcas y enviado por un enrutador vecino:
Marca de configuración de dirección administrada, o marca M. Si se establece en 1, esta marca indica al host que utilice un protocolo de configuración para obtener direcciones con estado.
Otra marca de configuración con estado, o marca O. Si se establece en 1, esta marca indica al host que utilice un protocolo de configuración para obtener otro tipo de configuraciones.
La combinación de los valores de las marcas M y O puede dar como resultado lo siguiente:
Tanto la marca M como la marca O se establecen en 0. Esta combinación corresponde a una red sin infraestructura DHCPv6. Los hosts utilizan anuncios de enrutador para las direcciones no locales de vínculos y otros métodos (como la configuración manual) para la configuración de otros valores.
Tanto la marca M como la marca O se establecen en 1. DHCPv6 se utiliza para ambas direcciones y otros valores de configuración. Esta combinación se conoce como DHCPv6 con estado, en la que DHCPv6 asigna direcciones con estado a hosts de IPv6.
La marca M se establece en 0 y la marca O en 1. DHCPv6 no se utiliza para asignar direcciones, sólo para asignar otros valores de configuración. Los enrutadores vecinos se configuran para anunciar prefijos de direcciones no locales de vínculos desde las que los host de IPv6 derivan direcciones sin estado. Esta combinación se conoce como DHCPv6 sin estado: DHCPv6 no asigna direcciones con estado a hosts de IPv6, sino valores de configuración sin estado.
La marca M se establece en 1 y la marca O en 0. En esta combinación, DHCPv6 se utiliza para la configuración de direcciones pero no para otros valores de configuración. Dado que los hosts de IPv6 suelen necesitar valores de configuración diferente, como direcciones IPv6 de servidores DNS, se trata de una combinación improbable.
Al igual que en DHCP para IPv4, los componentes de una infraestructura DHCPv6 están formados por clientes DHCPv6 que solicitan configuración, servidores DHCPv6 que ofrecen configuración y agentes de retransmisión DHCPv6 que transmiten mensajes entre clientes y servidores cuando los clientes se encuentran en subredes que no tienen un servidor DHCPv6.

Mensajes DHCPv6
Al igual que en DHCP para IPv4, DHCPv6 utiliza mensajes de Protocolo de datagramas de usuario (UDP). Los clientes DHCPv6 escuchan mensajes DHCP en el puerto 546 de UDP. Los agentes de retransmisión y los servidores DHCPv6 escuchan mensajes en el puerto 547 de UDP. La estructura de mensajes DHCPv6 es mucho más sencilla que la de DHCP para IPv4, que tuvo sus orígenes en el protocolo BOOTP para ofrecer compatibilidad con estaciones de trabajo sin disco. En la figura 1 se muestra la estructura de los mensajes DHCPv6 enviados entre cliente y servidor.
Figura 1 Mensajes DHCPv6 entre cliente y servidor
Figura 1 Mensajes DHCPv6 entre cliente y servidor (Hacer clic en la imagen para reducirla)
Figura 1 Mensajes DHCPv6 entre cliente y servidor
Figura 1 Mensajes DHCPv6 entre cliente y servidor (Hacer clic en la imagen para ampliarla)
El campo de tipo de mensaje de 1 byte indica el tipo de mensaje DHCPv6. El campo de identificador de transacción de 3 bytes viene determinado por un cliente y se utiliza para agrupar los mensajes de un intercambio de mensajes DHCPv6. Después del campo de identificador de transacción, se utilizan las opciones DHCPv6 para indicar las direcciones y la identificación de servidor y cliente, además de otros valores de configuración. Para obtener una lista de opciones DHCPv6 definidas, consulte RFC 3315, como se indica en la barra lateral "Recursos RFC de DHCPv6".
Las opciones DHCPv6 tienen un formato de tipo-longitud-valor (TLV). En la figura 2 se muestra la estructura de las opciones DHCPv6.
El campo de código de opción de 2 bytes indica una opción específica. El campo de longitud de opción de 2 bytes indica la longitud del campo de datos de opción en bytes. El campo de datos de opción contiene los datos de la opción.
Existe una estructura independiente de mensajes correspondiente a los mensajes intercambiados entre agentes de retransmisión y servidores para registrar información adicional. En la figura 3 se muestra la estructura de estas clases de mensajes.
Figura 2 Estructura de opciones DHCPv6
Figura 2 Estructura de opciones DHCPv6 (Hacer clic en la imagen para reducirla)
Figura 2 Estructura de opciones DHCPv6
Figura 2 Estructura de opciones DHCPv6 (Hacer clic en la imagen para ampliarla)
El campo de número de saltos de 1 byte indica el número de agentes de retransmisión que han recibido el mensaje. Un agente de retransmisión receptor puede descartar el mensaje si excede el número de saltos máximo configurado. El campo de dirección del vínculo de 16 bytes contiene una dirección no local de vínculos que se asigna a una interfaz conectada a la subred en que está ubicado el cliente. Desde el campo de dirección del vínculo, el servidor puede determinar el ámbito de dirección correcto desde el que asignar una dirección. El campo de dirección del homólogo de 16 bytes contiene la dirección IPv6 del cliente que envió originalmente el mensaje o del agente anterior que retransmitió el mensaje. Después de este campo se encuentran opciones DHCPv6 que incluyen la opción de mensaje de retransmisión, que contiene el mensaje que se va a retransmitir, además de otras opciones. La opción de mensaje de retransmisión ofrece una encapsulación de los mensajes que se están intercambiando entre el cliente y el servidor.
No existen direcciones de difusión definidas para IPv6. Por lo tanto, el uso de la dirección de difusión limitada para algunos mensajes DHCPv4 se ha reemplazado por el uso de la dirección All_DHCP_Relay_Agents_and_Servers de FF02::1:2 para DHCPv6. Por ejemplo, un cliente DHCPv6 que intenta descubrir la ubicación del servidor DHCPv6 en la red envía un mensaje de petición desde su dirección local de vínculos a FF02::1:2. Si existe un servidor DHCPv6 en la subred del host, recibe el mensaje de petición y envía una respuesta apropiada. Más comúnmente, un agente de retransmisión DHCPv6 en la subred del host recibe el mensaje de petición y lo reenvía a un servidor DHCPv6.
Figura 3 Estructura de mensajes entre el retransmisor y el servidor
Figura 3 Estructura de mensajes entre el retransmisor y el servidor (Hacer clic en la imagen para reducirla)
Figura 3 Estructura de mensajes entre el retransmisor y el servidor
Figura 3 Estructura de mensajes entre el retransmisor y el servidor (Hacer clic en la imagen para ampliarla)

Intercambio de mensajes con estado
Un intercambio de mensajes con estado de DHCPv6 para obtener configuración y direcciones IPv6 (cuando las marcas M y O de un anuncio de enrutador recibido están establecidas en 1) se compone generalmente de los siguientes mensajes:
  • Un mensaje de petición enviado por el cliente para ubicar los servidores.
  • Un mensaje de anuncio enviado por un servidor para indicar que puede ofrecer direcciones y configuración.
  • Un mensaje de solicitud enviado por el cliente para solicitar direcciones y configuración desde un servidor específico.
  • Un mensaje de respuesta enviado por el servidor solicitado que contiene direcciones y configuración.
Si existe un agente de retransmisión entre el cliente y el servidor, el agente envía mensajes de retransmisión-reenvío de servidor que contienen los mensajes de petición y solicitud encapsulados del cliente. El servidor envía los mensajes de retransmisión-respuesta del agente de retransmisión que contienen los mensajes de anuncio y respuesta encapsulados para el cliente. Para obtener una lista completa de mensajes DHCPv6, consulte la figura 4.
Figure 4 Mensajes DHCPv6 (Close Figure 4)

Mensaje DHCPv6 | Descripción | DHCP equivalente para mensaje IPv4
Pedir | Enviado por un cliente para ubicar servidores. | DHCPDiscover
Anunciar | Enviado por un servidor en respuesta a un mensaje de petición para indicar disponibilidad. | DHCPOffer
Solicitar | Enviado por un cliente para solicitar configuración o direcciones de un servidor específico. | DHCPRequest
Confirmar | Enviado por un cliente a todos los servidores para determinar si la configuración de un cliente es válida para el vínculo conectado. | DHCPRequest
Renovar | Enviado por un cliente a un servidor específico para ampliar la duración de las direcciones asignadas y obtener una configuración actualizada. | DHCPRequest
Volver a enlazar | Enviado por un cliente a cualquier servidor si no se recibe una respuesta al mensaje de renovación. | DHCPRequest
Responder | Enviado por un servidor a un cliente específico en respuesta a un mensaje de petición, solicitud, renovación, nuevo enlace, solicitud de información, confirmación, liberación o rechazo. | DHCPAck
Liberar | Enviado por un cliente para indicar que el cliente ya no utiliza una dirección asignada. | DHCPRelease
Rechazar | Enviado por un cliente a un servidor específico para indicar que la dirección asignada se encuentra ya en uso. | DHCPDecline
Volver a configurar | Enviado por un servidor a un cliente para indicar que el servidor tiene una configuración nueva o actualizada. De este modo, el cliente envía un mensaje de renovación o solicitud de información. | N/A
Solicitar información | Enviado por un cliente para solicitar la configuración (pero no direcciones). | DHCPInform
Retransmitir-reenviar | Enviado por un agente de retransmisión para reenviar un mensaje a un servidor. Contiene un mensaje de cliente encapsulado como la opción de retransmisión-mensaje de DHCPv6. | N/A
Retransmitir-responder | Enviado por un servidor para enviar un mensaje a un cliente a través de un agente de retransmisión. Contiene un mensaje de servidor encapsulado como la opción de retransmisión-mensaje de DHCPv6. | N/A

Intercambio de mensajes sin estado
Un intercambio de mensajes sin estado DHCPv6 para obtener sólo la configuración (cuando la marca M está establecida en 0 y la marca O en 1, en un anuncio de enrutador recibido) se compone generalmente de los siguientes mensajes: un mensaje de información-solicitud enviado por el cliente DHCPv6 para solicitar configuración de un servidor y un mensaje de respuesta enviado por un servidor que contiene la configuración solicitada.
En el caso de una red IPv6 con enrutadores configurados para asignar prefijos de direcciones sin estado a hosts de IPv6, el intercambio DHCPv6 de dos mensajes se puede utilizar para asignar servidores DNS, nombres de dominio DNS y otros valores de configuración que no se incluyen en el mensaje de anuncio de enrutador.

Compatibilidad de DHCPv6 en Windows
Windows Vista™ y la versión siguiente de Windows Server®, con el nombre en código "Longhorn", incluyen un cliente DHCPv6. Este cliente DHCPv6 intenta la configuración basada en DHCPv6 en función de los valores de las marcas M y O en los mensajes de anuncio de enrutador recibidos. Por lo tanto, para utilizar DHCPv6, debe configurar agentes de retransmisión y servidores DHCPv6 con el fin de atender cada subred IPv6 y configurar así los enrutadores IPv6 para establecer estas dos marcas en sus valores apropiados. Si existen varios enrutadores de anuncio para una subred determinada, se deben configurar para anunciar los mismos prefijos de direcciones sin estado y los valores de las marcas M y O. Los hosts de IPv6 con Windows® XP o Windows Server 2003 no incluyen un cliente DHCPv6 y, por tanto, omiten los valores de las marcas M y O en los anuncios de enrutador recibidos.
Puede configurar un enrutador IPv6 con Windows Vista o Windows Server "Longhorn" para establecer la marca M en 1 en los anuncios de enrutador con el comando "netsh interface ipv6 set interface InterfaceName managedaddress=enabled". De forma parecida, puede establecer la marca O en 1 en los anuncios de enrutador con el comando "netsh interface ipv6 set interface InterfaceName otherstateful=enabled".
La versión Beta 2 de Windows Server "Longhorn" es compatible con un agente de retransmisión DHCPv6 y la configuración sin estado DHCPv6 con el servicio de servidor DHCP. Puede configurar el servicio de servidor DHCP para que las opciones DHCPv6 se distribuyan a todos los clientes DHCPv6 en el intercambio de dos mensajes DHCPv6 descrito anteriormente. Microsoft tiene planes de ofrecer compatibilidad para el uso de DHCPv6 con estado, incluida la capacidad de crear ámbitos de direcciones IPv6 en el complemento DHCP, en la versión Beta 3 de Windows Server "Longhorn".
Recursos RFC de DHCPv6
RFC seleccionados y relacionados con DHCPv6:
  • RFC 3315 Dynamic Host Configuration Protocol for IPv6 (DHCPv6) (en inglés)
  • RFC 2462 IPv6 Stateless Address Autoconfiguration (en inglés)
  • RFC 3633 IPv6 Prefix Options for DHCP version 6 (en inglés)
  • RFC 3646 DNS Configuration Options for DHCPv6 (en inglés)
  • RFC 3736 Stateless DHCP Service for IPv6 (en inglés)

Joseph Davieses escritor técnico en Microsoft y ha enseñado y escrito acerca de temas de red de Windows desde 1992. Ha escrito cinco libros para Microsoft Press y es el autor de la columna mensual Cable Guy de TechNet.


 Windows PowerShell: El poder de las variables
Windows PowerShell
El poder de las variables
Don Jones

Si trabaja con un lenguaje de secuencias de comandos basado en Windows, como VBScript o KiXtart, estará acostumbrado a variables que no son más que un tipo de mecanismo de almacenamiento de datos. También Windows PowerShell tiene variables, pero son mucho más eficaces que las variables de los lenguajes de secuencias de comandos antiguos. Las variables de Windows
PowerShell se asignan realmente a clases subyacentes en Microsoft ® .NET Framework. Y, en Framework, las variables son objetos, lo que significa que pueden almacenar datos y también manipularlos de muchas maneras. De hecho, las sólidas capacidades de las variables de Windows PowerShell™ son la razón de que el lenguaje de secuencias de comandos de Windows PowerShell no contenga funciones intrínsecas de manipulación de los datos. Estas funciones no son necesarias, dado que las propias variables ya proporcionan la funcionalidad.

Declaración de variables
Aunque el cmdlet New-Variable de Windows PowerShell permite declarar una variable y asignarle un valor inicial, no tiene que usar el cmdlet. En su lugar, puede crear una variable nueva directamente asignándole simplemente un valor:
$var = "Hello"

en Windows PowerShell, los nombres de variable siempre comienzan con un símbolo de dólar ($) y pueden contener una combinación de letras, números, símbolos o incluso espacios (aunque si usa espacios, necesitará poner la variable entre corchetes, por ejemplo, ${My Variable} = "Hello"). En este ejemplo, se ha creado una nueva variable denominada $var y se le ha asignado el valor inicial de "Hello". Como en este caso el valor es una cadena de caracteres, Windows PowerShell usará el tipo de dato String para almacenar el valor. En .NET Framework, esta es la clase System.String, que probablemente tenga integrada mayor funcionalidad que ningún otro tipo de variable. Por ejemplo, si deseo ver una versión en minúsculas del valor en $var, puedo hacer esto:
PS C:\> $var.ToLower()
hello
PS C:\>
El método ToLower está integrado en la clase System.String, y produce una representación en minúsculas del valor de la cadena. Si bien, no cambia el contenido real de la variable $var. Para ver una lista completa de todo lo que es capaz de hacer la clase System.String, canalice una variable de cadena al cmdlet Get-Member, por ejemplo:
$var | get-member
En la figura 1 se muestra el resultado, que incluye un par de docenas de métodos usados para manipular cadenas. Casi toda la funcionalidad proporcionada por las funciones de manipulación de cadenas de VBScript la proporcionan los métodos de la variable de cadena de Windows PowerShell.
Figura 1 El resultado de la clase System.String
Figura 1 El resultado de la clase System.String (Hacer clic en la imagen para reducirla)
Figura 1 El resultado de la clase System.String
Figura 1 El resultado de la clase System.String (Hacer clic en la imagen para ampliarla)

Muchas de las capacidades de la variable de cadena son más útiles en un contexto administrativo que las funciones de cadena en un lenguaje como VBScript. Suponga que ha escrito una secuencia de comandos que lee las rutas de Convención de nomenclatura universal (UNC) desde un archivo y hace algo con ellas. Desearía comprobar que cada ruta leída es una ruta UNC antes de intentar usarla. El método StartsWith le permite confirmar que un valor de cadena comienza con los caracteres de barra diagonal inversa necesarios que requiere una ruta UNC:
PS C:\> $path = "\\Server\Share"
PS C:\> $path.StartsWith("\\")
True
PS C:\>
Como StartsWith devuelve un valor True o False, puede usarlo en construcciones lógicas:
if ($path.StartsWith("\\")) {
 # code goes here
}
Windows PowerShell proporciona incluso un formulario de finalización automática para métodos de variables, lo que reduce la necesidad de escribir por su parte. Si $var contiene una cadena, puede escribir
$var.
y, a continuación, presionar Tab, lo que muestra el nombre del primer método para la variable $var. Al presionar de nuevo Tab se pasa al siguiente método y, al presionar Mayús+Tab, se vuelve al método anterior. De este modo, puede recorrer todos los métodos de variable disponibles hasta encontrar el deseado.

Confusión de variables
Hasta ahora, mis ejemplos han permitido a Windows PowerShell determinar el tipo de datos de mis variables. El hecho de asignar una cadena a una variable obliga básicamente a la variable a ser de la clase System.String. Por otra parte, el hecho de asignar un número a una variable tiene como resultado generalmente el que la variable se convierta en un entero (o, más específicamente, un Int32, que puede almacenar un intervalo específico de valores). Considere, por ejemplo, este caso:
PS C:\> $int = 5
PS C:\> $int | get-member

  TypeName: System.Int32
Este resultado truncado muestra que Windows PowerShell trata $int como un Int32, que tiene su propio conjunto de métodos y propiedades. Y, de hecho, presenta menos métodos y propiedades que el tipo String.
$int se convirtió en un Int32 porque el valor no estaba incluido entre comillas y porque únicamente estaba formado por dígitos. Si hubiera estado entre comillas, se habría interpretado como un System.String.
Al dejar que Windows PowerShell decida el tipo de datos que se va a usar, no siempre se obtiene el resultado deseado. Suponga que lee valores de un archivo y desea que los valores se traten siempre como cadenas. Algunos de los valores, sin embargo, quizás sólo contengan dígitos, lo que aumenta la posibilidad de que Windows PowerShell los trate como Int32 u otro tipo numérico. Esto puede causar problemas para la secuencia de comandos. Si Windows PowerShell no reconoce el valor como una cadena, entonces todos los métodos de la clase System.String no están disponibles (y la secuencia de comandos podría depender de uno de estos métodos no disponibles).
Una solución provisional podría ser obligar a Windows PowerShell a tratar una variable como un tipo determinado al declarar dicho tipo la primera vez que use la variable. Por ejemplo:
[string]$var = 5
normalmente, $var habría sido un Int32, pero aquí he obligado a Windows PowerShell a crear $var como String, lo que garantiza que pueda usar todos los métodos asociados con la clase System.String. La declaración del tipo de variable también proporciona una práctica clase de autodocumentación para el código, dado que ahora es obvio el tipo de datos que se espera que entre en $var. De hecho, me he acostumbrado a declarar siempre un tipo específico para todas mis variables, y a dejar a Windows PowerShell completamente al margen de la decisión. De esta manera, el comportamiento de mis secuencias de comandos es más previsible y, en varios casos, me ha ahorrado bastante tiempo de depuración.
Como cabría esperar, declarar las variables por la fuerza tiene repercusiones, aunque no son necesariamente malas. Tome este ejemplo, en el que no se declara el tipo de la variable:
PS C:\> $me = 5
PS C:\> $me = "Don"
La variable $me era inicialmente un Int32, pero Windows PowerShell la cambió a un String al agregar el valor "Don". Windows PowerShell puede cambiar el tipo de una variable según sea necesario, siempre que la variable no se haya establecido ya en un tipo específico.
En este ejemplo, he obligado a $me a ser un Int32 mediante el nombre de tipo [int]:
PS C:\> [int]$me = 5
PS C:\> $me = "Don"
Cannot convert value "Don" to type
"System.Int32". Error: "Input string
was not in a correct format."
At line:1 char:4
+ $me <<<< = "Don"
Luego, cuando he intentado asignarle un valor de cadena, se ha mostrado un mensaje de error. Dado que había obligado explícitamente a $me a ser un Int32, Windows PowerShell esperaba convertir la cadena "Don" en un valor entero. Pero no fue posible, ni tampoco lo fue cambiar el tipo de $me a String.

Hay tantos tipos...
Hay muchos tipos disponibles en Windows PowerShell. De hecho, puede usar cualquier tipo .NET Framework (y hay cientos de tipos disponibles). Sin embargo, Windows PowerShell define varios accesos directos para tipos de datos comunes. La figura 2 es sólo una lista parcial, que muestra 10 de los accesos directos de tipo de uso más común. Para ver una lista completa, consulte la documentación de Windows PowerShell.
Figure 2 Accesos directos comunes de tipo (Close Figure 2)

Acceso directo | Tipo de datos
[datetime] | Fecha u hora
[string] | Cadena de caracteres
[char] | Carácter único
[double] | Número flotante de precisión doble
[single] | Número flotante de precisión simple
[int] | Entero de 32 bits
[wmi] | Instancia o recopilación de Instrumental de administración de Windows (WMI)
[adsi] | Objeto de Servicios de Active Directory
[wmiclass] | Clase WMI
[Boolean] | Valor True o False
También puede declarar un tipo de variable con el nombre completo de la clase .NET Framework, de esta forma:
[System.Int32]$int = 5
Esta técnica permite usar tipos que están en .NET Framework, pero que no tienen acceso directo específico en Windows PowerShell.

Extensión de tipos
Quizás lo mejor de Windows PowerShell sea su capacidad para ampliar las capacidades de estos tipos de variables. En la carpeta de instalación de Windows PowerShell (normalmente en %systemroot\system32\windowspowershell\v1.0, aunque encontrará que la ruta de acceso es algo diferente en sistemas de 64 bits), encontrará un archivo llamado types.ps1xml. Este archivo se puede editar en Bloc de notas o en un editor XML, como PrimalScript. De forma predeterminada, la clase System.String no se incluye en la lista, aunque muchos otros tipos sí. Sin embargo, puedo agregar una nueva capacidad al tipo System.String si lo agrego al archivo types.ps1xml.
Después de realizar el cambio, debo cerrar y volver a abrir Windows PowerShell. También necesito asegurarme de que la directiva local de ejecución de secuencia de comandos admite la ejecución de secuencias de comandos sin firmar, dado que no he firmado types.ps1xml:
Set-executionpolicy remotesigned
Ahora, una vez que reinicio Windows PowerShell, puedo usar la nueva funcionalidad, de esta forma:
PS C:\> [string]$comp = "localhost"
PS C:\> $comp.canping
True
PS C:\>
Como puede ver, he agregado una propiedad CanPing a la clase System.String. Esto devuelve True o False para indicar si el equipo local puede hacer ping de la dirección contenida en la cadena. En la figura 3, advertirá que la consulta WMI usa una variable especial, $this. La variable $this representa el valor actual contenido en la cadena y el paso del contenido de la variable de cadena a la consulta WMI.
Figure 3 Extensión del tipo System.String (Close Figure 3)
<Type>
  <Name>System.String</Name>
  <Members>
    <ScriptProperty>
      <Name>CanPing</Name>
      <GetScriptBlock>
      $wmi = get-wmiobject -query "SELECT *
FROM Win32_PingStatus WHERE Address = '$this'"
      if ($wmi.StatusCode -eq 0) {
        $true
      } else {
        $false
      }
      </GetScriptBlock>
    </ScriptProperty>
  </Members>
</Type>

Dejemos que una variable haga el trabajo.
Windows PowerShell proporciona tipos de variables flexibles y con abundantes características, junto con un sistema igualmente flexible para ampliar la funcionalidad de los tipos. Estas capacidades facilitan la creación de secuencias de comandos muy eficaces. De hecho, en secuencias de comandos complejas, las variables pueden convertirse en un bloque de creación fundamental y, en muchos casos, adoptar las capacidades avanzadas que encontraría normalmente en una función más compleja.
Obtenga más información en línea.
Acompáñeme en esta serie de webcasts, celebradas el segundo martes de cada mes, donde continuaremos zambulléndonos en la rica funcionalidad de secuencia de comandos que ofrece Windows PowerShell. Visite microsoft.com/events/series/donjonesscripting.mspx (en inglés) para registrarse ya mismo.

20 de febrero de 2007 Windows PowerShell: curso básico de secuencias de comandos
Participe en esta webcast para obtener más información acerca de las variables, construcciones de lenguaje, secuencias de comandos y funciones de Windows PowerShell. En este curso de una hora, demostraremos cómo el lenguaje de secuencias de comandos de Windows PowerShell, sencillo pero efectivo, acelera la automatización administrativa de Windows ®. Exploramos también varias herramientas de terceros que facilitan en gran medida el uso de las secuencias de comandos de Windows PowerShell.

20 de marzo de 2007 Windows PowerShell: funciones, filtros y eficacia
Aprenda a crear código efectivo y modularizado en funciones y filtros de Windows PowerShell. Exploramos las eficaces reglas de ámbito de Windows PowerShell que permiten encapsular completamente funciones y filtros, y explican cómo puede volver a emplear fácilmente estos filtros y funciones en los proyectos. Demostramos también cómo puede agregar sus propias funciones personalizadas al ámbito global de Windows PowerShell, lo que facilita el ensamblado de una biblioteca de funciones útiles al alcance de su mano.

17 de abril de 2007 Windows PowerShell y el Instrumental de administración de Windows (WMI)
Windows PowerShell puede aprovechar la eficacia y la capacidad de WMI. Describimos no sólo cómo usar Windows PowerShell para tener acceso a WMI, sino también cómo transmitir objetos y recopilaciones de WMI por la canalización de Windows PowerShell. Exploramos cómo usar las propiedades y los métodos de WMI en secuencias de comandos de Windows PowerShell e ilustramos las características de seguridad y configuración subyacentes de WMI.

22 de mayo de 2007 Windows PowerShell: conversión desde VBScript
¿Desea convertir sus secuencias de comandos, o simplemente sus conocimientos, de VBScript a Windows PowerShell? Participe en esta webcast para conocer cómo. Exploramos cómo Windows PowerShell incluye todas las construcciones y las características principales de VBScript, lo que facilita la aplicación de sus conocimientos de VBScript a este nuevo entorno administrativo. Ilustramos la conversión de herramientas de VBScript al lenguaje de secuencias de comandos nativo en Windows PowerShell. Examinamos también la estructura única de Windows PowerShell y mostramos cómo empezar a usar el lenguaje de secuencias de comandos de Windows PowerShell de forma que sus esfuerzos sean más efectivos.

19 de junio de 2007 Windows PowerShell: extensiones ocultas
En esta webcast, exploramos cómo Windows PowerShell usa la eficacia y flexibilidad de .NET Framework para ocuparse de los datos, y proporciona centenares de funciones integradas para administrar cadenas, fechas y otros tipos de datos. Pero, ¿sabía que puede ampliar estas funciones mediante secuencias de comandos de Windows PowerShell? Aquí mostramos cómo crear variables de cadena que contienen no sólo un nombre de equipo, sino que, además, pueden indicar si el equipo está en funcionamiento. Aprenda a crear variables de fecha y hora que pueden dar formato automáticamente a sus datos sin el uso de funciones externas. Participe en esta sesión para aprender a crear todo tipo de nuevas funciones en Windows PowerShell en tan sólo unos minutos, y acelerar y facilitar la administración de Windows.

Don Jones es director de proyectos y servicios de SAPIEN Technologies y coautor de Windows PowerShell: TFM (SAPIEN Press). Póngase en contacto con Don en www.ScriptingAnswers.com.


 &#161;Hola, chicos del scripting!: Respuesta a sus preguntas acerca de las unidades organizativas... por solo 5 centavos
¡Hola, chicos del scripting!
Respuesta a sus preguntas acerca de las unidades organizativas... por solo 5 centavos
Los chicos del scripting de Microsoft
Descargar el código de este artículo: HeyScriptingGuy2007_03.exe (151KB)

P ¿Cómo puedo mostrar un cuadro de diálogo que me permita seleccionar una unidad organizativa desde Active Directory?

¿Sabe? Si a los chicos del scripting nos dieran un centavo por cada vez que nos han formulado esta pregunta, tendríamos... Bueno, realmente, sólo tendríamos 37,15 dólares, ¿no? Bueno, pero si nos dieran un centavo por cada persona que nos ha querido formular esta pregunta pero nunca ha llegado a hacerlo, tendríamos... Bueno, la cantidad no importa. A fin de cuentas, no nos hicimos chicos del scripting por el dinero. Nos hicimos chicos del scripting por la satisfacción que nos produce ayudar a la gente a realizar sus tareas de administración del sistema con mayor rapidez y facilidad.
Nota: correcto, así que técnicamente nos hicimos chicos del scripting por el dinero. Pero, luego, el jefe nos dijo, "Podríais llegar a ganar mucho dinero, pero sólo si estáis dispuestos a trabajar duro y a no producir nada que no sea material de gran calidad". En ese momento decidimos que el dinero no lo era todo.
No importa. La verdad es que a muchas personas les gustaría saber cómo mostrar un cuadro de diálogo que les permita seleccionar una unidad organizativa y, a continuación, conectarse a ella mediante una secuencia de comandos. "Nos habéis enseñado cómo mostrar un cuadro de diálogo que nos permita seleccionar carpetas", dice un mensaje de correo electrónico reciente, "y nos habéis mostrado cómo mostrar un cuadro de diálogo que nos permita seleccionar archivos. ¿Por qué no nos habéis enseñado nunca cómo mostrar un cuadro de diálogo que nos permita seleccionar una unidad organizativa de Active Directory®?"
Bien, para empezar, es cierto que hemos enseñado a la gente a mostrar un cuadro de diálogo que permita seleccionar carpetas, y justo aquí puede encontrar un ejemplo de ello. También hemos enseñado a la gente a mostrar un cuadro de diálogo que permita seleccionar archivos; si no nos cree, visite microsoft.com/technet/scriptcenter/resources/qanda/jan05/hey0128.mspx (en inglés). Estos dos artículos fueron bien recibidos, y sabemos que los usuarios están empleando esas técnicas en sus secuencias de comandos. Entonces, ¿por qué no hemos enseñado a la gente a mostrar un cuadro de diálogo que permita seleccionar unidades organizativas de Active Directory? ¿Se trata de algún tipo de conspiración de Microsoft o algo así?
Por supuesto que no. (Vaya, aguarde un minuto: eso es exactamente lo que diría alguien implicado en una conspiración, ¿no?) La verdad es que existe una buena razón para no enseñar a la gente a mostrar un cuadro de diálogo que permita seleccionar unidades organizativas de Active Directory: y es que ese cuadro de diálogo no existe. Como dicen en el béisbol, no se puede golpear lo que no se ve. Y como decimos en scripting, no se puede mostrar lo que no existe.
Así que suponemos que aquí acaba la columna de este mes. Hasta la próxima.
¡Ojalá! Según los editores de TechNet Magazine, aquí no acaba la columna de este mes. "¿Y qué, si no existe ese cuadro de diálogo como ese?", dicen. "Sois los chicos del scripting, ¿no? ¿No podéis crear un cuadro de diálogo para solucionar el tema? Pensábamos que podíais hacer cualquier cosa con secuencias de comandos."
No hace falta decir que los editores de TechNet Magazine tienen una idea equivocada de la situación. ¿Cualquier cosa con secuencias de comandos? No exactamente. La verdad es que nosotros, los chicos del scripting, sólo sabemos hacer una cosa con secuencias de comandos.
Afortunadamente, esa cosa es precisamente crear un cuadro de diálogo que permita seleccionar una unidad organizativa de Active Directory. Eche un vistazo a la figura 1.
Sí, es una secuencia de comandos bastante larga, ¿verdad? Pero, ya conoce el dicho: no se puede hacer una tortilla sin romper unos cuantos huevos. Igualmente, no se puede crear un cuadro de diálogo personalizado sin romper unos cuantos huevos (a mitad de esta columna nos entró hambre y tuvimos que hacer una pausa para tomar un aperitivo). Ahora que nuestro apetito está saciado, veamos si podemos explicar cómo funciona todo esto.
Lo que hacemos con la secuencia de comandos es usar el modelo de objetos de Internet Explorer® para crear un pseudocuadro de diálogo. Crearemos una instancia de Internet Explorer, tomaremos una recopilación de unidades organizativas de Active Directory, y luego mostraremos estas unidades organizativas en un cuadro de lista en una ventana de Internet Explorer. Esperaremos hasta que el usuario seleccione una unidad organizativa, luego tomaremos el ADsPath del elemento seleccionado, descartaremos el "cuadro de diálogo" y continuaremos desde ahí.
Nota: ¿Será el cuadro de diálogo más elaborado y bonito jamás creado? Sí, si por "elaborado y bonito" se entiende algo muy simple que ni siquiera tiene los botones de Aceptar o Cancelar. Pero, en nuestra defensa, la idea aquí es proporcionarle simplemente la estructura básica. Si desea engalanar o modificar el cuadro de diálogo, es cosa suya.
(Chico, si nos dieran un centavo por cada vez que decimos "Lo sentimos, es cosa suya", seríamos ricos. Envíe sus donativos a los chicos del scripting, a la dirección de TechNet Magazine.)
Para que la explicación de nuestra técnica quepa en el espacio que nos han asignado, tendremos que tratar superficialmente unas cuantas cosas. Por ejemplo, lo único que vamos a decir acerca del siguiente bloque de código es que crea una instancia de Internet Explorer de 350 x 400 píxeles, y que, al hacerlo, se ocultan cosas como las barras de dirección y de estado:
Set objExplorer = CreateObject( _
    "InternetExplorer.Application")

objExplorer.Navigate "about:blank"
objExplorer.ToolBar = 0
objExplorer.StatusBar = 0
objExplorer.Width= 350
objExplorer.Height = 400
objExplorer.Left = 400
objExplorer.Top = 400
objExplorer.Visible = 1
Por supuesto, todo lo que esto hace es darnos una ventana en blanco de Internet Explorer. Para obtener la lista de unidades organizativas de nuestro dominio, necesitamos realizar una búsqueda de Active Directory. Hoy no podemos explicar los pormenores de la búsqueda de Active Directory; para obtener información al respecto, eche un vistazo a nuestra serie de dos partes en el Script Center, en microsoft.com/technet/scriptcenter/resources/tales/sg0405.mspx (en inglés). Lo que podemos hacer es decirle que se trata del código que usamos para recuperar los atributos Name y ADsPath de cada unidad organizativa del dominio fabrikam.com:
objCommand.CommandText = _
    "SELECT Name, ADsPath FROM 'LDAP://DC=fabrikam,DC=com' WHERE objectCategory=
    'organizationalUnit' ORDER BY Name"
Ah, y para facilitarle las cosas, también hemos clasificado las unidades organizativas alfabéticamente por nombre. Para eso precisamente sirve la cláusula ORDER BY Name. No importa; a fin de cuentas, estamos aquí para servirle.
Cuando llamamos al método Execute, recuperamos un conjunto de registros formado por todas las unidades organizativas encontradas en fabrikam.com. Eso significa que nuestro siguiente paso es mostrar cada una de estas unidades organizativas en un cuadro de lista.
¿Cómo lo hacemos? Bien, primero necesitamos crear el cuadro de lista entero en la memoria. Para empezar, eso significa usar esta línea de código para almacenar la etiqueta <SELECT> en una variable denominada strHTML:
strHTML = "<select size = '20' name='OUList' style='width:300px'>"
¿Qué vamos a hacer con esta línea de código? Simplemente, vamos a crear un cuadro de lista HTML estándar (algo que se hace mediante la etiqueta <SELECT>). En el proceso, asignamos al cuadro de lista el nombre OUList y lo configuramos para mostrar 20 elementos a la vez y con un ancho de 300 píxeles (300px). Si sabe algo acerca de HTML, el código anterior le resultará bastante familiar.
A continuación, necesitamos agregar algunos elementos (es decir, algunas unidades organizativas) al cuadro de lista. Por una sorprendente coincidencia, sucede que nuestro conjunto de registros consta de información acerca de las unidades organizativas de nuestro dominio. Como consecuencia, podemos configurar un bucle Do Until que enlace el conjunto de registros entero, capture la información y agregue cada unidad organizativa al cuadro de lista. Dentro de este bucle, usamos el código siguiente (de nuevo, HTML estándar para agregar elementos a un cuadro de lista) para agregar cada unidad organizativa, y configurar el elemento para que el nombre de la unidad organizativa se muestre en la lista y, al hacer clic en la unidad en el cuadro de lista, el ADsPath se transmita a la secuencia de comandos:
strHTML = strHTML & "<option value= " & _
    Chr(34) & objRecordSet.Fields
    ("AdsPath").Value & Chr(34)
strHTML = strHTML & ">" & objRecordSet.
    Fields("Name").Value
¿Por qué se transmite el ADsPath a la secuencia de comandos? Muy fácil. Suponga que, en su lugar, transmitimos el nombre de la unidad organizativa. Si el nombre es Finanzas, por ejemplo, será difícil enlazar con esa unidad organizativa; a fin de cuentas, "Finanzas" por sí solo no es una cadena de enlace ADSI válida. Sin embargo, si recuperamos el ADsPath (LDAP://ou=Finance,dc=fabrikam,dc=com), entonces el enlace es pan comido. El motivo es que el ADsPath es exactamente lo que necesitamos para encontrar y conectar con un objeto de Active Directory.
Por cierto, mostramos el nombre en el cuadro de lista porque presuponemos que sus unidades organizativas tienen nombres únicos. Claro que ese podría no ser el caso; por ejemplo, las unidades organizativas Norteamérica/Investigación y Europa/Investigación tienen el mismo nombre (Investigación). Si sus unidades organizativas tienen nombres duplicados, quizás desee usar una propiedad diferente, por ejemplo, ADsPath o distinguisedName, en el cuadro de lista. Eso es algo que tendrá que decidir por sí mismo. ¡Ka-ching! ¡Otro centavo!
A propósito, observe que todavía estamos creando el cuadro de lista en la memoria: cada elemento agregado al cuadro se agrega a la variable strHTML. Todo esto es parte del plan: guardamos el código entero del cuadro de lista en la variable strHTML, luego usamos el valor de esta variable para agregar el cuadro de lista a nuestra instancia de Internet Explorer.
Una vez agregadas las unidades organizativas, usamos esta línea de código para indicar el final del cuadro de lista:
strHTML = strHTML & "</select>"
en este momento, strHTML contiene todas las etiquetas HTML necesarias para crear un cuadro de lista y, lo mejor de todo, un cuadro de lista en el que cada elemento representa una unidad organizativa en Active Directory. Eso significa que ahora podemos asignar el valor de strHTML a la propiedad InnerHTML de nuestro documento de Internet Explorer:
objExplorer.Document.Body.InnerHTML = strHTML
a su vez, eso nos proporciona un cuadro de lista en el que se muestran todas las unidades organizativas de un dominio.
Espere, espere, no se vaya; todavía no hemos terminado. Por ejemplo, necesitamos código que nos permita pausar nuestra secuencia de comandos hasta que el usuario haya seleccionado una unidad organizativa en el cuadro de diálogo; sin ello, el cuadro de lista se mostraría pero la secuencia de comandos seguiría ejecutándose, independientemente de que el usuario realice una selección. ¡Vaya! Para evitar que suceda esto, usamos este bloque de código:
Do While objExplorer.Document.Body.All.OUList.Value = ""
    Wscript.Sleep 300
Loop
Lo que estamos haciendo aquí es comprobar de manera repetida el valor de nuestro cuadro de lista (que, como quizás recuerde, hemos denominado OUList, el mismo nombre que uno de los chicos del scripting puso a su hija). Si el valor es una cadena vacía (lo que significa que no se ha seleccionado ningún elemento), pausamos simplemente la secuencia de comandos durante 300 milisegundos, luego volvemos a aplicar el bucle y comprobamos de nuevo. Esto continúa: a) para siempre, b) hasta que el usuario seleccione un elemento en el cuadro de lista, o c) hasta que el usuario cierre la ventana de Internet Explorer.
Supongamos que el usuario selecciona una unidad organizativa en el cuadro de lista. En ese caso, tomamos el valor (que, como recuerda, es el ADsPath de la unidad organizativa) y lo asignamos a una variable llamada strTargetOU:
strTargetOU = objExplorer.Document.Body.All.OUList.Value
luego, usamos el método Quit para descartar nuestra instancia de Internet Explorer, como se ilustra a continuación:
objExplorer.Quit
En este momento, casi hemos terminado. Primero miramos a ver si strTargetOU es igual a una cadena vacía:
If strTargetOU = "" Then
    Wscript.Quit
End If
en caso afirmativo, eso significa que el usuario ha cerrado Internet Explorer sin seleccionar una unidad organizativa; así, usamos el método Wscript.Quit para finalizar la secuencia de comandos. Suponemos que si el usuario no ha seleccionado una unidad organizativa, no está realmente interesado en ejecutar la secuencia de comandos. Sin embargo, si strTargetOU no es igual a una cadena vacía, devolvemos un eco del valor de la variable:
Wscript.Echo strTargetOU
naturalmente, en una secuencia de comandos real probablemente seguiría adelante y enlazaría con la unidad organizativa en Active Directory, en lugar de simplemente devolver un eco del ADsPath. Pero ya sabe lo que dicen o, al menos, lo que decimos nosotros: eso es cosa suya.
Como dijimos y, como puede ver en la figura 2, no es el cuadro de diálogo más elaborado y bonito jamás creado, pero funciona, y es más fácil que escribir un ADsPath (suponiendo que conozca el ADsPath). Además, le da la oportunidad de personalizar el código y el cuadro de diálogo según sus necesidades.
Figura 2 Cuadro de diálogo sencillo basado en una secuencia de comandos
Figura 2 Cuadro de diálogo sencillo basado en una secuencia de comandos

Si nos dieran un centavo por cada columna que hemos escrito acerca de cómo mostrar un cuadro de diálogo que permita seleccionar una unidad organizativa de Active Directory... A fin de cuentas, serían 5 centavos más de lo que nos suele pagar TechNet Magazine.
Que conste que no nos estamos quejando.

Los chicos del scripting de Microsoft trabajan para (bueno, son empleados de) Microsoft. Cuando no juegan al béisbol, ni entrenan ni lo ven (u otras actividades varias), dirigen el TechNet Script Center. Visite la página web www.scriptingguys.com (en inglés).


 Preguntas y respuestas sobre Exchange: Registros de transacciones, cmdlets, administraci&#243;n remota y m&#225;s
Preguntas y respuestas sobre Exchange
Registros de transacciones, cmdlets, administración remota y más
KC Lemson and Nino Bilic

P ¿Cuál fue la razón para reducir el tamaño del registro de transacciones a 1 MB en Microsoft® Exchange Server 2007?
R Bien, en Exchange 2007 tenemos una característica muy sofisticada llamada "trasvase de registros", que es la tecnología subyacente a un par de nuevas características: la replicación continua local (LCR) y la replicación continua en clúster (CCR). Cuando está habilitada en un nivel de grupo de almacenamiento (SG), los registros de transacciones de SG se copian del SG de producción en ejecución al SG de copia. Los registros del SG de copia se reproducen en la base de datos para mantenerse actualizados. Esto es obviamente una explicación simplificada de lo que pasa, pero se entiende.
La pega es que los registros de transacciones no se pueden enviar al SG de copia a no ser que el registro se cierre en el SG de producción. Es decir, el registro e00 (el registro actual en el primer grupo de almacenamiento) no se puede enviar hasta que no esté lleno, cerrado y su nombre haya cambiado. Además, hay configuraciones que controlan el número de registros rezagados que puede haber en este proceso, dado que hay un equilibrio entre disponibilidad y rendimiento. Estas configuraciones están disponibles cuando se ejecuta el cmdlet Set-MailboxServer en el Shell de administración de Exchange. El archivo de Ayuda ofrece detalles acerca de los parámetros exactos necesarios.
Para resumir, hemos reducido el tamaño del registro de transacciones para reducir al mínimo la cantidad de datos que pueden estar faltos de sincronización entre dos copias del grupo de almacenamiento. Esta situación se presenta cuando, por ejemplo, la unidad de disco duro de la base de datos de producción se bloquea y entonces tiene que hacer algo para iniciar el SG a partir de la copia. Los registros de transacciones más pequeños le proporcionarán una mejor oportunidad de una menor pérdida de datos.
Lo que no quiere decir que podamos garantizar que sólo vaya a perder 1 MB de datos. Si los tomamos como que son registros de transacciones, es posible que el archivo de registro de 1 MB perdido contenga, por ejemplo, una transacción COMMIT de 5 MB de datos. En este caso, perdería esos 5 MB de datos en la copia; aunque haya recibido cinco de los registros con los datos propiamente dichos, el último registro con unos poquitos datos y esa transacción COMMIT necesaria es esencial.
En última instancia, deberá valorar si este es un riesgo aceptable dadas sus necesidades empresariales. La pérdida de una pequeña cantidad de datos con un tiempo de recuperación de sólo minutos podría ser perfectamente aceptable en comparación con la alternativa de horas de trabajo de restauración. Volveremos a este tema en el futuro.

P Ahora que los registros de transacciones son más cortos, ¿se "agotarán" los registros de transacciones más rápidamente?
R Cuando hablamos de Exchange, "agotar" hace referencia a nombres de registro de transacciones. En Exchange Server 2003, los registros de transacciones se nombran de esta manera:
E nn fffff.log
nn es el prefijo que cambia de SG a SG. Dado que nn permanecerá igual durante el ciclo de vida del SG, el número de registros de transacciones con nombres exclusivos que se pueden crear para el grupo de almacenamiento es esencialmente el valor "fffff", que es aproximadamente un millón de registros (nota personal: píntate de rosa las comisuras de la boca y ríete con locura). Algunos de nuestros clientes se han tropezado con este límite en servidores de correo de uso intensivo.
A partir de Exchange Server 2000, hemos proporcionado una revisión para mostrar un evento en el registro de aplicaciones cuando nos aproximamos a este límite. Consulte support.microsoft.com/kb/896001 (en inglés) para obtener más información al respecto.
Perfecto, una vez resuelto esto, ¿qué sucede en Exchange 2007? Acabamos de decir que los registros de transacciones se han reducido de 5 MB (el tamaño en versiones anteriores de Exchange) a 1 MB (el tamaño en Exchange 2007). ¿Significa esto que basta con una quinta parte de los datos para que se agoten los nombres de registro de transacciones únicos?
La respuesta es: no. En Exchange 2007, el nombre del registro de transacciones está en este formato:
E nn ffffffff.log
Observe que tenemos "ffffffff" registros con los que trabajar, en comparación con "fffff" en versiones anteriores de Exchange. Debido a la matemática del Motor de almacenamiento extensible (ESE) interno, Exchange 2007 no puede crear todos los "ffffffff" registros. Lo que crea son "7fffffec" registros, que sigue siendo un número bastante grande (si no lo cree, convierta este número de hexadecimal a decimal).
¿Qué significa esto en la vida real? En la vida real, significa que con Exchange 2007 puede crear unas 2048 veces más registros que en versiones anteriores de Exchange. Ahora tengamos en cuenta el hecho de que el tamaño de los registros se ha reducido a una quinta parte de lo que solía ser:
2048 / 5 = 409.6
como puede ver, el nuevo esquema de nomenclatura de registros puede tratar 409 veces más datos que el anterior. Y recuerde que es por SG, no por servidor, porque cada grupo de almacenamiento tendrá un prefijo de archivo de registro diferente (como e00, e01, etc.). ¿Hemos mencionado que puede crear 50 SG por servidor en la versión Enterprise de Exchange 2007? No creemos que haya grandes posibilidades de que alguien se quede sin registros de transacciones por el momento.

P ¿Cómo puedo administrar servidores Exchange 2007 de forma remota?
R Existen unas cuantas opciones para administrar servidores Exchange 2007 de forma remota. En primer lugar, puede instalar las herramientas de administración de Exchange 2007 en un equipo distinto del servidor Exchange, siempre y cuando dicho equipo ejecute la versión de 32 o 64 bits de Windows Server® 2003 Service Pack 1 (SP1) o posterior, Windows Server 2003 R2 o Windows XP SP2 o posterior. Tenga en cuenta que la instalación de algunas funciones de servidor (acceso de cliente, buzón, borde, etc.) en hardware de 32 bits no se admite en entornos de producción, pero sí es posible instalar las herramientas de administración en un equipo de 32 bits. Asimismo, tenga en cuenta que a partir de la versión inicial de Exchange Server 2007, las herramientas de administración no se admiten en Windows Vista™.
En algunas organizaciones, el departamento de TI crea un solo servidor para que funcione como servidor de administración, e instala en él todas las herramientas de administración necesarias para los diversos productos. Luego, los administradores que necesitan usar estas herramientas obtienen acceso al servidor de administración a través de Terminal Server para realizar la administración remota. En otra configuración, los usuarios instalan las herramientas de administración en sus propios escritorios.
Desde la consola o el shell, puede realizar operaciones en los servidores de la organización. En la consola, los servidores son visibles y puede realizar operaciones en cualquiera de ellos de forma remota. En el shell, muchas de las tareas admiten una marca de filtrado de servidores por si desea realizar alguna operación en un solo servidor. Sin embargo, hay algunas excepciones para los comandos que se ejecutan de forma local, como el comando Get-NetworkConnectionInfo.

P En su última columna, nos dijo la cantidad de RAM recomendada para un servidor Exchange 2007. ¿Qué me dice del tamaño del archivo de paginación?
R Para evitar posibles errores de memoria virtual insuficiente en servidores Exchange 2007, recomendamos las siguientes pautas para determinar el tamaño del archivo de paginación del sistema.
Si el servidor tiene menos de 8 GB de RAM, entonces el tamaño mínimo del archivo de paginación debe ser la cantidad de RAM más 10 MB. De modo que, si el servidor tiene 4 GB de RAM, el tamaño mínimo sería 4 GB más 10 MB. No obstante, el tamaño recomendado del archivo de paginación es la cantidad de RAM multiplicada por 1,5. De modo que, para el servidor de 4 GB, esto sería 6 GB.
Además, el tamaño mínimo del archivo de paginación se calcula igual para un servidor con más de 8 GB de RAM, es decir, la cantidad de RAM más 10 MB. Sin embargo, el tamaño recomendado se determina de forma diferente. Básicamente, en un servidor con más de 8 GB de RAM, sólo debería tener 1,5 veces la cantidad de RAM si recibe errores de memoria virtual insuficiente con archivos de paginación más pequeños.
Tenga en cuenta que los errores mencionados en este caso no tienen nada que ver con la fragmentación de memoria virtual (un problema de los servidores Exchange 2000 y Exchange 2003). Estos son errores emergentes reales registrados por el sistema que indican que el tamaño del archivo de paginación está aumentando o que el archivo de paginación es muy pequeño.

P Me gustaría aprender a usar el Shell de administración de Exchange, pero nunca he usado una línea de comandos para administrar mis sistemas. ¿Por dónde debo empezar?
R En primer lugar, comencemos con algunos aspectos básicos. Cada cmdlet del Shell de administración de Exchange está formado por un solo verbo y un solo nombre. El Shell de administración de Exchange usa sólo unos cuantos verbos: "Get" se usa para recuperar propiedades de objetos, "Set" para cambiar las propiedades de un objeto, "New" para crear objetos nuevos, etc. Los nombres del Shell de administración de Exchange incluyen muchos conceptos con los que ya están familiarizados todos los administradores de Exchange (por ejemplo, Mailbox, Contact, Queue y OWAVirtualDirectory). Hay también conceptos nuevos en Exchange Server 2007 (como TransportRule, StorageGroupCopy y UMAutoAttendant). De modo que, en la práctica, un cmdlet básico se parecerá a New-Mailbox (que creará un buzón) o a Get-Mailbox (que recuperará una lista de buzones de la organización).
Sin embargo, la mayoría de los cmdlets necesitarán más detalles acerca de lo que intenta realizar exactamente. Si desea cambiar una propiedad de un buzón, por ejemplo, deberá especificar qué buzón y qué propiedad. Esto se realiza mediante parámetros. Si New-Sandwich fuera un cmdlet, entonces los parámetros podrían ser -NumberOfTomatoSlices 4, -Bread Wheat, y otras opciones semejantes que especifican con más detalle la forma que desea que adopte el bocadillo (-FlufferNutter $true-ahhhh yum).
Una vez que ha comprendido la división verbo-nombre, puede usar la exposición de línea de comandos en el Asistente de la Consola de administración de Exchange (EMC) para familiarizarse con los cmdlets y las operaciones que realizan. En la Consola de administración de Exchange, ejecute el Asistente para crear un usuario nuevo. Al final del Asistente, cuando haya terminado la operación, verá una copia del comando que ha ejecutado el Asistente de forma oculta (consulte la figura 1). Al presionar Ctrl+C se copia el contenido de este cuadro de diálogo de modo que pueda pegar el cmdlet en el Bloc de notas y juntar sus propios archivos por lotes sencillos.
Figura 1 Exposición de línea de comandos para crear un nuevo usuario
Figura 1 Exposición de línea de comandos para crear un nuevo usuario (Hacer clic en la imagen para reducirla)
Figura 1 Exposición de línea de comandos para crear un nuevo usuario
Figura 1 Exposición de línea de comandos para crear un nuevo usuario (Hacer clic en la imagen para ampliarla)
Si desea practicar el uso de cmdlets (pero no desea ocasionar ningún daño), un buen truco es poner -WhatIf al final del comando. Cuando lo haga, el sistema le indicará lo que ocurre al ejecutar el comando sin realizar cambios reales en el sistema.
Una vez que esté familiarizado con los cmdlets básicos (como *-Mailbox), es probable que desee probar algunos otros. Para encontrar más cmdlets, use el cmdlet Get-ExCommand. Esto mostrará una lista de todos los cmdlets de administración de Exchange. Realice esta tarea mientras ejecuta el Shell de administración de Exchange. La mera apertura del Shell de comandos de Microsoft o de Windows PowerShell™ no permitirá realizar esta ni ninguna otra tarea de administración de Exchange. La lista es inmensa, de modo que use caracteres comodín para encontrar lo que busca. Por ejemplo, Get-ExCommand *database* devolverá una lista de todos los cmdlets de Exchange que tienen "database" en el nombre, como Dismount-Database, Move-DatabasePath y New-MailboxDatabase.
Si cree conocer parte del nombre que busca, puede realizar un recorrido por las opciones. Por ejemplo, puede escribir Get-Mailbox y, a continuación, presionar la tecla Tab para recorrer todos los cmdlets con mailbox en el nombre de la tarea. Incluso puede combinar el uso de caracteres comodín y la tecla Tab. Por ejemplo, puede escribir Get-*Mailbox* y usar Tab para ver las opciones posibles.
Otro sencillo truco es usar indicaciones. Cada cmdlet tiene un conjunto de parámetros que son necesarios de forma predeterminada: los parámetros básicos necesarios para realizar la operación. Los cmdlets "Get", como Get-Mailbox, no necesitan parámetros. De forma predeterminada, Get-Mailbox devolverá una lista de todos buzones de la organización. La lista devolverá 1000 como máximo, de forma predeterminada. Para cambiar este límite, puede escribir, por ejemplo, Get-Mailbox -ResultSize 2000. Los cmdlets que crean o modifican objetos (como Set o New) solicitarán la información necesaria respecto al objeto que desea crear o modificar. Si, por ejemplo, ejecuta New-Mailbox, el shell solicitará, uno por uno, los datos de contraseña, base de datos, nombre, etc.
Para obtener más información acerca de los parámetros posibles en un cmdlet dado, use el sistema de Ayuda: Help Move-DatabasePath. También puede escribir simplemente Move-DatabasePath, Move-DatabasePath -?, etc.; intentamos tener cubiertas las bases. La Ayuda le proporcionará una descripción del cmdlet y una lista de los parámetros junto con el propósito de cada uno. También puede tener acceso a la Ayuda con el cmdlet Get-Help. ¿No se siente bien escribiendo simplemente Get-Help? ¿No desearía que algunas personas pudieran ejecutar ese cmdlet en el mundo real?
Otra manera de descubrir los posibles parámetros en un cmdlet es usar Tab en los nombres de parámetro. Escriba Get-Mailbox -S y presione Tab, y recorrerá los posibles parámetros que empiezan con S.
Y, a continuación, desde luego, está el extenso sistema de Ayuda. Si no encuentra lo que busca sin conexión, no olvide comprobar el contenido de la Ayuda actualizado regularmente en go.microsoft.com/fwlink/?linkid=79421 (en inglés) y la guía de referencia rápida en go.microsoft.com/fwlink/?linkid=64647 (en inglés).
Todo este material le iniciará en la Consola de administración de Exchange, pero esta información apenas roza la superficie de la eficacia y la flexibilidad de la línea de comandos. Profundizaremos más en este tema en próximas columnas.

P En el Administrador del sistema de Exchange (ESM) de Exchange Server 2003, podíamos ver fácilmente el tamaño del buzón de todos los usuarios. Esta característica parece haber desaparecido en Exchange 2007. ¿Hay alguna manera de conseguir lo mismo en Exchange 2007?
R En la nueva consola de Exchange 2007, puede obtener el tamaño de un buzón en la página de propiedades generales del propio buzón. Si desea ver esta información para varios usuarios, deberá usar el Shell de administración de Exchange.
Si ejecuta Get-MailboxStatistics, obtendrá los datos de todo un servidor, y no sólo los de una base de datos determinada. De forma predeterminada, el tamaño no se muestra; tiene que ejecutar el cmdlet con Format-List para obtenerlo:
get-mailboxstatistics | format-list
Podría resultar mejor elegir lo que desea ver y canalizarlo a una tabla. En este ejemplo, obtenemos el nombre para mostrar del buzón, el tamaño total de los elementos, el tamaño total de los elementos eliminados y la base de datos en la que se encuentra el buzón:
Get-MailboxStatistics | Select-Object
displayname,totalitemsize,
totaldeleteditemsize,databasename
| Format-Table
Según la información que busque, puede usar un formato diferente para el resultado. En este ejemplo, sucede que Format-Table funciona mejor que Format-List

KC Lemsones directora de administración de programas en el equipo de Exchange Server. Su PIN del cajero automático es 0000 (no se lo gaste todo de golpe).
Nino Bilicjefe técnico, pasa su tiempo libre cobrando cheques de 1.000 dólares de Bill en agradecimiento por reenvíos en su correo electrónico


 Vigilancia de seguridad: Implementaci&#243;n de EFS: Segunda parte
Vigilancia de seguridad
Implementación de EFS: Segunda parte
John Morello

Puede pensar en cualquier implementación del sistema de cifrado de archivos (EFS) como un proceso de dos partes: la parte del diseño de servidor, que se centra en la administración de certificados y los agentes de recuperación, y la parte de la implementación de EFS de cara al usuario. El mes pasado hablé de la parte del servidor y las opciones de recuperación de datos y claves,
así como de las opciones para proporcionar certificados a los clientes. Ahora, voy a centrarme en los aspectos de la implementación destinados a los usuarios finales, tal como las mejoras del Explorador de Windows®, la elección de las ubicaciones del sistema de archivos que desean cifrar y la administración de las opciones de cifrado con la directiva de grupo.

Detección del uso de EFS
Cuando se decida a implementar EFS, el primer paso será determinar el estado actual del uso de EFS en la organización. Recuerde que EFS se puede utilizar en modo independiente, donde el usuario final es exclusivamente responsable de la creación y la copia de seguridad de sus claves de cifrado. Es posible que en su organización haya usuarios avanzados que ya hayan utilizado EFS de esta forma, por lo que es importante determinar quiénes son estos usuarios para así poder garantizar una transición fluida hacia una implementación más administrada.
La primera vez que algún usuario utilice EFS en un equipo, Windows creará la siguiente entrada del Registro en HKEY_CURRENT_USER:
HKCU\Software\Microsoft\Windows NT\CurrentVersion\EFS\CurrentKeys\CertificateHash
Para buscar la ubicación de esta entrada en los equipos de la empresa, puede usar Microsoft® Systems Management Server (SMS), secuencias de comandos de inicio de sesión de Active Directory u otras herramientas. Si alguno de los usuarios tiene este valor del Registro en el equipo, significa que ha utilizado EFS en algún momento. Sin embargo, este valor no indica necesariamente que alguien esté usando EFS en estos momentos ni que tenga datos cifrados. Por tanto, cuando se detecta esta clave del Registro en un equipo, debe examinarse con mayor atención para determinar si contiene archivos cifrados en la actualidad.
Si usa cipher.exe y pasa los modificadores /U y /N, cipher generará un informe sobre el estado de cifrado de los archivos y los directorios de un equipo. Por ejemplo, si quiere determinar si hay datos cifrados en un sistema, puede ejecutar el siguiente comando:
cipher /U /N
La comprobación del Registro y el informe de cipher podrían combinarse en una sola secuencia de comandos que busque el valor del Registro y, si está presente, genere un informe con los archivos cifrados actualmente en el equipo. Una vez que se generen estos informes, podrá saber qué usuarios tienen archivos cifrados y estará preparado para migrarlos a un diseño administrado centralmente.
Para controlar la aplicación de la directiva de grupo durante la implementación, resulta útil crear dos grupos de seguridad en el dominio para separar los equipos en los que EFS está en uso de aquellos donde no lo está. Por ejemplo, "SG-ComputersUsingEFS" podría contener las cuentas de aquellos equipos en los que EFS está en uso, mientras que "SG-ComputersNotUsingEFS" podría contener el resto de equipos en los que EFS no se utiliza actualmente.

Control del uso de EFS con la directiva de grupo
Una vez que sepa qué usuarios están usando EFS y cuáles no, el siguiente paso en su implementación de clientes será deshabilitar el uso independiente de EFS para quienes no lo estén utilizando actualmente. Esto supone un paso importante en el proceso de implementación, ya que resulta más fácil habilitar y configurar EFS correctamente la primera vez que tener que migrar los usuarios que estén utilizando certificados autofirmados. Sólo debe realizar este paso después de determinar los usuarios que ya están utilizando EFS porque, si deshabilita EFS mediante la directiva de grupo, los usuarios no podrán tener acceso a ningún archivo actualmente cifrado. Puede consultar esta directiva en el Editor de objetos de directiva de grupo en Configuración del equipo\Configuración de Windows\Configuración de seguridad\Directivas de claves públicas\Sistema de cifrado de archivos (EFS).
Tal como he indicado anteriormente, este valor sólo debe habilitarse en aquellos equipos en los que no se esté utilizando EFS actualmente para no interrumpir el trabajo de ningún usuario que sí lo esté usando. De esta forma, en mi ejemplo, en la lista de control de acceso (ACL) del objeto de directiva de grupo (GPO) que deshabilita EFS, sólo se permite aplicar la directiva de grupo al grupo "SG-ComputersNotUsingEFS".

Cifrar o no cifrar
Una vez que haya determinado los sistemas que usan actualmente EFS y haya deshabilitado EFS en el resto de los equipos hasta que se realice la implementación administrada, el paso siguiente será determinar dónde se utilizará el cifrado en dicha implementación administrada. Según cómo estén administrados sus sistemas cliente, este proceso puede resultar sencillo o bien todo lo contrario.
Lo primero que hay que tener en cuenta al considerar qué archivos se deben cifrar es si los usuarios son administradores de sus sistemas. Si los usuarios son administradores locales, sólo podrá guiarles y alentarles a cifrar los datos confidenciales, pero no podrá beneficiarse de un verdadero control administrado. La razón es sencilla: un administrador local puede crear archivos y directorios en cualquier lugar del sistema de archivos. Así, aunque puede cifrar las ubicaciones comunes, como Mis documentos, si el usuario crea un directorio nuevo en otra ubicación y guarda en él información confidencial, será muy difícil garantizar también la protección de estos datos. Además de todas las ventajas de seguridad que se obtienen cuando los usuarios finales no son administradores locales, esto también permite que EFS resulte más fácil de administrar y sea más seguro.
El siguiente fragmento vital de información que hay que recordar sobre EFS es que se trata de un cifrado por usuario. Es decir, todo elemento que cifre un usuario sólo podrá descifrarlo ese mismo usuario y ningún otro, incluida la cuenta SYSTEM (con la excepción, por supuesto, del Agente de recuperación de datos o DRA). Esto significa que si un archivo ejecutable o un DLL están cifrados con una clave de usuario y otro principal del sistema intenta el acceso, recibirá un error de acceso denegado. Por lo tanto, como norma general, no cifre archivos ni directorios que incluyan código ejecutable al que puede que necesiten acceso varios principales de un sistema. Windows impedirá el cifrado de archivos en %SystemRoot% o de archivos que incluyan el atributo SYSTEM, aunque no son raros los proveedores de software que instalan binarios en %ProgramFiles% para los servicios que puede ejecutar la cuenta SYSTEM. Por ejemplo, este enfoque común lo utilizan los proveedores de equipos portátiles cuando instalan el software de administración de energía y de dispositivos que se ejecuta como servicio.
Si tenemos en cuenta estos dos factores, ¿cuáles son las recomendaciones para determinar los destinatarios del cifrado EFS? La respuesta se remonta al modo en que los sistemas de los usuarios están configurados normalmente. En un entorno bien administrado con una imagen normalizada de sistema operativo, probablemente podrá automatizar el proceso de cifrado para los usuarios según las ubicaciones de almacenamiento de datos predeterminadas de su imagen. Por ejemplo, si los usuarios sólo pueden guardar datos en %userprofile%\Mis documentos, puede que sólo necesite cifrar este directorio. Nota: tenga cuidado al cifrar Mis documentos si utiliza el redireccionamiento de carpetas. Si Mis documentos se redirecciona a un servidor, este tiene que ser de confianza para la delegación y tener acceso al perfil del usuario. En estos casos, lo más sencillo suele ser cifrar sólo la memoria caché de archivos sin conexión, de lo que hablaremos más adelante en esta columna.
En un entorno menos administrado, en el que los usuarios pueden escribir en diversas ubicaciones del sistema de archivos, puede que quiera usar el enfoque de automatizar el cifrado de algunas ubicaciones de almacenamiento comunes y, a continuación, proporcionar a los usuarios las instrucciones para cifrar otras ubicaciones por su cuenta. Independientemente del entorno que posea, debe cifrar siempre en el nivel de directorios, en lugar de hacerlo en el nivel de archivos. De esta forma, podrá garantizar que todos los archivos creados en el directorio, incluso los temporales, estarán siempre cifrados.

Ubicaciones de cifrado recomendadas
Como regla general, las ubicaciones que debe cifrar suelen ser: %userprofile%\Mis documentos, %userprofile%\Application Data\Microsoft\Outlook (se presupone que utiliza Microsoft Office Outlook® como cliente de mensajería) y %userprofile%\Escritorio. El cifrado de Mis documentos protege la ubicación predeterminada de los archivos guardados en Windows XP. La protección del directorio de Outlook garantiza que también se cifra el correo electrónico confidencial guardado en la memoria caché de forma local. Esto resulta especialmente importante para los usuarios que ejecutan el modo predeterminado de almacenamiento en caché de Outlook 2003. Por último, el escritorio suele utilizarse como una especie de directorio temporal donde los usuarios pueden colocar documentos en los que están trabajando actualmente o presentaciones que utilizan con frecuencia. Por supuesto es posible que, en su organización, las ubicaciones predeterminadas de algunos de estos directorios sean diferentes, por lo que las opciones de cifrado de EFS deben reflejar las ubicaciones que más se utilicen en su organización.
Además de estas recomendaciones generales, también debe determinar si dispone de aplicaciones que puedan almacenar información confidencial en ubicaciones alternativas. Por ejemplo, algunas aplicaciones guardan información del usuario en %ProgramFiles%\AppName, en lugar de hacerlo en el perfil de usuario. Es importante determinar si tiene alguna de estas aplicaciones en los sistemas cliente para que pueda proteger adecuadamente cualquier dato que utilicen. En el mejor de los casos, la aplicación podría configurarse para guardar los cambios en otra ruta de acceso específica del perfil de usuario (como Mis documentos), donde no sería necesario ningún cambio EFS adicional. En el peor de los casos, si la aplicación requiere que los datos se almacenen en su directorio de Archivos de programa, EFS podría utilizarse para cifrar sólo ese subdirectorio específico de Archivos de programa.
Por último, tenga cuidado si planea cifrar el directorio temporal (%TMP% y %TEMP%). Muchos instaladores de aplicaciones utilizan este directorio para expandir el contenido de los paquetes de instalación y, a continuación, realizan operaciones de desplazamiento de archivos en los archivos expandidos para colocarlos en la ruta de acceso adecuada en %ProgramFiles%. Debido a que un archivo movido en el mismo volumen conserva sus atributos originales, el archivo continuará cifrado después de su colocación en %ProgramFiles%. Si un usuario (que no sea el que está ejecutando el instalador) intenta utilizar este archivo, se le denegará el acceso. A menudo, estos problemas no se manifiestan en mensajes de error claros de aplicación indicativos de la causa raíz. Por esta razón, normalmente recomiendo que %TMP% sólo se cifre en entornos bien administrados donde los usuarios finales no instalan aplicaciones por sí mismos.

Protección de Archivos sin conexión
Archivos sin conexión es una característica de Windows 2000 y ediciones posteriores que permite a los usuarios crear una copia local de los datos almacenados en un servidor de archivos. Archivos sin conexión permite al usuario trabajar con estos datos mientras está desconectado del servidor y sincronizar los cambios con el servidor la próxima vez que se conecte. Sin embargo, Archivos sin conexión no es un directorio sencillo que contiene copias de archivos del servidor. En su lugar, se trata de una base de datos compartida en todo el sistema que se ejecuta en el contexto de la cuenta SYSTEM. En Windows XP, esta base de datos se puede proteger con EFS. Considere las implicaciones de este aspecto en relación con el análisis anterior sobre el establecimiento de EFS por usuario. ¿Cómo puede EFS, que es específico del usuario, cifrar una base de datos que utilizan varias entidades principales de seguridad?
Cuando un usuario que ejecuta Windows XP elige la opción en el Explorador de Windows para cifrar los archivos sin conexión, la rutina de cifrado es diferente a la utilizada por el resto de las operaciones de cifrado que el usuario puede iniciar. En vez de usar el par de claves EFS personal del usuario en el proceso (que impediría el acceso de SYSTEM a los archivos), la cuenta SYSTEM autogenera un par de claves para usarlas con EFS y lo utiliza para cifrar la memoria caché del cliente. Esto tiene una implicación crítica de seguridad, ya que si alguien puede obtener posteriormente el código para ejecutarlo como SYSTEM, podrá descifrar los datos de la memoria caché. Si se roba un equipo portátil, el usuario malintencionado sólo tendrá que restablecer la contraseña de administrador e iniciar la sesión como tal. Una vez que lo esté ejecutando como administrador, será igual de sencillo forzar la ejecución de código como SYSTEM y, a continuación, tener acceso a la memoria caché. Tenga en cuenta que este comportamiento ha cambiado en Windows Vista™. Ahora Windows Vista utiliza la clave individual del usuario para cifrar los archivos sin conexión específicos del usuario.
Como protección contra este tipo de ataques, se puede configurar el equipo portátil para almacenar la clave de cifrado de la base de datos del Administrador de cuentas de seguridad (SAM) sin conexión, bien como entrada de contraseña al iniciar (modo 2) o en un disquete durante el proceso de arranque (modo 3). Ambos enfoques pueden resultar incómodos, puesto que requieren interacción no automatizada con el equipo durante el proceso de arranque, lo que da lugar a problemas potenciales con la administración automatizada de sistemas. Sin embargo, si se va a usar EFS en un equipo con Archivos sin conexión, es vital que se utilice una de estas opciones para proteger los datos en la memoria caché. Suelo recomendar que se utilice la contraseña al iniciar (consulte la figura 1). El motivo es que un usuario al que le sustraen la bolsa con el equipo portátil probablemente tenga el disco en el portátil o, en su defecto, casi seguro que lo tiene en la bolsa.
Figura 1 Automatización de operaciones de EFS
Figura 1 Automatización de operaciones de EFS

Habilitación de EFS
Una vez que haya determinado los elementos que va a cifrar en el cliente, el siguiente paso es realizar la operación de cifrado. Este proceso puede acometerse mediante una secuencia de comandos de inicio de sesión u otro proceso que ejecutará una secuencia de comandos en el cliente, la cual llama a cipher.exe para realizar la operación de cifrado. Si hay usuarios de EFS independientes en su entorno, como he señalado en el ejemplo anterior, recomiendo que primero los migre.
Para migrar estos usuarios independientes, el primer paso es aprovisionar los sistemas de cliente con certificados administrados, como se describe en la entrega de febrero de 2007 de esta columna (microsoft.com/technet/technetmag/issues/2007/02/SecurityWatch). Una vez que se hayan registrado todos los sistemas para estos certificados administrados, se debe ejecutar cipher con el modificador U/ para actualizar todos los archivos existentes con las nuevas claves de cifrado y de agente de recuperación. En este punto, todos los sistemas del grupo SG-ComputersUsingEFS estarán utilizando EFS de forma administrada, incluidas las claves emitidas (y posiblemente archivadas) de forma centralizada y los agentes de recuperación administrados centralmente.
Si desea implementar EFS para los usuarios que no lo están utilizando actualmente, debe eliminar primero la directiva de grupo que impide el uso de EFS. Después de hacer esto y de que los usuarios hayan inscrito los certificados administrados, se puede ejecutar una secuencia de comandos de inicio de sesión para cifrar las rutas de acceso de las claves descritas anteriormente. He aquí un ejemplo sencillo de una secuencia de comandos:
cipher /e /s /a "%userprofile%\My Documents"

cipher /e /s /a "%userprofile%\Application Data\Microsoft\Outlook"

cipher /e /s /a "%userprofile%\Desktop"
Después de habilitar EFS en los directorios deseados, debe considerar la configuración de dos opciones adicionales para aumentar la seguridad de la implementación de EFS, ambas relacionadas con los datos paginados de la memoria al disco. Tenga en cuenta que para cada uno de estos escenarios, la cantidad de datos potencial que podría recuperar un usuario malintencionado estará limitada a la que se haya cargado en la memoria o paginado al disco durante su uso legítimo. Es decir, si un usuario tiene en el equipo datos confidenciales protegidos por EFS que no ha visto (y, por tanto, que no se han cargado en memoria), estos datos estarán a salvo de estos ataques.
Windows utiliza el archivo de paginación como memoria virtual (a menudo denominado "espacio de intercambio" en otros sistemas operativos) y contiene fragmentos sin tratar de datos en memoria que se han escrito en texto no cifrado en el disco duro. Este procedimiento puede colocar los datos confidenciales en situación de riesgo en un sistema protegido por EFS, ya que, si un usuario malintencionado recupera el archivo de paginación, posiblemente podrá utilizar herramientas forenses para extraer los datos útiles de este archivo. Dado que el propio archivo de paginación no se puede cifrar en Windows XP (recuerde que sí puede hacerse en Windows Vista), la mejor opción es obligar a Windows a que lo borre al apagar el equipo. Esta acción se puede llevar a cabo mediante la directiva de grupo, como se ilustra en la figura 2.
Figura 2 Configuración de la directiva de grupo
Figura 2 Configuración de la directiva de grupo (Hacer clic en la imagen para reducirla)
Figura 2 Configuración de la directiva de grupo
Figura 2 Configuración de la directiva de grupo (Hacer clic en la imagen para ampliarla)
La desventaja de esta configuración es el aumento considerable de tiempo que se precisa para apagar un equipo, especialmente uno con grandes cantidades de memoria. De forma predeterminada, el tamaño del archivo de paginación está directamente relacionado con la cantidad de memoria física del equipo. El motivo es que, para desactivar el archivo de paginación, Windows debe escribir físicamente en cada página del disco antes del apagado.
El archivo de hibernación en Windows contiene un volcado de la memoria física del equipo cuando se ha configurado el modo de administración de energía para permitir la hibernación. Cuándo se produce la hibernación, Windows escribe el contenido completo de la memoria física del disco en el archivo de hibernación, lo que permite que el equipo se pueda restaurar exactamente en el mismo estado que estaba cuando el usuario está preparado para continuar con su trabajo. Al igual que ocurre con el archivo de paginación, el archivo de hibernación no se puede cifrar en Windows XP. Sin embargo, a diferencia del archivo de paginación, la hibernación no se puede deshabilitar directamente desde un GPO. En su lugar, tendrá que utilizar una secuencia de comandos para llamar a powercfg.exe con el modificador /HIBERNATE para deshabilitar (o volver a habilitar) la hibernación.
Después de completar las tareas iniciales de cifrado y configuración, considere borrar el espacio de inactividad en los discos de la implementación. Este proceso puede tardar bastante tiempo y presentar problemas, pero ofrece una ventaja de seguridad en entornos de seguridad alta. El espacio de inactividad es el área de un disco que no contiene los datos actualmente activos en el sistema pero que, debido al modo en que funcionan los discos duros, puede contener fragmentos de información confidencial de archivos utilizados anteriormente. Es decir, puesto que una operación de eliminación de archivos no sobrescribe realmente todos los sectores que un archivo ocupa en un disco (sólo elimina el puntero de la tabla de archivos), los datos eliminados pueden permanecer en el disco. En estos casos, los datos se pueden recuperar con herramientas forenses que puedan leer este espacio de inactividad y volver a montar los archivos con la información allí encontrada. Para borrar de forma segura estos datos residuales, ejecute cipher con el modificador /W. De esta forma, cipher sobrescribe de forma repetida todos los sectores marcados como disponibles en el disco. Siempre y cuando todas las futuras operaciones de archivo con datos confidenciales se lleven a cabo en directorios protegidos por EFS, no será necesario ejecutar este comando periódicamente.

Mejora del Explorador de Windows para EFS
De forma predeterminada, las opciones de cifrado y descifrado para archivos y directorios están algo ocultas en los menús de propiedades avanzadas del Explorador de Windows. Si desea mejorar la experiencia del usuario final con EFS, coloque "Cifrar" y "Descifrar" en el menú contextual del Explorador de Windows (que aparece al hacer clic con el botón secundario). Además, se puede configurar el Explorador de Windows para mostrar los archivos y los directorios protegidos por EFS en un color diferente (verde) al de otros archivos. Así, los usuarios sabrán si un archivo o un directorio particular están cifrados sin tener que solicitar los detalles del menú de propiedades avanzadas. Por último, puede que quiera agregar una opción para definir los usuarios que tienen acceso al archivo o al directorio. Para habilitar estas opciones, realice
following changes in the registry via a script calling reg.exe:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced]

"EncryptionContextMenu"=dword:00000001

"ShowCompColor"=dword:00000001

[HKEY_CLASSES_ROOT\*\Shell\Encrypt To User...\Command]
@="rundll32 efsadu.dll,AddUserToObject %1"

EFS en Windows Vista
EFS ha recibido varias mejoras importantes en Windows Vista que lo hacen más fácil de implementar y administrar, y aumentan su seguridad. Una de las mejoras principales es la total compatibilidad con el almacenamiento de claves EFS en tarjetas inteligentes. Se trata de una característica especialmente valiosa para las organizaciones que ya utilizan inicios de sesión con tarjeta inteligente, porque se puede utilizar esta misma tarjeta para almacenar claves EFS de usuario. Esta compatibilidad con tarjetas inteligentes se amplía también a los certificados de agente de recuperación, de modo que los certificados confidenciales de DRA también se pueden almacenar en tarjetas.
Además, Windows Vista es compatible con el cifrado de elementos que anteriormente resultaba imposible o complicado en Windows XP. Windows Vista puede cifrar el archivo de paginación, lo que elimina la necesidad de activar la opción para "borrar el archivo de paginación de la memoria virtual". El diseño completo de Archivos sin conexión se ha cambiado del todo en Windows Vista. Además de ofrecer niveles de rendimiento y estabilidad mejorados (así como una interfaz en general más fácil de usar), el almacenamiento en caché del cliente se realiza ahora por usuario, lo que significa que es posible cifrar de forma segura la memoria caché sin el uso del modo 2 o 3 de SYSKEY. Estas dos mejoras eliminan los principales obstáculos de la implementación en los entornos actuales basados en Windows XP.
Finalmente, Windows Vista permite a los administradores configurar el cifrado de la carpeta Documentos directamente a través de la directiva de grupo, sin tener que utilizar una secuencia de comandos independiente. La figura 3 ilustra las nuevas propiedades de EFS disponibles a través de GPO en Windows Vista.
Figura 3 Propiedades de EFS en Windows Vista
Figura 3 Propiedades de EFS en Windows Vista (Hacer clic en la imagen para reducirla)
Figura 3 Propiedades de EFS en Windows Vista
Figura 3 Propiedades de EFS en Windows Vista (Hacer clic en la imagen para ampliarla)

Conclusión
EFS ofrece a los administradores de Windows una opción sumamente segura para proteger los datos móviles. EFS es escalable, administrable y ofrece mecanismos flexibles de recuperación de datos. En Windows Vista, EFS se ha mejorado aún más, con capacidades optimizadas para una administración e implementación más fáciles, y con la compatibilidad con el almacenamiento de claves en tarjetas inteligentes. Para las organizaciones que quieren proteger los datos, aun cuando se haya perdido físicamente el equipo, EFS ofrece una solución sólida que ya forma parte de la plataforma existente de Windows.
Recursos adicionales
Para obtener más información sobre los temas tratados en esta columna, consulte los recursos siguientes:
  • La columna Vigilancia de seguridad de febrero de 2007
  • Encrypting File System in Windows XP and Windows Server 2003 (en inglés)
  • Cómo utilizar la utilidad encontrada SysKey para proteger la base de datos Administrador de Cuentas de Seguridad de Windows

John Morello se graduó summa cum laude en LSU y ha trabajado con Microsoft durante seis años en una amplia variedad de funciones. Como consultor sénior, ha diseñado soluciones de seguridad para empresas pertenecientes a Fortune 100 y para clientes de defensa, civiles y federales. Actualmente es director de programas en el grupo de Windows Server que trabaja en tecnologías de seguridad y acceso remoto.


 Archivos del escritorio: Manual b&#225;sico de PsTools
Archivos del escritorio
Manual básico de PsTools
Wes Miller
Descargar el código de este artículo: MillerTheDesktopFiles2007_03.exe (150KB)

Hasta el año pasado, trabajaba en Winternals Software, que fue adquirido por Microsoft en julio de 2006. Winternals se dedicaba a la venta de software comercial, pero los fundadores de la compañía, Mark Russinovich y Bryce Cogswell, también eran propietarios de una compañía independiente llamada Sysinternals, que distribuía muchas herramientas, como software gratuito. Algunas de estas aplicaciones de software gratuito incluso han
evolucionado hasta llegar a ser componentes del pack del administrador de Winternals. Mark y Bryce también vendieron la licencia de estas herramientas a compañías que buscaban utilizarlas fuera de los términos de licencia típicos de software gratuito.
Una de mis herramientas favoritas de la biblioteca de Sysinternals (de acuerdo, es una cantidad ingente de herramientas) es la serie PsTools, que se encuentra ahora en microsoft.com/technet/sysinternals/utilities/pstools.mspx. Mark asignó un nombre a las herramientas basado en la utilidad de lista de procesos de UNIX, ps. Como se ha mencionado en el sitio de descarga de las herramientas, existen utilidades de línea de comandos de Windows® que pueden realizar algunas de las mismas funciones que estas herramientas. Sin embargo, además de una funcionalidad única considerable, una diferencia principal es que la serie PsTools se puede utilizar de forma local o remota (siempre y cuando los sistemas remotos estén configurados correctamente, por supuesto). Aún mejor, el proceso para ejecutarlos de forma remota es casi tan sencillo como ejecutarlos de forma local.
La serie PsTools incluye varias aplicaciones individuales, incluidas en la figura 1. Al igual que ocurre con el resto de las utilidades de Sysinternals, no hay instalador, sólo aplicaciones. ¡Sólo tiene que colocarlas en una carpeta de su ruta de acceso y adelante!
Figure 1 Utilidades de PsTools (Close Figure 1)

Herramienta | Descripción
PsExec | Permite ejecutar procesos en cualquier contexto de usuario.
PsFile | Muestra los archivos abiertos de forma remota en un sistema.
PsGetSid | Muestra el identificador de seguridad (SID) de Windows de un equipo o un usuario.
PsInfo | Muestra información acerca de un sistema de Windows.
PsKill | Elimina los procesos por nombre o identificador.
PsList | Muestra información detallada acerca de procesos en ejecución.
PsLoggedOn | Muestra todos los usuarios que han iniciado la sesión de forma local, así como todos los usuarios de recursos compartidos remotos.
PsLogList | Vuelca los registros de eventos de Windows.
PsPasswd | Cambia las contraseñas de cuentas de usuario.
PsService | Consulta y controla los servicios de Windows.
PsShutdown | Apaga, reinicia o suspende un equipo, o lo coloca en modo de hibernación.
PsSuspend | Suspende procesos en ejecución.
Ahora, es posible que note que parte de esta funcionalidad (sobre todo PsLogList) se podría conseguir a través de Windows Management Instrumentation (WMI) y algunas secuencias de comandos complejas. Sin embargo, la clave de la serie PsTools es que cada utilidad se diseñó para llevar a cabo una tarea particular de forma muy simple.
Voy a guiarle por todas las herramientas y le daré ejemplos sencillos de por qué y cómo podría utilizarlas. Pero primero, ofreceré una breve introducción acerca de cómo funcionan las herramientas y qué tipo de requisitos previos debe cumplir para que funcionen.

¿Cómo funcionan las herramientas?
Todas las herramientas suelen funcionar de la misma manera. En el sistema de host, inicie la PsTool deseada. Aunque muchas se pueden ejecutar de forma local, comprobará que estas herramientas suelen ofrecer su mayor utilidad al ejecutarse en un sistema remoto o en varios sistemas a la vez. PsExec es una excepción específica que viene al caso, como podrá ver en el ejemplo que aparece a continuación. Mediante el argumento de línea de comandos que proporciona, la utilidad se copia en el recurso compartido administrativo del sistema remoto, que es el mismo que %SystemRoot% (directorio de Windows) en el sistema remoto.
Una vez copiada en el directorio remoto, la aplicación se inicia e instala un servicio de Windows. Este servicio de Windows realiza la tarea que haya solicitado, con las credenciales que proporcionó en el momento del inicio. Si la herramienta específica requiere una interfaz de usuario final en el sistema cliente, este servicio inicia un binario adicional en el contexto de usuario. Recuerde que los servicios no pueden iniciar interfaces de usuario interactivas y directas. El servicio comunica la información necesaria a la consola que lo haya iniciado. Y, por último, el servicio se desinstala solo.
Como puede ver, las herramientas son eficaces e independientes. Aunque implican múltiples binarios y procesos, el usuario no tiene que preocuparse: sólo tiene que ejecutar la herramienta deseada y funcionará.
Para utilizar las herramientas, debe cumplir los requisitos previos siguientes: Windows NT®, Windows 2000, Windows XP o Windows Server® 2003 (es compatible con las versiones x86 o x64 de Windows, aunque no con las versiones de Itanium), el recurso compartido de red administrativo predeterminado y habilitado en el sistema remoto en el que se ejecutan las herramientas (admin$), y los puertos del recurso compartido de impresoras y archivos del sistema remoto (tanto si utiliza el Firewall de Windows, el Servidor de seguridad de conexión a Internet o algún otro producto similar).

PsExec
Probablemente PsExec sea mi herramienta favorita entre todas (y, probablemente, no por la razón que cabría imaginar). Durante la mayor parte de un período de dos años, no he ejecutado mis sistemas como administrador, sino como usuario. Tengo una breve secuencia de comandos denominada run.vbs que utilizo para ejecutar mis aplicaciones como Administrador local (se pueden ejecutar igual de fácil como cualquier usuario). En la figura 2 se muestra el contenido de la secuencia de comandos (que también está disponible en el sitio TechNet Magazine en technetmagazine.com/code07.aspx). La secuencia de comandos da por supuesto que PsTools se encuentra en la variable de sistema de la ruta de acceso.
Figure 2 Run.vbs (Close Figure 2)
SET WshShell = WScript.CreateObject("WScript.Shell")
SET WshSysEnv = WshShell.Environment("SYSTEM")
SET FSO = CreateObject("Scripting.FileSystemObject")
IF WScript.Arguments.Count <> 0 Then
    FOR EACH arg IN WScript.Arguments
        iArgCount = iArgCount + 1
        strCmdArg = (arg)
        strCmdArray = Split(strCmdArg, " ", 2, 1)
        IF iArgCount = 1 THEN
        strExe = strCmdArray(0)
        ELSEIF iArgCount = 2 THEN
        strRun = strCmdArray(0)
        ELSE
        strParams = strParams&" "&strCmdArray(0)
        END IF
    NEXT
END IF
'/t:0A && title ***** Admin *****
        strExt = LCase(Right(strExe, 3))

IF strExt <> "exe" AND strExt <> "bat" AND strExt <> "cmd" THEN
WshShell.Run "psexec.exe -d -i -e -u COMPUTERNAME\USER -p PASSWORD  cmd /c start "&strExe&"
    "&strRun&" "&strParams, 0, FALSE
ELSE
WshShell.Run "psexec.exe -d -i -e -u COMPUTERNAME\USER -p PASSWORD "&strExe&" "&strRun&"
    "&strParams, 0, FALSE
END IF

    SET WshShell = NOTHING
    SET WshSysEnv = NOTHING
    SET FSO = NOTHING
Esta secuencia de comandos sencilla es un ejemplo de uso de PsExec con la funcionalidad que Mark agregó cuando trabajábamos en los productos de administración de protección en Winternals: la capacidad para un usuario limitado de ofrecer credenciales con más privilegios para iniciar PsExec de forma local. El uso más común de PsExec, por supuesto, es ejecutarla de forma remota, por ejemplo, para ejecutar una utilidad que no ofrece su propio marco de automatización, de secuencias de comandos o de capacidad remota. Algunas características clave de PsExec incluyen la posibilidad de copiar un binario en sistemas remotos para que se ejecute y la capacidad de dictar la afinidad de procesadores. Otra característica práctica de PsExec es la capacidad de redactar su secuencia de comandos en muchos equipos simultáneamente mediante un archivo de secuencia de comandos.
A continuación incluimos el uso simplificado de PsExec:
PsExec \\computer -u username -p password command
Puede ampliarlo mediante los conmutadores que se muestran en la figura 3.
Figure 3 Conmutadores de PsExec (Close Figure 3)

Conmutador | Descripción
-a | Especifica la afinidad de procesadores.
-c | Indica si la aplicación se debe copiar en el sistema remoto.
-d | Especifica que no se espere a que acabe el proceso antes de salir (no esperará un mensaje de éxito o de error).
-e | La carga se realiza mediante el perfil de la cuenta especificada.
-f | Copia la aplicación aunque exista en el sistema remoto. Garantiza que está ejecutando la versión actual (o una específica).
-i | Ejecuta la aplicación interactivamente en el sistema remoto (necesario si desea que un usuario final vea cualquier interfaz de usuario de la aplicación).
-l | Ejecuta la aplicación como usuario limitado. Elimina el token del grupo de administradores y recorta los privilegios de procesos al nivel en que estarían para un miembro del grupo de usuarios. Práctico para ejecutar aplicaciones de alto riesgo de cara a Internet con privilegios mínimos.
-n | Especifica el tiempo de espera necesario antes de que se produzca un error en la conexión con los equipos remotos.
-priority | Ejecuta el proceso con la prioridad especificada. Es decir, especifica cómo debe definir Windows la prioridad de proceso para una tarea determinada (-low, -belownormal, -abovenormal, -high o -realtime).
-s | Ejecuta el proceso con la cuenta del sistema (práctico para ejecutar Regedit y tener acceso a las claves del Registro con privilegios).
-v | Copia la aplicación sólo si la que se está copiando es más reciente.
-x | Muestra la interfaz de usuario en el escritorio seguro de Winlogon. Sólo funciona en el sistema local.
@file | Ejecuta el comando en todos los equipos especificados en el archivo de texto.

PsFile
PsFile es una herramienta más especializada que PsExec. Específicamente, se utiliza para comprobar qué archivos están abiertos, y por quién, en el sistema remoto. Esto puede ser útil si quiere realizar un seguimiento de los archivos que están abiertos antes de reiniciar un servidor. Si necesita averiguar qué usuario ha bloqueado el archivo, de forma que impide la edición o la eliminación, puede enviar una notificación de forma manual o cerrar el archivo mediante PsFile. El uso de PsFile se incluye a continuación:
PsFile \\computer -u username -p password
Esto devuelve simplemente una lista de los controladores de archivos abiertos en el sistema remoto. Más allá del uso estándar, también puede agregar un parámetro de identificación a la instrucción, y especificar el nombre del archivo acerca del que desea encontrar información o que desea cerrar. También puede incluir el conmutador -c, que cierra el archivo que ha identificado con el parámetro de identificación.

PsGetSid
PsGetSid también es una herramienta muy especializada. Le indicará el identificador de seguridad (SID) de un equipo, un usuario o un grupo. Esto puede ser útil si desea asegurarse de que los sistemas de su dominio no tengan SID duplicados o si desea comprobar los SID de todos los usuarios o los grupos de un sistema. El uso de PsGetSid es del siguiente modo:
PsGetSid \\computer -u username -p password account
Fíjese que la cuenta puede especificar un usuario, un equipo o un grupo. Si bien la sintaxis de PSGetSid es sencilla, también hay un par de parámetros adicionales disponibles. El parámetro SID especifica la cuenta (el grupo o el equipo) con un SID determinado, y @file ejecuta el comando en todos los equipos enumerados en el archivo de texto especificado.

PsInfo
PsInfo se usa para ofrecer información detallada del sistema. Obviamente, esto resulta particularmente útil cuando la secuencia de comandos se aplica a múltiples sistemas remotos, con el envío del resultado a un archivo (por ejemplo, un archivo de Excel ® y un archivo CSV compatible con bases de datos). Tenga en cuenta que esta utilidad se basa en un importante concepto que es diferente en la mayor parte del resto de las herramientas: si no proporciona un nombre de equipo, PsInfo intentará, de forma predeterminada, consultar todos los equipos del dominio. El uso de PsInfo es del siguiente modo:
PsInfo  \\computer -u username -p password
Aunque la sintaxis es sencilla, hay disponibles parámetros y conmutadores adicionales, como se muestra en la figura 4.
Figure 4 Conmutadores de PsInfo (Close Figure 4)

Conmutador | Descripción
-h | Muestra todas las actualizaciones de Windows.
-s | Muestra todas las aplicaciones instaladas en el sistema.
-d | Muestra la información de disco/volumen del sistema.
-c | Ofrece los resultados en formato CSV.
-t | Especifica otro delimitador para el archivo CSV distinto al valor predeterminado de \t.
Filter | Muestra sólo los datos que coinciden con un filtro determinado.
@file | Ejecuta el comando en todos los equipos incluidos en el archivo de texto especificado.

PsKill
PsKill es una gran utilidad para terminar procesos en un sistema local o remoto. Su uso es muy sencillo, y permite eliminar rápidamente un proceso junto con todos sus procesos secundarios. El uso de PsKill se parece bastante a las otras herramientas que he analizado:
PsKill -t \\computer -u username -p password process id | process name
Tenga en cuenta que puede especificar el identificador o el nombre del proceso que desea eliminar.

PsList
No utilizo PsList mucho porque soy más bien un fan de Process Explorer (consulte microsoft.com/technet/sysinternals/ProcessesAndThreads/ProcessExplorer.mspx para obtener más información). Sin embargo, dado que no existe una versión remota de Process Explorer, PsList pasa a ser un símil razonable de algunas de las funcionalidades clave que proporciona Process Explorer. De hecho, PsList es una lista remota de uno o más procesos que se ejecutan en un sistema remoto.
El uso de PsList es bastante sencillo:
PsList \\computer -u username -p password account
Al igual que ocurre con las otras herramientas, el parámetro de cuenta puede especificar un usuario, un equipo o un grupo. Los parámetros adicionales se muestran en la figura 5.
Figure 5 Conmutadores de PsList (Close Figure 5)

Conmutador | Descripción
-t | Muestra información al nivel de subproceso.
-m | Ofrece información de memoria detallada de cada proceso.
-x | Muestra la información de procesos, memoria y subprocesos.
-t | Muestra la información en forma de árbol de procesos (como la vista de árbol de Process Explorer).
-s [n] | Se ejecuta en modo de administrador de tareas durante un número determinado de segundos. Esto permite una visualización en tiempo real (relativamente) de la información de procesos remotos.
-r [n] | Especifica la frecuencia (en segundos) de actualización en modo de administrador de tareas.
name | Muestra información acerca de los procesos que empiezan con el nombre especificado.
-e | Coincide con el nombre de proceso exactamente.
pid | Muestra información acerca de un proceso específico.
PsList es eficaz y, al mismo tiempo, fácil de utilizar (y, sin necesidad de usar el Escritorio remoto, permite ver los procesos remotos con gran detalle). Con esta información, podría seguir adelante con PsKill o PsSuspend si, por ejemplo, tuviera un proceso que deba contenerse.

PsLoggedOn
La premisa subyacente de PsLoggedOn no necesita explicación. La utilidad muestra quién ha iniciado sesión en el sistema. Puede tratarse de inicios de sesión locales (interactivos) o de recurso compartido de red. De forma parecida a PsFile, esta capacidad puede ser útil para determinar quién está usando un servidor en el que puede que tenga que realizar cierto mantenimiento. Su uso es muy sencillo:
PsLoggedOn \\computer
PsLoggedOn tiene sólo dos parámetros opcionales: -l sólo muestra los inicios de sesión locales (no los de red) y -x excluye la hora de inicio de sesión.
Aunque se trata de una herramienta básica, PsLoggedOn permite consultar fácilmente información que, por lo general, tendría que buscar en un par de ubicaciones de Windows.

PsLogList
PsLogList es una de las utilidades más prácticas que sirve para volcar los registros de eventos de Windows en un formato de texto que, a continuación, pueden utilizar los lectores de registro, las bases de datos o cualquier utilidad que desee. La ventaja principal es que convierte las entradas de registros de eventos de su formato binario en algo que se puede transformar o automatizar fácilmente. Por supuesto, en Windows Vista™, los registros de eventos están disponibles originalmente como XML, aunque eso es otra historia.
El uso de PsLogList es del siguiente modo:
PsLogList \\computer -u username -p password
Hay varios conmutadores y parámetros adicionales disponibles, como se muestra en la figura 6.
Figure 6 Conmutadores de PsLogList (Close Figure 6)

Conmutador | Descripción
-a | Vuelca sólo los eventos posteriores a la fecha especificada.
-b | Vuelca sólo los eventos anteriores a la fecha especificada.
-c | Limpia el registro de eventos permanentemente después de volcar los resultados deseados.
-d | Muestra únicamente la información de un número especificado de días.
-e | Excluye los eventos con el identificador de evento especificado (se pueden especificar hasta 10).
-f | Filtra tipos de eventos (advertencia, error, etcétera).
-g | Exporta el registro de eventos como archivo EVT. Requiere el conmutador -c.
-h | Muestra únicamente la información de un número especificado de horas.
-l | Vuelca información desde el archivo EVT especificado.
-m | Muestra únicamente la información de un número especificado de minutos.
-n | Muestra únicamente el número especificado de eventos más recientes.
-o | Muestra únicamente los eventos de un origen determinado (o -SRService en el caso del servicio de restauración del sistema de Windows, por ejemplo).
-q | Excluye los eventos de un origen determinado (al contrario que -o).
-r | Invierte el orden: vuelca los eventos de registros de menos reciente a más reciente.
-s | Enumera los registros de cada línea en campos delimitados.
-t | Especifica un delimitador distinto de la coma para el resultado de de -s.
-w | Espera a que se rellenen los eventos nuevos y los vuelca en tiempo real. Esto sólo se aplica en el sistema local.
-x | Vuelca los datos extendidos de los registros de eventos.
eventlog | Especifica cuál es el registro de evento que se va a volcar. System es el valor predeterminado.
@file | Ejecuta el comando en todos los equipos especificados en el archivo de texto.
Los registros de eventos de Windows pueden ser una herramienta de diagnóstico increíblemente eficaz, pero el truco es obtener los datos hasta el punto de poder manipularlos o consolidarlos. PsLogList realiza este truco.

PsPasswd
PsPasswd es una utilidad sencilla, aunque eficaz, diseñada con parte de la misma funcionalidad que Net.exe, pero que incluye además el aspecto remoto y automático.
PsPasswd  \\computer -u username -p password Username Newpassword
Puede especificar un equipo, ningún equipo (el sistema local) o, si especifica el equipo como \\*, ejecutar la utilidad en todos los equipos del dominio actual. PsPasswd tiene sólo un parámetro adicional disponible: @file ejecuta el comando en todos los equipos especificados en el archivo de texto. De nuevo, se trata de una utilidad muy básica que proporciona una eficacia enorme con varios sistemas.

PsService
PsService permite ver y editar la información del Administrador de control de servicios (SCM) en uno o más sistemas de la red, e incluso puede buscar un nombre de servicio determinado en los sistemas de su red.
PsService \\computer -u username -p password command options
Al ejecutar PsService, el comando representa uno de los comandos enumerados en la figura 7, y las opciones especifican el atributo que se va a aplicar a un comando dado. Si no se proporciona ningún conmutador de comando adicional, PsService ofrecerá un volcado completo de información de SCM.
Figure 7 Comandos de PsService (Close Figure 7)

Comando | Descripción
query | Consulta un servicio determinado.
config | Consulta la información de configuración de un servicio determinado.
setconfig | Establece la información de configuración de un servicio determinado.
start | Inicia un servicio.
stop | Detiene un servicio.
restart | Reinicia (detiene e inicia) un servicio.
pause | Interrumpe un servicio.
cont | Reanuda un servicio interrumpido.
depend | Muestra qué servicios dependen del servicio determinado.
find | Busca en la red una sesión determinada del servicio.
security | Ofrece información de seguridad de un servicio determinado.
De este modo, puede pensar en PsService como una versión de línea de comandos eficaz y remota de Services.msc, pero una que, además, permite buscar servicios (tal vez peligrosos) en toda la red y definir información de configuración.

PsShutdown
PsShutdown es otra de mis herramientas favoritas. Aunque algunos podrían decir que Microsoft ya incluye una herramienta que se hace cargo de esta tarea (shutdown.exe), realmente no es lo mismo. La diferencia clave está en la eficacia de PsShutdown: a saber, poder apagar o reiniciar un sistema remoto. Además, tiene la capacidad de poner un sistema en modo de espera o hibernación (no sólo en modo de apagado o de reinicio), bloquear un sistema y reiniciar un equipo después de mostrar un mensaje al usuario durante un período determinado de tiempo.
PsShutdown \\computer -u username -p password
También hay varios parámetros adicionales disponibles para su uso con PsShutdown, como se muestra en la figura 8.
Figure 8 Conmutadores de PsShutdown (Close Figure 8)

Conmutador | Descripción
-a | Anula un proceso de apagado en curso iniciado por PsShutdown.
-c | Permite que un usuario interactivo anule el proceso de apagado.
-d | Suspende el equipo (modo de espera).
-e | Códigos de motivo del proceso de apagado. Recomiendo la consulta del sitio web de Microsoft para obtener ayuda con estos conmutadores, ya que su uso puede generar problemas con PsShutdown y la utilidad shutdown.exe integrada. Consulte msdn2.microsoft.com/en-us/library/aa376885.aspx (en inglés) para obtener más información.
-f | Fuerza la finalización de todas las aplicaciones.
-h | Coloca el equipo en modo de hibernación.
-k | Desconecta el equipo (lo reinicia si no se admite la desconexión).
-l | Bloquea el equipo.
-m | Especifica el mensaje que se mostrará a los usuarios interactivos.
-n | Especifica el tiempo de espera necesario antes de que se produzca un error en la conexión con los equipos remotos.
-o | Cierra la sesión del usuario de la consola.
-r | Reinicia el equipo.
-s | Apaga el equipo, pero no lo desconecta.
-t | El tiempo que debe transcurrir antes de ejecutar el comando de apagado o el tiempo concreto para la desconexión.
-v | Muestra el mensaje para los usuarios hasta que se produce el apagado.
@file | Ejecuta el comando en todos los equipos especificados en el archivo de texto.
Puede comprobar que PsShutdown es una utilidad de control de potencia del sistema muy eficaz y altamente configurable y que, además, es relativamente fácil de usar.

PsSuspend
PsSuspend es una práctica utilidad si desea poner un proceso invasor bajo control de forma temporal o si simplemente desea reducir temporalmente un proceso de uso de CPU elevado sin perder ningún dato o contexto de aplicación.
PsSuspend \\computer -u username -p password process ID
Puede obtener el identificador de proceso con PsList. Una vez suspendido un proceso, puede utilizar el conmutador -r para reanudarlo. Tenga en cuenta que el concepto de suspensión y reanudación de un proceso lo implementa también Process Explorer, aunque sólo de forma local. Obviamente, PsSuspend puede suspender y reanudar los procesos de forma remota y local, lo que supera la implementación integrada en Process Explorer.

Conclusión
Creo que la serie PsTools es un conjunto de utilidades de valor incalculable. Junto con el resto de utilidades de Sysinternals (a saber, Regmon, Filemon, Process Explorer y, ahora, Process Monitor), PsTools se encuentra entre los primeros programas que pongo en mi ruta de acceso al reinstalar Windows en cualquiera de mis sistemas. Espero que esta columna le familiarice con la serie PsTools si no la conocía de antes o, en este caso, espero que haya ampliado sus conocimientos sobre estas herramientas. Mi agradecimiento especial a Mark Russinovich, por supuesto, por ofrecer estas herramientas de forma gratuita todos estos años y ayudarme con el contenido de esta columna.

Wes Miller es Director de desarrollo de Pluck (www.pluck.com) en Austin, Texas. Anteriormente, Wes trabajó en Winternals Software en Austin, y en Microsoft como administrador de programas y administrador de producto para Windows. Si lo desea, puede ponerse en contacto con Wes en la dirección technet@getwired.com.


 Dentro de Microsoft.com: Introducci&#243;n a la creaci&#243;n de reflejos de bases de datos
Dentro de Microsoft.com
Introducción a la creación de reflejos de bases de datos
Saleem Hakani

Si su base de datos pierde la conexión, lo más probable es que esté en un aprieto, ¿verdad? No obstante, si utiliza SQL Server 2005 con SP1, la característica de creación de reflejos de bases de datos puede evitar el desastre. Esta nueva tecnología de alta disponibilidad permite mantener un estado de espera activa de su base de datos para usarlo cuando el servidor de base de datos de producción deja de estar
disponible por cualquier motivo. La característica de creación de reflejos de bases de datos funciona mediante la transferencia de registros de transacciones de una base de datos del servidor principal al secundario, que se utiliza para la espera activa. Con la creación de reflejos de bases de datos, los cambios en los datos se documentan en el registro de transacciones antes de que se lleve a cabo cualquier cambio en las páginas de datos reales, de la misma forma en que funcionan siempre las actualizaciones de SQL Server™. Los registros se colocan primero en memoria en el búfer del registro de la base de datos principal y, a continuación, se guardan en disco. Estos registros de transacciones se copian y reproducen en la base de datos del servidor reflejado. Esto hace que los cambios de la base de datos principal se dupliquen en la base de datos reflejada. Tenga en cuenta que sólo la base de datos principal es accesible desde conexiones de cliente. Cuando la base de datos principal recibe los cambios solicitados por los clientes, el servidor principal envía estos cambios activos al servidor reflejado; el reflejo no toma ninguna de estas decisiones. Cuando está habilitada la creación de reflejos de base de datos y la base de datos principal presenta errores, la base de datos reflejada pasa a estar disponible.

Funcionamiento de la creación de reflejos de bases de datos
La creación de reflejos de bases de datos funciona con todo el hardware estándar que admite SQL Server 2005 y garantiza la integridad de los datos en el caso de errores en la base de datos. La base de datos reflejada se actualizará siempre con la transacción actual que se esté procesando en el servidor de base de datos principal. En la figura 1 se ilustra el flujo de datos.
Si deja de funcionar el servidor principal, no se preocupe, ya que el servidor reflejado tiene una copia justa y exacta de la base de datos principal hasta la última transacción realizada. De esta forma, el reflejo siempre está preparado para llevar a cabo la función del servidor principal.
Figura 1 Réplica de datos en el reflejo
Figura 1 Réplica de datos en el reflejo (Hacer clic en la imagen para reducirla)
Figura 1 Réplica de datos en el reflejo
Figura 1 Réplica de datos en el reflejo (Hacer clic en la imagen para ampliarla)
En la topología de creación de reflejos de bases de datos, necesitará un tercer servidor denominado "testigo" en caso de que desee habilitar la conmutación por error automática del servidor principal al reflejado y viceversa. Un servidor testigo puede ser cualquier equipo que admita SQL Server 2005.

Modos de funcionamiento
La topología de creación de reflejos de bases de datos que utilizará dependerá de la seguridad de las transacciones y de los modos de funcionamiento que seleccione. Los modos de funcionamiento que admite la creación de reflejos de bases de datos incluyen la seguridad alta (con o sin conmutación por error automática) y el rendimiento alto.
Seguridad alta (con conmutación por error automática) Este modo admite la disponibilidad máxima de base de datos con transferencia de datos sincrónica y conmutación por error automática con la base de datos reflejada. Este modo de funcionamiento es el más adecuado cuando se dispone de una comunicación rápida y muy confiable entre los servidores principal y reflejado, y hay que llevar a cabo la conmutación por error automática de una sola base de datos. En este esquema, antes de llevar a cabo una transacción, la base de datos principal espera hasta recibir un mensaje del servidor reflejado de que este ha consolidado el registro de la transacción en el disco.
Seguridad alta (sin conmutación por error automática) Este modo admite la disponibilidad máxima de base de datos con transferencia de datos sincrónica pero sin conmutación por error automática con la base de datos reflejada. En este modo, si la instancia del servidor reflejado deja de estar disponible, la instancia del servidor principal seguirá en funcionamiento pero no podrá reflejar los datos. Si el servidor principal deja de funcionar, se suspenderá la creación de reflejos de bases de datos pero podrá forzar manualmente el servicio para conmutar por error.
Rendimiento alto En este modo de funcionamiento, la transferencia de datos es asincrónica. El servidor principal no espera una confirmación del reflejo como hace en los dos modos anteriores. El servidor reflejado hace lo que puede para seguir actualizado con respecto al principal, pero en este punto no se garantiza que las transacciones más recientes del principal se consoliden en el registro de transacciones del servidor reflejado. Si el servidor principal deja de funcionar, se suspenderá la creación de reflejos de bases de datos pero podrá forzar manualmente el servicio para conmutar por error.

Asentamiento de las bases
La configuración de la creación de reflejos de bases de datos es un proceso sencillo si se establece una base sólida mediante las siguientes recomendaciones:
Edición del servidor Compruebe que tanto el servidor principal como el reflejado ejecutan la misma edición de SQL Server 2005; puede utilizar las ediciones Standard o Enterprise.
Disponibilidad del servidor testigo Si planea utilizar la seguridad alta con conmutación por error automática, asegúrese de que el servidor testigo esté disponible y de que SQL Server 2005 (cualquier edición) esté instalado. El servidor testigo se puede ejecutar en cualquier sistema informático confiable que admita SQL Server 2005.
Imagen reflejada Asegúrese de que la instancia del servidor reflejado tiene los mismos trabajos, inicios de sesión, paquetes de SQL Server Integration Service (SSIS), particiones de disco, ubicaciones de archivo y configuración de servidor que la instancia del servidor principal. La configuración del servidor reflejado con los mismos parámetros que el servidor principal permitirá que el servidor reflejado pueda funcionar del mismo modo que el principal.
Recuperación completa Es importante que todas las bases de datos que participen en la creación de reflejos de bases de datos se establezcan con el modelo de recuperación completa.
Master y TempDB Compruebe que todas las instancias de servidor en una topología de creación de reflejos utilizan la misma intercalación master y TempDB y página de códigos. El disponer de una intercalación y páginas de código diferentes puede causar problemas durante la configuración de la creación de reflejos de bases de datos.
Copias de seguridad Si la base de datos que se va a reflejar es grande, primero realice una copia de seguridad completa de la base de datos y, a continuación, restáurela en la instancia del servidor reflejado mediante la opción NORECOVERY.
Planeación por adelantado Determine todos los nombres de servidor, números de puerto, cuentas de seguridad y ubicaciones donde residirán las bases de datos y documéntelos. Consulte la barra lateral "Recomendaciones para la creación de reflejos de bases de datos" para ver una lista de comprobación.
Una vez que haya establecido bien la base, estará preparado para abordar la configuración de creación de reflejos de bases de datos en su entorno.
Recomendaciones para la creación de reflejos de bases de datos
  1. Utilice servidores de socio que tengan las mismas características de CPU, memoria, almacenamiento y capacidad de red.
  2. Asegúrese de que los socios tienen las mismas ediciones de sistema operativo y SQL Server, Service Pack y actualizaciones.
  3. Instale SQL Server en una estructura idéntica de directorios y de unidades en las instancias del servidor principal y del reflejado.
  4. Si el rendimiento se convierte en un problema, considere el uso de una tarjeta dedicada de interfaz de red para distribuir la carga.
  5. Como ha hecho con los servidores de socio, asegúrese de que las instancias de servidor principal y reflejado son idénticas en cuanto a CPU, memoria, capacidad de almacenamiento y de red. Al garantizar que ambos servidores tienen la misma estructura de directorios, el mismo esquema de partición de disco y la misma configuración de SQL Server se elimina la necesidad de cambiarlos durante la conmutación por error en el socio reflejado o con posterioridad a esta tarea.
  6. Asegúrese de que todas las aplicaciones tienen conexión y pueden ejecutar todas las acciones necesarias, así como de que todos los inicios de sesión activos de SQL Server (y sus permisos) en la instancia del servidor principal también están presentes en la del servidor reflejado. Puede utilizar la tarea de transferencia de inicios de sesión para que SQL Server 2005 Integration Services se encargue de este procedimiento.
  7. En cuanto al agente de SQL Server, copie trabajos, alertas, paquetes de SSIS, bases de datos de asistencia, definiciones de servidor vinculadas, dispositivos de copia de seguridad, planes de mantenimiento, perfiles de correo de bases de datos, etc., del servidor principal al servidor reflejado.
  8. Establezca un procedimiento para que siempre que realice cualquier modificación en el servidor principal (como cambios en el hardware, software, configuración de SQL Server o en cualquier objeto de base de datos), automáticamente repetirá o replicará y transferirá estos cambios en la instancia del servidor reflejado.
  9. Realice varias conmutaciones por error de prueba antes de realizar la implementación.

Configuración
Configuremos la creación de reflejos de bases de datos mediante el modo de funcionamiento de seguridad alta con conmutación por error automática. Como se ha mencionado, esto significa que es necesaria una instancia de servidor testigo. Para este ejemplo, voy a utilizar los nombres de base de datos y servidor que aparecen en la figura 2, que también especifica cada función del servidor.
Recuerde que debido a que la configuración puede influir notablemente en el rendimiento cuando el registro de transacciones pendientes se copia del servidor principal al reflejado, es posible que quiera realizar la configuración inicial de la creación de reflejos de bases de datos durante las horas de menor actividad.
La configuración del reflejo consta de tres pasos: la creación de extremos en los servidores implicados, la realización de una copia de seguridad y restauración de la base de datos principal, y la habilitación de las sesiones de creación de reflejos en todos los servidores implicados.
Antes de establecer una sesión de creación de reflejos de bases de datos, debe establecer el mecanismo de comunicación entre todos los servidores implicados en este proceso. Para hacerlo, cree los extremos en todos los servidores mediante la ejecución de esta instrucción tanto en ServerA como en ServerB:
Create Endpoint Mirroring_Endpoint
State= Started as TCP (Listener_Port=5001)
For Database_Mirroring (Role=Partner);
Para ServerC (que actuará como testigo), cambie (Role= Partner) a (Role = Witness) y ejecute la instrucción. De esta forma se controla el puerto TCP que utiliza cada instancia para escuchar.
Para el siguiente paso, realice una copia de seguridad completa de la base de datos seguida de una copia de seguridad del registro de la base de datos DBM_Demo del servidor principal para, a continuación, restaurarla en la instancia del servidor reflejado mediante la opción NORECOVERY. El uso de NORECOVERY garantiza que la base de datos reflejada se encontrará en un estado de restauración, por lo que se pueden aplicar los registros de transacciones.
Esta es la instrucción T-SQL para realizar una copia de seguridad completa de la base de datos DBM_Demo de ServerA (la instancia del servidor principal):
Backup Database DBM_Demo to DISK='E:\MSSQL\Bak\DBM_Demo_FULL.bak';
Si hay algún cambio en la base de datos tras realizar la copia de seguridad completa de la misma, es posible que tenga que realizar una copia de seguridad de registro de la base de datos; de lo contrario, esto puede no ser necesario.
Si lo es, puede utilizar la siguiente instrucción T-SQL para realizar una copia de seguridad de registro de la base de datos DBM_Demo de ServerA:
Backup Log DBM_Demo to Disk='E:\MSSQL\Bak\DBM_Demo_Log.bak';
Una vez que haya realizado todas las copias de seguridad, traslade los archivos de copia de seguridad a ServerB o a una ubicación compartida que le permita restaurar estas copias en ServerB. A continuación, también debería restaurar cualquier copia de seguridad de registros de transacciones que haya realizado desde la última copia de seguridad completa de base de datos de ServerA.
Puede utilizar la siguiente instrucción T-SQL para restaurar las copias de seguridad completas y de registro en ServerB mediante la opción NORECOVERY:
--Restore full database backup on the mirror --server instance
Restore Database DBM_Demo from Disk='E:\MSSQL\Bak\DBM_Demo_FULL.bak' with NORECOVERY;
Por último, utilice la siguiente instrucción T-SQL para restaurar la copia de seguridad del registro en el servidor reflejado mediante la opción NORECOVERY:
Restore Log DBM_Demo from Disk='E:\MSSQL\Bak\DBM_Demo_Log.bak' with NORECOVERY;
Cuando termine de restaurar todas las copias de seguridad, estará preparado para el paso final, que consiste en habilitar la sesión de creación de reflejos de bases de datos en todos los servidores implicados.
La configuración de una sesión de creación de reflejos de bases de datos requiere una dirección de red de servidor para cada una de las instancias de servidor. Esta dirección debe identificar la instancia al proporcionar una dirección de sistema y el número de puerto en el que escucha la instancia. La sintaxis de una dirección de red de servidor tiene un formato parecido al siguiente:
TCP://<System-address>:<port>
<System-address>: es un nombre de dominio completo o una dirección IP; puede obtener esta información si ejecuta IPCONFIG en el equipo local en una ventana de símbolo del sistema.
El <puerto> lo estableció al crear los extremos.
Puede iniciar la sesión de creación de reflejos de bases de datos en ServerB de la siguiente forma:
Alter Database DBM_Demo
Set Partner= 'TCP://ServerA.com:5001';
A continuación, ejecute la siguiente instrucción T-SQL para iniciar la sesión en ServerA:
Alter Database DBM_Demo
Set Partner='TCP://ServerB.com:5001';
Seguidamente, habilite la sesión de creación de reflejos en ServerC (servidor testigo), de esta forma:
Alter Database DBM_Demo
Set Witness='TCP://ServerC.com:5001';
La creación de reflejos de bases de datos está preparada para ejecutarse en su entorno. Cualquier objeto de base de datos que se haya agregado o modificado en la base de datos DBM_Demo se transferirá a la copia de ServerB. Sin embargo, si la base de datos de ServerA deja de estar disponible, puede producirse una conmutación por error, lo que hará que se cambie la función de la base de datos reflejada por la función de la principal.
Ahora que tiene configurada y en ejecución la creación de reflejos de bases de datos, siempre dispondrá de una espera activa en caso de que la base de datos de producción deje de funcionar.

Saleem Hakani trabaja como ingeniero sénior para Microsoft y cuenta con más de 14 años de experiencia en sistemas de base de datos. Fundó y dirige la comunidad de SQL de Microsoft y es responsable de proporcionar la automatización y los estándares de SQL Server a través de la organización Windows Live. Saleem ha obtenido las certificaciones MCTS, MCDBA y MCSA. Puede ponerse en contacto con él en Saleem@sqlcommunity.net.


 Notas de campo: Ha llegado el m&#233;dico
Notas de campo
Ha llegado el médico
Matt Hester

NO HACE MUCHO TIEMPO se me ocurrió que ser profesional de TI se parece bastante a ser médico. Esta revelación me vino a la cabeza la primera vez que utilicé Windows Vista™. En aquel momento, tenía problemas de conectividad de red. Tras horas de usar ping, ipconfig e incluso unos cuantos reinicios, vi una palabra nueva que despertó la curiosidad natural que todos los profesionales de TI compartimos: "diagnóstico". Normalmente, cuando trabajo en un sistema operativo, veo palabras y frases del tipo "reparación", "estado", "administrador de tareas" y "enviar informe de errores" que me ayudan a conocer los aspectos más ocultos del sistema operativo. Pero al ver la palabra "diagnóstico", reflexioné sobre los parecidos entre las dos profesiones.
En primer lugar, tanto los médicos como los profesionales de TI tenemos exámenes eliminatorios y certificaciones que nos permiten colocar algunas siglas detrás de nuestros nombres. Estas siglas identifican nuestras especializaciones y, con suerte, quedan estupendamente enmarcadas en la pared o impresas en tarjetas.
Al igual que los médicos, los profesionales de TI también tenemos una gran diversidad de recursos que utilizamos para resolver problemas. Los médicos consultan con sus colegas y buscan información en las revistas profesionales y en Internet. Nosotros, los profesionales de TI, también consultamos con nuestros colegas e investigamos en Internet y en publicaciones técnicas (sobre todo, por supuesto, en TechNet Magazine) para resolver mejor los problemas.
Además, los médicos y los profesionales de TI dependen de herramientas de confianza. Los médicos disponen de instrumentos de eficacia probada como el estetoscopio; nosotros tenemos el ping. Ambos nos permiten escuchar lo que está ocurriendo.
El último punto en común es de naturaleza social. Cuándo los médicos y los profesionales de TI asistimos a eventos sociales, nos cuesta mucho ocultar nuestras identidades profesionales. Eso me recuerda que, en una fiesta reciente, la gente logró averiguar lo que hacía para ganarme la vida y, de repente, me convertí en alguien extraordinariamente popular. Pero esa popularidad tenía un precio: también perdí mi identidad como ser humano encantador. Me convertí simplemente en el "chico PC" y, por extensión, en el especialista involuntario en soporte técnico para todos los invitados: "Oye, chico PC, ¿por qué se me ha bloqueado el equipo esta mañana"? "Oye, chico PC, ¿dónde está la tecla Tal?", "Oye, chico PC, ¿puedes reparar mi Mac"? La peor parte fue cuando vi a un médico al otro lado de la estancia que me sonreía ampliamente con complicidad mientras seguía bailando, sin ser interrumpido.
Pero volviendo a mi problema de conectividad: tras casi tres horas de intentos sin éxito de conectar, hice clic en el nuevo botón Diagnosticar y reparar. Imagínese mi conmoción y vergüenza cuando vi la siguiente pantalla de respuesta:

(Hacer clic en la imagen para reducirla)
Con la boca abierta y el rostro rojo, miré a mi alrededor para asegurarme de que nadie me había visto. Entonces alargué la mano por la parte posterior del equipo y conecté el cable. Desde ese feliz día, he seguido trabajando con Windows Vista y utilizando ampliamente la capacidad de diagnóstico. Me ha ahorrado una gran cantidad de tiempo al descubrir la causa principal de muchos problemas. Además, se integra muy bien con el panel de control Informes de problemas y soluciones, que permite buscar en línea información adicional. Pruébelo, antes de desesperarse.
Más tarde aquella noche, cuando empezaba a quedarme dormido, feliz de haber identificado y resuelto satisfactoriamente mi problema de conectividad de red, reflexioné: ¿Quiere decir esto que tendré más tiempo para jugar al golf y llegaré a conducir un lujoso deportivo?

Matt Hester es moderador de TechNet en el equipo Microsoft Across America. Obtenga más información sobre las presentaciones que proporciona en technetevents.com/mhester. También puede visitar su blog en blogs.technet.com/matthewms.


 Confidencial de Windows: La estupidez puede ser inteligente
Confidencial de Windows
La estupidez puede ser inteligente
Raymond Chen

CUANDO inserta un CD en el equipo, Windows® podría preguntarle qué quiere que haga, incluso aunque se lo dijera la última vez. ¿Por qué olvida Windows su configuración de reproducción automática? Bueno, pues no la olvida; sólo quiere que le confirme lo que ya sabe.
Había dos problemas con la manera en que Windows XP controlaba la reproducción automática de CD. En primer lugar, numerosos usuarios descubrieron que tras instalar un programa que admitía la reproducción automática de CD, no sabían cómo configurarlo para que fuera su nuevo programa predeterminado de reproducción automática de CD. Si habían seleccionado anteriormente un programa y marcado "Realizar siempre la acción seleccionada", no había una forma sencilla e intuitiva de quitar la etiqueta de "siempre" para que el cuadro de diálogo de reproducción automática de CD volviera a aparecer y diera la oportunidad al usuario de seleccionar el nuevo programa como predeterminado.
En segundo lugar, algunos programas con un comportamiento bastante pobre, en la instalación, modificaban sin permiso la configuración sin documentar de la reproducción automática de CD para establecerse como controlador predeterminado de reproducción automática de CD, lo que anulaba la elección del usuario.
Hablando claro, según los usuarios, los dos problemas eran: "Acabo de instalar este programa y quiero que sea mi programa de reproducción automática de CD", y su opuesto, "acabo de instalar este programa y no quiero que sea el programa predeterminado de reproducción automática de CD".
Windows Vista trata la configuración de reproducción automática de manera global.
Windows Vista trata la configuración de reproducción automática de manera global. (Hacer clic en la imagen para reducirla)
Windows Vista trata la configuración de reproducción automática de manera global.
Windows Vista trata la configuración de reproducción automática de manera global. (Hacer clic en la imagen para ampliarla)
Windows XP Service Pack 2 (SP2) introdujo un nuevo comportamiento de reproducción automática de CD con la intención de solucionar estos problemas. Ahora, cuando comprueba que hay disponible un nuevo controlador de reproducción automática de CD, Windows vuelve a mostrar el cuadro de diálogo de reproducción automática de CD. De esta forma, tiene la oportunidad de elegir el programa nuevo que acaba de instalar o anular su selección en el caso de que haya tenido la desfachatez de establecerse como nuevo reproductor predeterminado.
También verá el cuadro de diálogo de reproducción automática de CD la primera vez que inserte un CD tras actualizar a Windows XP SP2. Se trata de un cuadro de diálogo del tipo "más vale tarde que nunca", destinado a resolver cualquier controlador instalado antes de que actualizara a Windows XP SP2.
Antiguamente, el sistema operativo sólo tenía que preocuparse de facilitar la interfaz de los desarrolladores con una característica. Sin embargo, en el panorama del software actual, también tiene que preocuparse de detener a los programadores que intentan abusar de esta interfaz.
Hay otro caso en el que puede parecer que Windows ha olvidado la configuración de reproducción automática. Cuando inserta un dispositivo de almacenamiento extraíble, como una unidad USB, es posible que vuelva a ver el cuadro de diálogo incluso si ya ha seleccionado una opción y marcado "Realizar siempre la acción seleccionada". El motivo no es que Windows haya olvidado su configuración, sino más bien que la recuerda demasiado bien.
Cuando selecciona una opción para un dispositivo de almacenamiento extraíble, Windows recuerda la configuración de este dispositivo. Si ha conectado un dispositivo diferente, verá de nuevo el mensaje, ya que no ha especificado cómo desea que se comporte este otro dispositivo. La intención de este diseño es que pueda utilizar su cámara digital de manera predeterminada para ver imágenes y su reproductor de música para reproducir música. Si el dispositivo no tiene número de serie, cuando se conecta a un puerto USB diferente se considera como un dispositivo distinto.
En respuesta a la confusión creada por el diseño de Windows XP, este comportamiento se ha cambiado en Windows Vista™. Ahora, la configuración de reproducción automática se trata de manera global, en lugar de hacerse por dispositivo. Si elige "No realizar ninguna acción", Windows Vista no realizará ninguna acción, independientemente del dispositivo que inserte o dónde lo conecte. A veces, la única forma de que el sistema operativo parezca más inteligente es hacerlo más estúpido.

Raymond Chen , The Old New Thing (blogs.msdn.com/oldnewthing), y su libro del mismo título (Addison-Wesley, 2007) tratan sobre el historial de Windows y la programación en Win32. En su tiempo libre, se sabe que se dedica a calificar trabajos