 TechNet Magazine April 2008

TechNet Magazine April 2008

SQL Server 2008: Novidades

A nova versão do SQL Server oferece diversos recursos novos e aprimoramentos que prometem aperfeiçoar o desempenho, aumentar a segurança e tornar a vida dos administradores de banco de dados muito melhor. A seguir, uma visão geral das principais alterações e o que você pode esperar do SQL Server 2008.

Randy Dyess SQL Server 2008: Segurança

A segurança continua a ser uma área de aperfeiçoamento para o SQL Server. Explore algumas das mais importantes alterações relacionadas à segurança que você encontrará no SQL Server 2008, de aprimoramentos na criptografia e autenticação ao gerenciamento com base em políticas e o novo sistema de auditoria que ajudará com requisitos regulamentares.

Rick Byham SQL Server 2008: Novos tipos de dados

O SQL Server 2008 oferece sete novos tipos de dados internos que permitem a você trabalhar com dados mais complexos e a simplificar o gerenciamento de dados estruturados, semi-estruturados e até mesmo os não-estruturados. Obtenha uma análise aprofundada desses tipos de dados e saiba como usá-los para aprimorar o gerenciamento de dados na infra-estrutura.

Kelly Wilson SQL Server 2008: Desempenho de consultas de data warehouse

O SQL Server 2008 oferece recursos relacionais de data warehouse ainda mais poderosos. Examine de perto os principais recursos de data warehouse relacionados a desempenho e descubra como você poderá usar toda essa nova tecnologia para otimizar o desempenho de consultas.

S. Agarwal, T. Grabs, and J. Hammer SQL Server: Minimize o bloqueio no SQL Server

Embora o bloqueio seja essencial para o suporte a atividades de leitura e de gravação simultâneas em um banco de dados, ele pode afetar de forma negativa o desempenho do sistema. Saiba como otimizar seu banco de dados do SQL Server para minimizar o bloqueio e veja como é possível monitorar o sistema para entender melhor o seu impacto sobre o desempenho.

Cherié Warren Microsoft Office: Integração de bancos de dados do Access ao SharePoint

Muitos negócios ainda utilizam o Microsoft Access. Felizmente, o Microsoft Office SharePoint Server 2007 permite a você integrar dados herdados do Access. Explore a forma como você utiliza essas ferramentas para criar novas soluções para a sua organização.

Peter Serzo Do editor: Aos velhos e novos amigos

Joshua Hoffman Cartas: A palavra está com os leitores

Toolbox: Novos produtos para profissionais de TI

Greg Steen P+R SQL: Aumente bancos de dados, use iFilters e conecte-se remotamente

Descubra como aumentar bancos de dados programaticamente, aprenda como usar IFilters e explore configurações de firewall que suportam conexões remotas do SQL Server.

Edited by Matthew Graven Utilitário em destaque: WCAT (Ferramenta de Análise de Capacidade na Web)

Logs da Web e análises de tráfego podem fornecer uma boa idéia do tipo de tráfego que você pode esperar com o tempo. Mas como você pode determinar o que sua infra-estrutura pode manipular? A Ferramenta de Análise de Capacidade na Web gratuita pode ajudá-lo a ver como seus sistemas serão executados sob pressão.

Greg Steen The Cable Guy: Solucionando problemas de imposição de NAP

Solucionar problemas de comportamentos de imposição na plataforma de Proteção de Acesso à Rede pode ser algo desafiador. The Cable Guy explica como funciona a avaliação da diretiva de integridade de NAP e de que forma é possível solucionar os problemas mais comuns.

Joseph Davies Windows PowerShell: Assine aqui, por favor

A diretiva de execução AllSigned oferece o ambiente do Windows PowerShell mais seguro que existe. Mas como é possível assinar scripts do Windows PowerShell? Don Jones mostrará a você.

Don Jones Ei, Equipe de Scripts!: O retorno do script de banco de dados

Os bancos de dados armazenam as informações mais importantes de sua empresa. Este mês, a Equipe de Scripts mostra como usar o VBScript para ler com rapidez as informações de um banco de dados, adicionar e remover registros e até fazer atualizações com algumas linhas de código.

The Microsoft Scripting Guys Security Watch: Onde está minha PII?

Antes que você possa proteger efetivamente suas Informações de Identificação Pessoal, você deve saber se elas estão armazenadas no seu PC. Veja como escrever scripts que irão localizar os dados pessoais armazenados no seu computador. Você pode ficar surpreso ao ver o que esses scripts revelam.

Frank Simorjay Os arquivos da área de trabalho: Implantando o Windows XP com o WAIK

O Kit de Instalação Automatizada do Windows foi essencialmente projetado para o Windows Vista e o Windows Server 2008. Mas você sabia que ele também pode ajudar a implantar o Windows XP e o Windows Server 2003? Saiba aqui tudo o que é preciso para começar.

Wes Miller Anotações de campo: Uma iniciativa MARavilhosa

Veja como o novo programa MAR (Microsoft Authorized Refurbisher) pode ajudar as empresas a lidar com a confusão causada por problemas no licenciamento de software durante o recondicionamento de PCs antigos.

Neil Fawcett Segredos do Windows: Compartilhamento e compartilhamento semelhante

"Tem certeza de que deseja remover esse arquivo compartilhado?". Raymond Chen explica por que um desinstalador pode fazer essa pergunta quando você remove um programa.

Raymond Chen


 SQL Server 2008: Novidades
SQL Server 2008 Randy Dyess

Novidades
Visão geral:
  • Gerenciamento mais poderoso
  • Desempenho e escalabilidade aprimorados
  • Mais segurança e disponibilidade
  • Alterações para desenvolvedores

Novamente, a Microsoft lançou uma nova versão do SQL Server que promete melhorar a vida dos administradores de banco de dados. A versão mais recente é o SQL Server 2008, e oferece uma grande variedade de novos
recursos e funcionalidades que transformarão a administração em uma tarefa muito melhor.
Os administradores de banco de dados que têm usado o SQL Server® 2005 por qualquer período de tempo encontrarão muitos dos recursos utilizados em seus trabalhos diários, mas logo descobrirão também que essas ferramentas familiares foram aperfeiçoadas no SQL Server 2008. A nova funcionalidade criada com base nos recursos existentes percorre um longo caminho para a redução do número de soluções alternativas ou personalizações uma vez necessárias para a utilização de vários recursos em ambientes de banco de dados complexos.
Os novos recursos do SQL Server 2008 envolvem um amplo intervalo de cargos de trabalho de banco de dados, dificultando sua categorização. Como eu classifico recursos em diferentes tópicos, percebi que alguns leitores poderão querer saber por que coloquei o Recurso X na Categoria Y quando ele claramente pertence à Categoria Z. É uma questão de perspectiva, afetada pela forma como a sua empresa trabalha.
Eu compreendo que quem trabalha com bancos de dados quase sempre se vê em diferentes cargos de trabalho, mas tentarei dividir os novos recursos para que eles se encaixem nas seguintes categorias genéricas: gerenciamento, escalabilidade, desempenho, alta disponibilidade, segurança, desenvolvimento e business intelligence.

O que há de novo em gerenciamento?
Para os administradores de banco de dados (como eu), a funcionalidade de gerenciamento adicional torna o SQL Server 2008 um novo produto bem interessante. O novo gerenciamento de diretivas, os diversos recursos de consulta de servidor, os servidores de configuração e o data collector/management warehouse oferecem capacidades novas e poderosas para administradores de banco de dados que quase sempre são responsáveis pelo gerenciamento de ambientes de banco de dados grandes e complexos, com centenas ou milhares de bancos de dados em dezenas ou até em centenas de servidores.
O recurso Gerenciamento de Diretivas do SQL Server 2008, que, na verdade, foi chamado de Declarative Management Framework nas CTPs (Community Technology Previews), permite a você criar e executar diretivas de configuração em um ou mais servidores de banco de dados. Com essas diretivas, você pode garantir que configurações padrão sejam aplicadas e mantidas em cada um dos servidores e bancos de dados de destino. Você pode ver um exemplo desse recurso na Figura 1.
Figure 1 A diretiva de melhores práticas de local de dados e de arquivos de log
Figure 1 A diretiva de melhores práticas de local de dados e de arquivos de log
As diretivas são criadas a partir de conjuntos predefinidos de facetas. Cada faceta contém um subgrupo de configurações do SQL Server 2008 e de outros eventos que você pode controlar. Emparelhe essas facetas com condições para criar uma diretiva. As condições são os valores permitidos para as propriedades de uma faceta, das configurações ou de outros eventos contidos nelas.
As condições também são valores usados para filtros de diretivas. Digamos que você queira que a diretiva seja executada somente em certo banco de dados. Nesse caso, é possível criar uma condição que contenha o nome do banco de dados e adicioná-la à diretiva. Dessa forma, a diretiva só se aplicará a esse único banco de dados. Confie em mim — o Gerenciamento de Diretivas do SQL Server 2008 pode soar complexo, mas depois de experimentá-lo, você perceberá que ele é bem intuitivo.
Os novos recursos Multiple Server Interaction e Configuration Servers são úteis quando você precisa executar consultas em diversos servidores ao mesmo tempo. Você pode registrar servidores em seu Management Studio e depois agrupá-los. Quando for necessário executar uma diretiva ou consulta em todos os servidores do agrupamento, bastará clicar com o botão direito do mouse no agrupamento.
Como um benefício adicional, você pode configurar esse recurso para que ele retorne um conjunto de resultados por servidor ou mescle todos eles em um conjunto de resultados maior. Também é possível especificar se você deseja que os nomes do servidor e do banco de dados façam parte dos resultados para poder separar os resultados individuais de cada servidor. Ser capaz de armazenar os servidores registrados no servidor de configuração em vez de cada Management Studio individual é uma grande vantagem.
Outro bom recurso de gerenciamento é o Data Collector. Com freqüência, os administradores de banco de dados precisam coletar dados de gerenciamento de um grande número de servidores, e muitos desses DBAs criaram sua própria solução personalizada para isso. O Data Collector é um mecanismo interno que facilita a tarefa de coleta de dados relacionados ao gerenciamento. Ele permite que você utilize o SQL Server Agent e o SSIS (SQL Server Integration Services) para criar uma estrutura que coleta e armazena seus dados, além de oferecer manipulação de erros, auditoria e histórico de coleta.
Ao contrário de ferramentas de terceiros e de trabalhos personalizados, o Data Collector será facilmente compreendido pela maioria dos administradores de banco de dados, uma vez que utiliza o SQL Server Agent e o SSIS para criar um conjunto de trabalhos e de pacotes para manipular as conexões, a coleta e o armazenamento de dados (como você pode ver na Figura 2). Quando esses dados forem armazenados em um local central, conhecido como o Management Warehouse, poderão ser exibidos e organizados por meio de um conjunto de instruções T-SQL e de relatórios do SQL Server 2008 Reporting Services. Esse armazenamento central de dados facilita muito a análise e a exibição das métricas gerais de gerenciamento do ambiente de banco de dados.
Figure 2 O arquivo de log de uso de disco do Data Collector
Figure 2 O arquivo de log de uso de disco do Data Collector

O que há de novo em escalabilidade?
Ao longo dos anos, administradores de banco de dados SQL Server viram seus ambientes de banco de dados se tornarem cada vez maiores. À medida que o tamanho do seu ambiente de banco de dados aumenta, você precisa de novos métodos e ferramentas para obter a escalabilidade exigida pela maioria das empresas. O SQL Server 2008 apresenta diversos recursos novos que serão muito úteis.
O SQL Server 2008 possui compactação interna para os arquivos do banco de dados e para os arquivos do log de transações associados ao banco de dados correspondente. O SQL Server 2005 apresentou o recurso de compactar dados em um arquivo ou grupo de arquivos somente leitura, mas ele simplesmente utilizava o recurso de compactação do NTFS do Windows®. Com o SQL Server 2008, agora você pode obter a compactação em nível de linha e em nível de página, oferecendo benefícios que não podem ser obtidos com a compactação no nível do arquivo de dados.
A compactação nos níveis de linha e de página reduz o tamanho do espaço de dados necessário, além de reduzir a quantidade de memória necessária, já que os dados permanecem compactados na memória. Os dados compactados na memória resulta em maior utilização da memória, beneficiando a escalabilidade de vários sistemas.
O SQL Server 2008 também apresenta a compactação em nível de backup. Embora os backups de banco de dados só incluam a parte ativa do banco de dados, isso ainda representa centenas de gigabytes ou até mesmo dezenas de terabytes. Em ambientes de banco de dados que possuem mais de uma cópia de um arquivo de backup com vários terabytes, esses backups quase sempre ocupam um valioso espaço de armazenamento que poderia ser usado de forma mais eficiente. Ao permitir que administradores de banco de dados compactem seus arquivos de backup, o SQL Server 2008 libera um pouco desse espaço para que ele possa ser usado para dados dinâmicos.
E há também o Resource Governor. Esse novo recurso permite que você defina os valores de recursos que cargas de trabalho ou agrupamentos de cargas de trabalho poderão usar durante a execução. Com o Resource Governor, você pode criar um ambiente no qual diversas cargas de trabalho diferentes coexistirão em um servidor sem temer que uma ou mais delas sobrecarregue o servidor e reduza o desempenho das outras cargas de trabalho.
A vantagem desse recurso é que você pode usar com mais eficiência a quantidade total de recursos disponíveis em seus servidores de banco de dados. A Figura 3 mostra um exemplo da utilização do Resource Governor para limitar a atividade em um servidor.
Figure 3 Limit activity with the Resource Governor (Close Figure 3)
USE master
go

--Drop function
IF OBJECT_ID('rgclassifier_demo','Function') IS NOT NULL
DROP FUNCTION rgclassifier_demo
go

--Create a classifier function for report group
CREATE FUNCTION rgclassifier_demo() RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @group_name AS SYSNAME
  IF (USER_NAME() LIKE '%Launch_Demo%')
         SET @group_name = 'demogroup'
    RETURN @group_name
END
GO

--Drop workload group for anything coming from Management Studio
IF EXISTS (SELECT name FROM sys.resource_governor_workload_groups
  WHERE name = 'demogroup')
BEGIN
  DROP WORKLOAD GROUP demogroup
END
GO

--Create workload group
CREATE WORKLOAD GROUP demogroup
GO

--Register the classifier function with
--Resource Governor
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_demo)
GO

--Alter the dbogroup workload group to only
--allow 10% of CPU for each workload request
ALTER WORKLOAD GROUP demogroup
WITH (REQUEST_MAX_CPU_TIME_SEC = 10)
GO

--Create a new resource pool and set a maximum CPU limit for all workloads.
IF EXISTS (SELECT name FROM sys.resource_governor_resource_pools
  WHERE name = 'pooldemo')
DROP RESOURCE POOL pooldemo
GO

CREATE RESOURCE POOL pooldemo
WITH (MAX_CPU_PERCENT = 40)
GO

--Configure the workload group so it uses the
--new resource pool.
ALTER WORKLOAD GROUP demogroup
USING pooldemo
GO

--Apply the changes to the Resource Governor
--in-memory configuration.
ALTER RESOURCE GOVERNOR RECONFIGURE
GO

O que há de novo em desempenho?
O desempenho geral de bancos de dados melhora no SQL Server 2008. Graças aos diversos recursos novos do SQL Server 2008, você pode controlar e monitorar o desempenho de seus bancos de dados e dos aplicativos que os utilizam.
Quando você tem grandes números de transações executadas a cada segundo, o bloqueio que normalmente ocorre durante essas transações pode ter um pacto negativo sobre o desempenho dos seus aplicativos de banco de dados. O SQL Server foi projetado para reduzir o número total de bloqueios mantido por um processo ao escalonar bloqueios a partir dos de menor nível de linha e de página até grandes bloqueios de nível de tabela. Mas é importante compreender que esse escalonamento de bloqueios pode causar problemas. Por exemplo, uma única transação pode bloquear uma tabela inteira e impedir que outras transações trabalhem com ela.
O SQL Server 2008 funciona com o mecanismo de particionamento de tabelas (introduzido no SQL Server 2005) para permitir que o mecanismo do SQL Server escalone bloqueios em nível de partição antes de em nível de tabela. O nível intermediário de bloqueio pode reduzir drasticamente os efeitos do escalonamento de bloqueios em sistemas que precisam processar centenas e milhares de transações por segundo.
O SQL Server 2008 oferece diversos aperfeiçoamentos de processador de consultas novos para quando a consulta interagir com tabelas particionadas. O otimizador de consultas agora pode executar consultas em partições, como faria em índices individuais, ao trabalhar com a ID da partição e não com o mecanismo de particionamento no nível de tabela.

O que há de novo em alta disponibilidade?
À medida que ambientes de banco de dados se tornam mais complexos e os bancos de dados aumentam, a capacidade de garantir a sua disponibilidade se torna cada vez mais difícil. Os mecanismos conhecidos que você usou no passado para obter alta disponibilidade ainda estão presentes no SQL Server 2008. Mas alguns desses recursos foram aperfeiçoados no SQL Server 2008 e outros novos foram adicionados.
Como SQL Server 2005, muitos administradores começaram a implementar o espelhamento de bancos de dados para obter a alta disponibilidade. O SQL Server 2008 oferece várias aprimoramentos para a prática do espelhamento de bancos de dados. No passado, por exemplo, o espelhamento de bancos de dados ocasionalmente tinham problemas de desempenho quando os dados do log de transações eram movidos do banco de dados principal para os espelhados. Em resposta a isso, o SQL Server 2008 agora reduz a quantidade de informações que é movida pela rede do log de transações do principal para o log de transações do espelho ao compactá-las antes do envio para o log de transações do espelho para proteção.
Agora você pode corrigir páginas de dados corrompidas no principal. Se um banco de dados principal tiver páginas de dados corrompidas devido aos erros 823 e 824, poderá solicitar uma cópia nova dessas páginas de dados dos servidores espelhados. Essa solicitação é um processo automatizado transparente para qualquer usuário que estiver acessando os bancos de dados principais.
Outro recurso novo, o Hot Add CPU, permite que você adicione CPUs novas a um servidor de banco de dados sem afetar a disponibilidade dos bancos de dados que ele contém. No entanto, saiba que o Hot Add CPU possui as suas limitações, já que ele só será útil se você estiver executando o Windows Server® 2008 Enterprise Edition ou o Datacenter Edition baseados em Itanium de 64 bits, além de exigir a Enterprise Edition do SQL Server 2008.

O que há de novo em segurança?
O SQL Server 2005 introduziu a segurança de dados na forma de criptografia de dados. Com o SQL Server 2008, a criptografia foi bastante aprimorada com a introdução de dois recursos: Gerenciamento Extensível de Chaves e Criptografia Transparente de Dados.
O Gerenciamento Extensível de Chaves permite que uma estrutura avançada armazene com segurança as chaves usadas na infra-estrutura de criptografia — não só no próprio banco de dados como também fora dele, em módulos de software de terceiros ou com um Módulo de Segurança de Hardware.
A Criptografia Transparente de Dados oferece flexibilidade aprimorada para a criptografia de dados ao permitir que ela seja uma propriedade do banco de dados e não somente o resultado de funções em uma linha de código. O resultado é que os administradores não precisam executar um grande número de alterações necessárias para a estrutura de seus bancos de dados e para o código de aplicativos quando criptografarem no nível dos dados. O código da Figura 4 mostra como você pode criptografar um banco de dados com a Criptografia Transparente de Dados.
Figure 4 Using Transparent Data Encryption (Close Figure 4)
USE master;
GO

--Create a master key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YouWillNeedToCreateAStrongPassword';
GO

--Create a certificate to use with TDE
CREATE CERTIFICATE TDECERT WITH SUBJECT = 'TDECert'
GO

--Change to the database to encrypt
USE AdventureWorks
GO

--Create your database master key
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128 --Use a strong algorithm
ENCRYPTION BY SERVER CERTIFICATE TDECERT
GO

--Alter the database to encrypt it with the
--master database key
ALTER DATABASE AdventureWorks
SET ENCRYPTION ON
GO

O que há de novo para desenvolvedores?
Os administradores de banco de dados não são as únicas pessoas que se beneficiarão diretamente das alterações do SQL Server 2008. Há uma série de recursos novos que foram projetados para ajudar os desenvolvedores de banco de dados. Eles vão desde novos aprimoramentos de T-SQL até novos componentes que poderão ajudar os desenvolvedores a criar e a utilizar consultas de banco de dados.
Muitos desenvolvedores de banco de dados são responsáveis pela criação das consultas necessárias para o retorno dos dados para seus aplicativos. Provavelmente você já conhece a ferramenta LINQ (Consulta Integrada à Linguagem), que permite aos desenvolvedores gerar consultas em um banco de dados usando linguagem de programação baseada no Microsoft® .NET em vez das instruções T-SQL normais. Bem, o SQL Server 2008 aprimora a LINQ, oferecendo uma nova LINQ ao provedor de SQL, permitindo aos desenvolvedores gerar comandos LINQ diretamente em tabelas e colunas do SQL Server. Isso reduzirá o tempo para a criação de novas consultas de dados.
Ao desenvolver em bancos de dados, os desenvolvedores utilizam objetos de nível mais alto que podem ser mapeados para tabelas e colunas individuais do banco de dados. Esses objetos, conhecidos como entidades, representam os dados necessários para os aplicativos de banco de dados e, portanto, o desenvolvedor não precisa compreender a estrutura de armazenamento real dos dados e o esquema do banco de dados. O novo ADO.NET Entity Framework permite que desenvolvedores criem consultas de banco de dados usando essas entidades. A abstração da estrutura de banco de dados subjacente permite que os desenvolvedores sejam mais produtivos.
O SQL Server 2008 oferece muitos aprimoramentos diferentes para o T-SQL, fazendo com que os desenvolvedores tenham mais eficiência. Um exemplo é a nova instrução MERGE, que permite ao desenvolvedor verificar a existência de dados antes de tentar inserir novos. Essa verificação antes da execução da instrução INSERT permite que os dados sejam atualizados. Não é mais necessário criar associações complexas para atualizar dados existentes e inserir dados que ainda não existem, tudo durante uma única instrução.
Além disso, separar dados de hora e de data do tipo de dados data/hora ficou mais fácil. O SQL Server 2008 introduziu dois tipos de dados separados para a manipulação de dados de data e de hora. Tipos de dados diferentes significarão desempenho aprimorado para muitas consultas, já que não haverá mais a necessidade da execução de uma operação nos dados antes de sua utilização na consulta.
Ao criar estruturas de banco de dados mais novas, os desenvolvedores de banco de dados quase sempre se vêem alongando a estrutura de bancos de dados para implementar aplicativos de mapeamento. O SQL Server 2008 ajuda a corrigir esse problema com novos tipos de dados espaciais. Os dois tipos de dados espaciais, GEOGRAPHY e GEOMETRY, permitem que os desenvolvedores armazenem dados específicos de local diretamente no banco de dados, sem a necessidade de divisão desses elementos de dados em formatos que se ajustem a outros tipos de dados padrão. O código da Figura 5 é um exemplo de uma tabela espacial simples.
Figure 5 A simple spatial table (Close Figure 5)
IF OBJECT_ID ( 'Demo_SpatialTable', 'Table' ) IS NOT NULL
    DROP TABLE Demo_SpatialTable
GO

--Create table to hold spatial data
CREATE TABLE Demo_SpatialTable
    ( SpatialID int IDENTITY (1,1),
    SpatialInputCol geography,
    SpatialOutputCol AS SpatialInputCol.STAsText() )
GO

--Insert data into table
INSERT INTO Demo_SpatialTable (SpatialInputCol)
VALUES (geography::STGeomFromText('LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326));

INSERT INTO Demo_SpatialTable (SpatialInputCol)
VALUES (geography::STGeomFromText('POLYGON((47.653 -122.358, 47.649 -122.348, 47.658 -122.348, 47.658 -122.358, 47.653 -122.358))', 4326));
GO

--View data to see that data has been converted and stored in col2
SELECT * FROM Demo_SpatialTable
No passado, um problema muito comum para desenvolvedores de banco de dados era a forma como armazenar e utilizar objetos binários grandes, como documentos e arquivos de mídia. O método normalmente usado era armazenar os arquivos fora do banco de dados e simplesmente armazenar um ponteiro no banco de dados para o arquivo externo. Com esse método, no entanto, ao mover o arquivo, você não podia se esquecer de atualizar o ponteiro.
O SQL Server 2008 lida com esse problema com o novo tipo de dados FILESTREAM. Com esse tipo de dados, os arquivos ainda podem ser armazenados fora do banco de dados, mas os dados são considerados parte do banco de dados para consistência transacional. Isso possibilita a utilização de operações de arquivo comuns com a manutenção dos benefícios de desempenho e de segurança do banco de dados.

E quanto ao business intelligence?
O uso cada vez maior do SQL Server nos últimos anos tem sido guiado em grande parte pela adoção de estratégias de business intelligence. Os recursos de business intelligence não são novidade para o SQL Server, mas o SQL Server 2008 possui algumas novidades.
Por exemplo, quando dados são armazenados em data warehouses, freqüentemente há perdas de espaço devido a valores NULL. As colunas que armazenam valores NULL ocupam o espaço do maior tamanho de dados permitido definido na coluna. Isso significa que uma coluna com milhares de valores NULL pode consumir muitos MBs de espaço sem realmente armazenar quaisquer dados.
O SQL Server 2008 apresenta as colunas esparsas, que possibilitam o armazenamento de valores NULL sem a ocupação de qualquer espaço físico do disco. Como as colunas esparsas não consomem espaço real, as tabelas que as contêm podem exceder o limite de coluna de 1.024.
O SQL Server 2008 também apresenta um novo mecanismo, Captura de Dados Alterados, para o gerenciamento de alterações incrementais que precisam ser carregadas no data warehouse. Ele captura e coloca os dados alterados em um conjunto de tabelas de alterações. Capturar dados atualizados, excluídos e inseridos em um esquema de armazenamento que pode ser facilmente utilizado permite o carregamento incremental de data warehouses a partir dessas tabelas — ao contrário de ter de criar instruções de inserção personalizadas que tentam descobrir quais são as alterações feitas em linhas existentes de dados antes da atualização do data warehouse.

Conclusão
Esta é somente uma rápida visão geral das novidades do SQL Server 2008. Ele trará um amplo conjunto de novos recursos e de atualizações de recursos existentes para melhorar a vida dos administradores e dos desenvolvedores de banco de dados. Por fim, ele oferecerá desempenho e escalabilidade aprimorados para os bancos de dados cada vez mais exigentes de hoje.

Randy Dyess é um mentor da Solid Quality Mentors. Ele é especializado em sistemas OLTP do SQL Server. Randy é autor de TransactSQL Language Reference Guide, co-autor de MCTS Self-Paced Training Kit: Microsoft SQL Server 2005 Implementation and Maintenance (Exam 70-431) e de diversos artigos de revistas e de boletins informativos. Randy também é diretor de programa do North Texas SQL Server Users Group e é MVP do SQL Server. Visite seu blog em blogs.solidq.com/EN/rdyess/default.aspx.
© 2007 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..


 SQL Server 2008: Seguran&#231;a
SQL Server 2008 Rick Byham

Segurança
Visão geral:
  • Aprimoramentos na criptografia
  • Aprimoramentos na autenticação
  • Auditoria de segurança
  • Gerenciamento com base em políticas

O SQL Server 2008 oferece vários aprimoramentos e novos recursos projetados para melhorar a segurança geral do seu ambiente de banco de dados. Ele adiciona recursos de autenticação e criptografia importantes e apresenta um novo sistema de auditoria para
ajudá-lo a relatar o comportamento do usuário e atender seus requisitos regulamentares.
Neste artigo, fornecerei uma visão geral das alterações mais importantes que você encontrará nas lojas para a segurança do SQL Server® 2008. Uma das primeiras coisas que você notará é que a ferramenta Configuração da Área de Superfície do SQL Server 2005 foi descontinuada. As opções de protocolo que eram expostas pela ferramenta Configuração da Área de Superfície estão agora disponíveis na ferramenta Gerenciador de Configurações. No entanto, a ativação e a desativação de recursos agora são feitas usando a nova estrutura de gerenciamento com base em políticas do SQL Server 2008.

Aprimoramentos na criptografia
Existem duas principais melhorias na área da criptografia. Primeiro, o SQL Server pode agora usar chaves de criptografia armazenadas em um módulo de segurança de hardware externo de terceiros. E segundo, os dados armazenados no SQL Server podem ser criptografados em um método transparente para os aplicativos que se conectam ao banco de dados. Isso significa que os administradores de bancos de dados podem facilmente criptografar todos os dados armazenados em um banco de dados inteiro sem ter que modificar o código do aplicativo existente.
A primeira melhoria é possibilitada pelo novo recurso EKM (Gerenciamento Extensível de Chaves), disponível nas edições Enterprise, Developer e Evaluation do SQL Server 2008. O EKM permite que outros fornecedores de soluções de gerenciamento de chaves empresarial e HSM (módulo de segurança de hardware) registrem seus dispositivos no SQL Server. Depois que esses dispositivos forem registrados, os usuários poderão usar as chaves de criptografia armazenadas nesses módulos.
Esses fornecedores podem até mesmo expor recursos de criptografia avançados (como vencimento e rotação de chaves) nesses módulos. Em algumas configurações, isso permite uma proteção de dados a partir dos administradores de bancos de dados que não são membros do grupo sysadmin. As instruções criptográficas T-SQL podem então criptografar e descriptografar dados usando as chaves armazenadas no dispositivo EKM externo.
Outro novo recurso, a criptografia de dados transparente, permite que você criptografe arquivos de bancos de dados sem ter que alterar nenhum dos seus aplicativos. Ele executa criptografia de E/S em tempo real e a descriptografia dos dados e arquivos de log. A criptografia usa uma DEK (chave de criptografia do banco de dados), que é armazenada no registro de inicialização do banco de dados para disponibilidade durante a recuperação. A DEK é protegida por um certificado armazenado no banco de dados mestre do servidor. O diagrama na Figura 1 ilustra a arquitetura que permite a criptografia de dados transparente.
Figure 1 Arquitetura de criptografia de dados transparente
Figure 1 Arquitetura de criptografia de dados transparente
Isso é útil para proteger os dados em repouso. Embora você possa tomar várias precauções para ajudar a proteger seu banco de dados, como a criptografia de ativos confidenciais e a colocação de um firewall ao redor dos servidores dos bancos de dados, a mídia física na qual o banco de dados é armazenado (mesmo fitas de backup) oferece uma vulnerabilidade diferente. Um usuário mal-intencionado poderia roubar essa mídia e potencialmente acessar os dados armazenados.
A criptografia de dados transparente, no entanto, permite que você criptografe os dados confidenciais no banco de dados e proteja as chaves usadas para criptografar os dados com um certificado. Isso pode ajudar sua organização a estar em conformidade com várias leis, regulamentações e diretrizes da indústria com relação à proteção apropriada de dados.
A criptografia de dados transparente permite que desenvolvedores de software criptografem dados usando algoritmos de criptografia AES (padrão avançado de criptografia) e 3DES (padrão de criptografia de dados triplo). A criptografia do arquivo do banco de dados é executada no nível da página, com páginas sendo criptografadas antes que sejam gravadas em disco e, posteriormente, descriptografadas quando lidas na memória. Arquivos de backup de bancos de dados que possuem a criptografia de dados transparente ativada também são criptografados usando a chave de criptografia de banco de dados.
Para restaurar um banco de dados criptografado, você deve ter acesso ao certificado ou à chave assimétrica que foi usada para criptografar o banco de dados. Sem o certificado ou a chave assimétrica, o banco de dados não pode ser restaurado. Então, certifique-se de manter todas as chaves enquanto possa precisar de acesso aos backups relacionados.

Aprimoramentos na autenticação
Como você provavelmente sabe, Kerberos é o novo protocolo de autenticação de rede usado para fornecer um meio altamente seguro para autenticar mutuamente entidades cliente e servidor (ou entidades de segurança) em uma rede. O Kerberos ajuda os usuários a mitigar vulnerabilidades de segurança, como ataques por sedução e intermediários. Em relação à autenticação NTLM do Windows®, o Kerberos é mais seguro, mais eficiente e oferece um melhor desempenho.
Para autenticar uma conexão manualmente usando o Kerberos, o SPN (nome da entidade de serviço) de uma instância do SQL Server deve ser registrado no Active Directory® e um driver cliente deve fornecer um SPN registrado ao conectar. No SQL Server 2008, a autenticação Kerberos foi expandida a todos os protocolos de rede, incluindo TCP, pipe nomeado, memória compartilhada e VIA (adaptador de interface virtual). Por padrão, o driver cliente automaticamente infere um SPN correto para uma instância do SQL Server à qual ele se conecta. Você também pode especificar explicitamente um SPN no parâmetro de cadeia de caracteres de conexão para uma segurança melhor, controle e solução de problemas.
O IIS (serviço de informações da Internet) não fornece mais acesso ao ASP.NET, ao Gerenciador de Relatórios ou ao Serviço da Web Report Server. No SQL Server 2008, o Reporting Services lida com todas as solicitações de autenticação por meio de um novo subsistema de autenticação que suporta autenticação personalizada e baseada no Windows.
O Reporting Services hospeda agora as tecnologias Microsoft® .NET Framework e ASP.NET incorporadas no CLR (common language runtime) do SQL Server e o Reporting Services usa também os recursos HTTP.SYS do SO. O Report Server inclui um ouvinte HTTP que aceita solicitações direcionadas a uma URL e uma porta que você define durante a configuração do servidor. As reservas e o registro da URL agora são gerenciados diretamente pelo servidor de relatórios por meio de HTTP.SYS.

Auditoria de segurança
O SQL Server Audit é um novo recurso que permitirá a você criar auditorias personalizadas de eventos de mecanismo do banco de dados. Esse recurso usa eventos estendidos para gravar informações para auditorias e fornece as ferramentas e processos necessários para ativar, armazenar e exibir auditorias em vários objetos de servidor e banco de dados.
O SQL Server Audit também é mais rápido que o SQL Server Trace e o SQL Server Management Studio facilita a criação e o monitoramento de logs de auditoria. Você pode fazer a auditoria para um nível mais granular agora, capturando as instruções SELECT, INSERT, UPDATE, DELETE, REFERENCES e EXECUTE para usuários individuais. Além disso, o SQL Server Audit é totalmente programável por scripts com instruções T-SQL CREATE SERVER AUDIT e CREATE SERVER AUDIT SPECIFICATION e suas instruções relacionadas ALTER e DROP.
Para configurar a auditoria, você cria uma auditoria e especifica o local onde os eventos auditados serão gravados. As auditorias podem ser salvas no log da Segurança do Windows, no log do Aplicativo do Windows ou em um arquivo em um local especificado por você. Você nomeia a auditoria e configura suas características, como o caminho para o arquivo de auditoria e seu tamanho máximo. Você também pode selecionar que o SQL Server desligue se a auditoria falhar. E se você precisar registrar em log os eventos auditados em mais de um local, você apenas criará mais de uma auditoria.
A próxima etapa é criar uma ou mais especificações de auditoria. Uma especificação de auditoria do servidor coleta informações sobre a instância do SQL Server e inclui objetos com abrangência de servidor, como logins e associação de função de servidor. Ela também inclui informações de bancos de dados gerenciadas no banco de dados mestre, como o direito de acessar um banco de dados. Quando você define uma especificação de auditoria, você indica que auditoria receberá os eventos monitorados. Você pode definir várias auditorias de servidor e várias especificações de auditoria de servidor, mas cada auditoria de servidor pode incluir apenas uma especificação de auditoria de servidor ativada de cada vez.
Você também pode criar especificações de auditoria de banco de dados que monitoram eventos em um único banco de dados. Você pode adicionar várias especificações de auditoria de banco de dados a uma auditoria, mas uma auditoria de servidor pode ativar apenas uma especificação de auditoria de banco de dados por banco de dados de cada vez.
Os eventos de ação de auditoria do SQL Server usados para especificações de auditoria de servidor são agrupados em conjuntos de eventos de ação de auditoria relacionados. Eles são expostos como grupos de ação de auditoria. Quando você adiciona um grupo à especificação de auditoria, você monitora todos os eventos incluídos nesse grupo. Por exemplo, existe um grupo de ação de auditoria chamado DBCC_GROUP que expõe os comandos DBCC. Os comandos DBCC, no entanto, não estão disponíveis para auditoria individualmente.
Existem 35 grupos de ação de auditoria disponíveis para o servidor, alguns dos quais estão intimamente relacionados uns ao outros. Por exemplo, existe um SUCCESSFUL_LOGIN_GROUP, um FAILED_LOGIN_GROUP e um LOGOUT_GROUP. Existe também um tipo de ação de auditoria AUDIT_ CHANGE_GROUP que você pode usar para fazer a auditoria do processo de auditoria.
As especificações de auditoria do banco de dados também podem especificar grupos de eventos de ação de auditoria coletados em grupos de ação de auditoria no nível do banco de dados. Além dos grupos de ação de auditoria, as especificações de auditoria do banco de dados podem incluir eventos de ação de auditoria para fazer a auditoria de instruções de linguagem de manipulação de dados. Esses eventos podem ser configurados para monitorar todo o banco de dados ou apenas objetos de bancos de dados específicos. A ação de auditoria SELECT, por exemplo, pode ser usada para fazer a auditoria de consultas SELECT para uma única tabela ou um esquema inteiro. Esses eventos também podem ser configurados para monitorar ações por usuários ou funções específicas — como todas as db_writers.
Você pode usar a ação de auditoria SELECT, por exemplo, para fazer a auditoria de consultas SELECT para uma única tabela pelo usuário Mary ou pela função de banco de dados FINANCE_DEPT ou, ainda, pela função de banco de dados pública. Sem dúvida, isso oferece muito controle e flexibilidade para criar as auditorias de que você precisa.

Relatório de dependência
O Relatório de dependência foi aprimorado com uma nova exibição de catálogo e novas funções de sistema. Se você usa sys.sql_expression_dependencies, sys.dm_sql_referencing_entities e sys.dm_sql_referenced_entities, pode relatar em dependências do SQL entre servidores, entre bancos de dados e de bancos de dados para objetos ligados ou não a esquemas.

Novas funções do banco de dados
Existem alterações feitas nas funções do banco de dados incluídas no banco de dados msdb. A função db_dtsadmin foi renomeada para db_ssisadmin, a função db_dtsltduser foi renomeada para db_ssisltduser e a função db_dtsoperator foi renomeada para db_ssisoperator. Para serem compatíveis com versões anteriores, as funções antigas são adicionadas como membros das novas funções quando os servidores são atualizados.
Além dessas alterações, novas funções de bancos de dados foram adicionadas para oferecer suporte a novos recursos do SQL Server 2008. Em particular, o banco de dados msdb inclui novas funções para grupos de servidor (ServerGroupAdministratorRole e ServerGroupReaderRole), gerenciamento com base em políticas (PolicyAdministratorRole) e o coletor de dados (dc_admin, dc_operator e dc_proxy). E o banco de dados do data warehouse de gerenciamento também inclui novas funções para o coletor de dados (mdw_admin, mdw_writer e mdw_reader).

Segurança de FILESTREAM
O SQL Server inclui agora suporte para armazenamento FILESTREAM, que permite aos aplicativos do SQL Server armazenarem dados não estruturados, como documentos e imagens, no sistema de arquivos. Isso, por sua vez, significa que os aplicativos cliente podem se beneficiar das APIs de fluxo contínuo e do desempenho do sistema de arquivos ao mesmo tempo em que mantêm a consistência transacional entre dados não-estruturados e estruturados correspondentes.
Os dados FILESTREAM devem ser armazenados nos grupos de arquivos FILESTREAM — um grupo de arquivos especial que contém diretórios do sistema de arquivos em vez dos arquivos em si. Esses diretórios, chamados contêineres de dados, fornecem a interface entre o armazenamento do mecanismo de banco de dados e o armazenamento do sistema de arquivos.
Em termos de segurança, os dados FILESTREAM são protegidos como qualquer outro dado — as permissões são concedidas nos níveis da tabela ou da coluna. A única conta que recebe permissões de NTFS ao contêiner FILESTREAM é a conta sob a qual a conta de serviço do SQL Server é executada. Quando um banco de dados é aberto, o SQL Server restringe o acesso aos contêineres de dados FILESTREAM, exceto quando o acesso é feito usando as transações T-SQL e as APIs OpenSqlFilestream.

Gerenciamento com base em políticas
O Gerenciamento com base em políticas do SQL Server 2008 fornece um novo sistema para gerenciar o SQL Server. Você pode criar políticas para testar e relatar vários aspectos do SQL Server e as políticas podem ser aplicadas em um único banco de dados, uma única instância do SQL Server ou em todos os SQL Servers que você gerenciar.
Com o Gerenciamento com base em políticas, você pode testar as opções de configuração do SQL Server e várias das configurações de segurança. E para algumas configurações de segurança, você pode criar políticas para detectar servidores de bancos de dados fora de conformidade e executar etapas para forçá-los e estar em conformidade.
No SQL Server 2008, vários recursos não-essenciais são desativados por padrão para minimizar sua exposição a um possível ataque. Você pode usar o Gerenciamento com base em políticas para ativar de forma seletiva qualquer recurso adicional de que precise. Você pode então avaliar sua configuração de forma programada, recebendo alertas se as configurações não corresponderem à política.
O Gerenciamento com base em políticas agrupa propriedades relacionadas e as expõe em componentes chamados facetas. Por exemplo, a faceta Configuração da Área de Superfície contém propriedades para Consultas Remotas Ad Hoc, Integração do CLR, Correio do Banco de Dados, Automação OLE, DAC Remota, SQL Mail, Web Assistant e xp_cmdshell. Você pode criar uma política que permite a Integração do CLR, mas que desabilita todos os outros recursos. A sua política pode incluir instruções de condição complexas, como desabilitar o Correio do Banco de Dados em todas as instâncias do SQL Server, a menos que sejam chamadas Customer_Response.
Depois de criar a política, você poderá avaliá-la em todos os seus servidores para produzir um relatório que diz a você quais servidores não estão em conformidade. Pressione o botão Configure (Configurar) e todas as instâncias que não estiverem em conformidade serão definidas com as configurações de política. Você também deve programar a política para ser executada periodicamente para monitorar o status dos seus servidores. As facetas Configuração da Área de Superfície são fornecidas para Database Engine, Analysis Services e Reporting Services.
Observe, no entanto, que esse Gerenciamento com base em políticas não pretende ser um mecanismo de aplicação de segurança. Na maioria dos casos, um usuário com privilégios suficientes pode gerar instruções que violam uma política ou ignorar a política e executar ações de reconfiguração que podem violar sua política de segurança. O Gerenciamento com base em políticas do SQL Server 2008 deve ser considerado simplesmente como uma ajuda para monitorar suas configurações de segurança do SQL Server.
As facetas variam em sua capacidade de aplicar configurações, dependendo se suas instruções DDL relacionadas podem ser executadas em modos de não confirmação automática. Às vezes, uma faceta pode aplicar uma configuração em uma instância do Database Engine, mas um administrador pode ainda reconfigurar as configurações. Algumas facetas podem ser aplicadas por um disparador do servidor — isso pode impedir que usuários com baixo privilégio alterem a configuração e reduzam a chance de um administrador acidentalmente alterar a configuração. Neste caso, o administrador teria que desabilitar temporariamente a política antes de alterar a configuração. Outras facetas podem apenas relatar o status de uma propriedade, mas não podem alterá-lo. Isso é o que ocorre com uma política que verifica o tamanho de uma chave simétrica ou assimétrica (conforme exibido na Figura 2).
Figure 2 Faceta para chaves assimétricas
Figure 2 Faceta para chaves assimétricas
Existem facetas para a maioria dos tipos de objetos de bancos de dados, várias das quais possuem usos de segurança. Por exemplo, a faceta de logon pode determinar se a política de senha é aplicada para cada logon e a faceta de procedimento armazenado pode detectar se todos os procedimentos são criptografados. Outras facetas testam as propriedades de usuários, esquemas, provedores criptográficos, conformidade de critérios comuns e auditoria de C2.

Windows Server 2008
O SQL Server 2008 é totalmente testado com o Windows Server® 2008, enviado com o firewall ativado. Agora é um bom momento para rever como configurar as configurações do firewall. E o Windows Server 2008 também fornece Controle de Acesso de Usuário, que você pode ter experimentado com o Windows Vista®. Isso restringe os privilégios que você recebe automaticamente como usuário administrativo. Esses recursos afetarão todas as versões do SQL Server.

Em conclusão
A segurança continua a ser uma área de aperfeiçoamento para o SQL Server. Os aprimoramentos de criptografia e autenticação fornecem novos recursos e o novo sistema de auditoria e o gerenciamento com base em políticas do SQL Server 2008 fornecem a você novas ferramentas para monitorar o status da conformidade com a segurança.

Rick Byham entrou na Microsoft em 1995. Ele trabalhou como engenheiro de suporte do SQL Server nos Serviços de Suporte ao Cliente e entrou para a equipe do SQL Server no Microsoft Learning. Passou para a equipe de Manuais Online do SQL Server como redator técnico em 2003, onde atualmente é responsável pela documentação de segurança. Entre em contato com Rick pelo email rick.byham@microsoft.com.


 SQL Server 2008: Novos tipos de dados
SQL Server 2008 Kelly Wilson

Novos tipos de dados
Visão geral:
  • Novos tipos de dados de data e hora
  • Posição de representação em uma hierarquia
  • Dois modelos para trabalhar com dados espaciais

A realização de negócios nessa economia globalizada exige cada vez mais das empresas o uso de novos tipos de dados, aplicativos e cálculos complexos. Os sete novos tipos de dados internos do SQL Server 2008
proporcionam meios de trabalhar e simplificar o gerenciamento de dados mais complicados.

Date e Time
Com o tipo de dados datetime antigo, os usuários do SQL Server® não tinham a possibilidade de trabalhar com informações de data e hora separadamente. Quatro dos novos tipos de dados – date, time, datetime2 e datetimeoffset – mudaram isso ao simplificar o trabalho com dados de data e hora e oferecer um intervalo de datas maior, além da precisão fracionária de segundos e do suporte a fuso horário. Os novos aplicativos de banco de dados devem usar esses novos tipos de dados em lugar do datetime herdado. Vejamos as novas versões mais detalhadamente.
O tipo de dados date armazena uma data sem um componente time. O intervalo é de 1º de janeiro de 1.000 até 31 de dezembro de 9.999 (0001-01-01 a 9999-12-31). Cada variável date exige 3 bytes para armazenamento e conta com uma precisão de 10 dígitos. A precisão do tipo de dados está limitada a um único dia.
Observe a Figura 1, que mostra como criar e inicializar variáveis Date em scripts T-SQL. A variável @myDate1 é inicializada por uma cadeia de caracteres formatada como 'MM/DD/AAAA'. A variável @myDate2 não é inicializada; ela terá um valor NULL. A variável @myDate3 é inicializada de acordo com a data de sistema do computador local. O valor das variáveis pode ser alterado a qualquer momento com as instruções SELECT ou SET, como ilustra o exemplo alterando o valor de @myDate2. As colunas de datas também podem ser criadas em tabelas. A Figura 2 mostra como criar uma tabela com três colunas de datas.
Figure 2 Create a table with three date columns (Close Figure 2)
USE TempDB
GO

CREATE TABLE myTable
(
    myDate1 date,myDate2 date,myDate3 date
)
GO

INSERT INTO myTable
VALUES('01/22/2005',
       '2007-05-08 12:35:29.1234567 +12:15',
       GetDate())

SELECT * FROM myTable

--Results
--myDate1    myDate2    myDate3
------------ ---------- ----------
--2005-01-22 2007-05-08 2007-11-20
Figure 1 Create and initialize date variables in T-SQL scripts (Close Figure 1)
DECLARE @myDate1 date = '01/22/2005'
DECLARE @myDate2 date
DECLARE @myDate3 date = GetDate()

SELECT @myDate2 = '2007-05-08 12:35:29.1234567 +12:15'

SELECT @myDate1 AS '@myDate1',
       @myDate2 AS '@myDate2',
       @myDate3 AS '@myDate3'

--Results
--@myDate1   @myDate2   @myDate3
------------ ---------- ----------
--2005-01-22 2007-05-08 2007-11-20
O tipo de dados time armazena a hora do dia sem nenhum componente date. Como ele se baseia em um relógio com 24 horas, o intervalo suportado é 00:00:00.0000000 a 23:59:59.9999999 (horas, minutos, segundos e segundos fracionados). É possível especificar a precisão fracionária em segundos durante a criação do tipo de dados. A precisão padrão é de 7 dígitos e a exatidão, de 100 nanossegundos. A precisão afeta o espaço necessário ao armazenamento, que pode variar entre três bytes para até dois dígitos, quatro bytes para três ou quatro dígitos e cinco bytes para cinco a sete dígitos.
O script T-SQL na Figura 3 mostra como a precisão variável é afetada por conversões implícitas do valor de inicialização de uma cadeia de caracteres. O código em T-SQL primeiramente cria e inicializa oito variáveis time separadas em um valor idêntico. A precisão fracionária de cada uma das variáveis equivale ao nome. Por exemplo, @myTime3 apresenta uma precisão fracionária de três casas. Os resultados mostram que a precisão de cada tipo de dados time se equivale à precisão fracionária com a qual ela é declarada. Dígitos além do intervalo permanecem truncados.
Figure 3 Display time data type's variable precision (Close Figure 3)
DECLARE @myTime  time = '01:01:01.1234567 +01:01'
DECLARE @myTime1 time(1) = '01:01:01.1234567 +01:01'
DECLARE @myTime2 time(2) = '01:01:01.1234567 +01:01'
DECLARE @myTime3 time(3) = '01:01:01.1234567 +01:01'
DECLARE @myTime4 time(4) = '01:01:01.1234567 +01:01'
DECLARE @myTime5 time(5) = '01:01:01.1234567 +01:01'
DECLARE @myTime6 time(6) = '01:01:01.1234567 +01:01'
DECLARE @myTime7 time(7) = '01:01:01.1234567 +01:01'

SELECT @myTime  AS '@myTime',
       @myTime1 AS '@myTime1',
       @myTime2 AS '@myTime2',
       @myTime3 AS '@myTime3',
       @myTime4 AS '@myTime4',
       @myTime5 AS '@myTime5',
       @myTime6 AS '@myTime6',
       @myTime7 AS '@myTime7'

--Results
--@myTime          @myTime1   @myTime2    @myTime3     @myTime4
------------------ ---------- ----------- ------------ -------------
--01:01:01.1234567 01:01:01.1 01:01:01.12 01:01:01.123 01:01:01.1235
--
--@myTime5       @myTime6        @myTime7
---------------- --------------- ----------------
--01:01:01.12346 01:01:01.123457 01:01:01.1234567

DROP TABLE myTable
Um tipo de dados time pode ser criado como uma coluna em uma tabela. O script T-SQL DROP TABLE myTable na Figura 4 cria uma tabela chamada myTable1 e adiciona três colunas de hora à tabela. Em seguida, um registro é inserido na tabela e o conteúdo desta é exibido usando uma instrução SELECT.
Figure 4 Create myTable1 (Close Figure 4)
USE TempDB
GO

CREATE TABLE myTable1
(
    myTime1 time(1),
    myTime2 time(2),
    myTime3 time(3)
)
GO

INSERT INTO myTable1
VALUES('01:30:01.1234567',
       '02:34:01.1234567',
       '03:01:59.1234567')

SELECT * from myTable1

--Results
--myTime1    myTime2     myTime3
------------ ----------- ------------
--01:30:01.1000000 02:34:15.1200000 03:01:59.1230000

DROP TABLE myTable1

Datetimeoffset e Datetime2
O tipo de dados datetimeoffset proporciona reconhecimento do fuso horário. O tipo de dados time não contém fuso horário e, assim, funciona somente de acordo com a hora local. No entanto, na economia globalizada, costuma ser necessário saber qual é a relação entre as horas em áreas diferentes do mundo. A diferença de fuso horário é indicada como + ou - hh:mm.
O código cria uma variável datetimeoffset e a inicializa de acordo com o valor time 8:52 A.M. Hora Oficial do Pacífico:
DECLARE @date DATETIMEOFFSET = '2007-11-26T08:52:00.1234567-08:00'
PRINT @date
--Results
--2007-11-26 08:52:00.1234567 -08:00
A cadeia de caracteres que inicializa a variável datetimeoffset (@date no script) é formatada de maneira especial, organizada do elemento mais significativo para o menos significativo. Uma única letra T maiúscula separa os elementos date e time. Um sinal de subtração separa os elementos time do fuso horário. Não há nenhum espaço entre o sinal de subtração e os elementos time ou time zone. Esse é um dos dois formatos ISO 8601 suportados pelo tipo de dados datetimeoffset. (ISO 8601 é um padrão internacional que representa valores de data e hora.)
A precisão do componente time é especificada exatamente da mesma forma que o tipo de dados time, usando os mesmos sete dígitos como padrão caso não seja especificada. O intervalo suportado é o mesmo.
O tipo de dados datetime2 é uma extensão do tipo datetime original. Ele dá suporte a um intervalo de datas maior e a mais precisão fracionária em segundos, além de lhe permitir especificar essa precisão. O intervalo de datas do tipo datetime2 é de 1º de janeiro de 1.000 até 31 de dezembro de 9.999, em comparação com o intervalo de 1º de janeiro de 1.753 até 31 de dezembro de 9.999 do datetime original. Assim como acontece com o tipo time, são fornecidos sete segundos de precisão fracionária. O tipo datetime original fornecia três dígitos de precisão e um intervalo de hora entre 00:00:00 e 23:59:59.999. Veja como criar uma variável datetime2 e inicializá-la de acordo com a data e a hora do servidor local:
DECLARE @datetime2 DATETIME2 = GetDate();
PRINT @datetime2

--Results
--2007-11-26 09:39:04.1370000
A seguir, analisarei o novo tipo de dados hierarchyid. Esse tipo de dados funciona com a relação entre os elementos de dados de uma tabela, e não dados específicos de data e hora.

O tipo de dados Hierarchyid
O tipo de dados hierarchyid lhe permite estabelecer relações entre elementos de dados dentro de uma tabela, especificamente para representar uma posição em uma hierarquia. Para explorar esse tipo de dados, comecemos criando o banco de dados MyCompany e preenchendo-o com dados do funcionário por meio do script na Figura 5.
Figure 5 Create and populate the MyCompany database (Close Figure 5)
USE MASTER
GO

CREATE DATABASE MyCompany
GO
USE MyCompany
GO

--Create a table called employee that will store
--the data for the employees for MyCompany.

CREATE TABLE employee
(
    EmployeeID int NOT NULL,
    EmpName    varchar(20) NOT NULL,
    Title      varchar(20) NULL,
    Salary     decimal(18, 2) NOT NULL,
    hireDate   datetimeoffset(0) NOT NULL,
)
GO

--These statements will insert the data for the employees of MyCompany.

INSERT INTO employee
VALUES(6,   'David',  'CEO', 35900.00, '2000-05-23T08:30:00-08:00')

INSERT INTO employee
VALUES(46,  'Sariya', 'Specialist', 14000.00, '2002-05-23T09:00:00-08:00')

INSERT INTO employee
VALUES(271, 'John',   'Specialist', 14000.00, '2002-05-23T09:00:00-08:00')

INSERT INTO employee
VALUES(119, 'Jill',   'Specialist', 14000.00, '2007-05-23T09:00:00-08:00')

INSERT INTO employee
VALUES(269, 'Wanida', 'Assistant', 8000.00, '2003-05-23T09:00:00-08:00')

INSERT INTO employee
VALUES(272, 'Mary',   'Assistant', 8000.00, '2004-05-23T09:00:00-08:00')
GO
--Results
--EmployeeID  EmpName Title      Salary   hireDate
------------- ------- ---------- -------- --------------------------
--6           David   CEO        35900.00 2000-05-23 08:30:00 -08:00
--46          Sariya  Specialist 14000.00 2002-05-23 09:00:00 -08:00
--271         John    Specialist 14000.00 2002-05-23 09:00:00 -08:00
--119         Jill    Specialist 14000.00 2007-05-23 09:00:00 -08:00
--269         Wanida  Assistant  8000.00  2003-05-23 09:00:00 -08:00
--272         Mary    Assistant  8000.00  2004-05-23 09:00:00 -08:00
A Figura 6 mostra o banco de dados simples resultante que consiste em uma tabela de funcionários única. Essa tabela de funcionários no banco de dados MyCompany não tem nenhuma estrutura imposta. Isso é normal para um banco de dados relacional, porque a estrutura é imposta dinamicamente por um aplicativo por meio da consulta e do código de processamento.
Figure 6 Tabela de funcionários MyCompany
Figure 6 Tabela de funcionários MyCompany
Já os dados corporativos normalmente têm um tipo de estrutura inerente. Por exemplo, toda empresa tem uma estrutura hierárquica como, por exemplo, a mostrada para MyCompany na Figura 7. Todos os funcionários da MyCompany respondem a David, o CEO. Alguns deles respondem diretamente, como é o caso de Jill. Outros, a exemplo de Mary, respondem por meio de um intermediário. Em termos de programação, a estrutura hierárquica da MyCompany é conhecida como árvore por conta da forma a que ela se assemelha. David, no topo, não responde a ninguém; ele é o pai ou ancestral. Os funcionários que respondem a David estão abaixo dele. Esses nós são conhecidos como filhos ou descendentes. David pode ter quantos descendentes forem necessários para representar seus subordinados diretos.
Figure 7 Estrutura organizacional da MyCompany
Figure 7 Estrutura organizacional da MyCompany
O script na Figura 8 recria o banco de dados MyCompany usando o tipo de dados hierarchyid, estabelecendo uma relação que corresponda à estrutura hierárquica da MyCompany. A instrução ALTER TABLE é usada para inicialmente adicionar uma coluna do tipo hierarchyid. Em seguida, o nó referente a David é inserido usando o método GetRoot de hierarchyid. Depois, os subordinados de David são adicionados à árvore por meio do método GetDescendant.
Figure 8 Rebuild the database using hierarchyid (Close Figure 8)
DELETE employee
GO
ALTER TABLE employee ADD OrgNode hierarchyid NOT NULL
GO

DECLARE @child hierarchyid,
@Manager hierarchyid = hierarchyid::GetRoot()

--The first step is to add the node at the top of the
--tree. Since David is the CEO his node will be the
--root node.

INSERT INTO employee
VALUES(6,   'David',  'CEO', 35900.00,
       '2000-05-23T08:30:00-08:00', @Manager)

--The next step is to insert the records for
--the employees that report directly to David.

SELECT @child = @Manager.GetDescendant(NULL, NULL)

INSERT INTO employee
VALUES(46,  'Sariya', 'Specialist', 14000.00,
       '2002-05-23T09:00:00-08:00', @child)

SELECT @child = @Manager.GetDescendant(@child, NULL)
INSERT INTO employee
VALUES(271, ‚John',   ‚Specialist', 14000.00,
       '2002-05-23T09:00:00-08:00', @child)

SELECT @child = @Manager.GetDescendant(@child, NULL)
INSERT INTO employee
VALUES(119, ‚Jill',   ‚Specialist', 14000.00,
       ‚2007-05-23T09:00:00-08:00', @child)

--We can now insert the employee that reports to
--Sariya.
SELECT @manager = OrgNode.GetDescendant(NULL, NULL)
FROM employee WHERE EmployeeID = 46

INSERT INTO employee
VALUES(269, ‚Wanida', ‚Assistant', 8000.00,
       ‚2003-05-23T09:00:00-08:00', @manager)

--Next insert the employee that report to John.
SELECT @manager = OrgNode.GetDescendant(NULL, NULL)
FROM employee WHERE EmployeeID = 271

INSERT INTO employee
VALUES(272, ‚Mary',   ‚Assistant', 8000.00,
       ‚2004-05-23T09:00:00-08:00', @manager)
GO
Assim que os registros do banco de dados forem adicionados e a hierarquia for construída, o conteúdo da tabela de funcionários poderá ser exibido com uma consulta como esta:
SELECT EmpName, Title, Salary, OrgNode.ToString() AS OrgNode
FROM employee ORDER BY OrgNode
GO
--Results
--EmpName  Title      Salary    OrgNode
---------- ---------- --------- -------
--David    CEO        35900.00  /
--Sariya   Specialist 14000.00  /1/
--Wanida   Assistant  8000.00   /1/1/
--John     Specialist 14000.00  /2/
--Mary     Assistant  8000.00   /2/1/
--Jill     Specialist 14000.00  /3/
OrgNode é a coluna de hierarchyid. Cada caractere de barra / no resultado indica um nó na árvore hierárquica. David está na raiz, indicada por uma única barra. Sariya, John e Jill respondem a David e apresentam duas barras, o que indica serem o segundo nó da hierarquia. Os números 1, 2 ou 3 mostram a ordem do respectivo nó filho. O sistema é muito flexível. Os nós filhos podem ser removidos, inseridos ou adicionados conforme necessário. Se adicionássemos um funcionário entre John e Jill, por exemplo, ele seria listado no conjunto de resultados como: /2.1/.
Para responder à pergunta, por exemplo, "Quem responde a Sariya?", é possível criar uma consulta como mostrado no seguinte código T-SQL:
DECLARE @Sariya hierarchyid

SELECT @Sariya = OrgNode
FROM employee WHERE EmployeeID = 46

SELECT EmpName, Title, Salary, OrgNode.ToString() AS 'OrgNode'
FROM employee
WHERE OrgNode.GetAncestor(1) = @Sariya
GO
--Results
--EmpName Title     Salary  OrgNode
--------- --------- ------- -------
--Wanida  Assistant 8000.00 /1/1/
A consulta usa o método GetAncestor de hierarchyid, que retorna o pai do nó de hierarchyid atual. No código anterior, a variável @Sariya está definida como sendo o nó da hierarquia de Sariya. Isso porque Sariya é o ancestral direto de qualquer funcionário que responda a ela. Por isso, escrever uma consulta que retorne os funcionários que respondem diretamente a Sariya consiste em recuperar o nó de Sariya da árvore e selecionar todos os funcionários cujo ancestral seja o nó referente a Sariya.
As colunas de hierarchyid tendem a ser muito compactas porque o número de bits necessários à representação de um nó em uma árvore depende do número médio de filhos no nó (normalmente conhecido como fan-out do nó). Por exemplo, um novo nó em uma hierarquia organizacional de 100 mil funcionários, com um fan-out médio de seis níveis, exigiria cerca de cinco bytes de armazenamento.
O tipo de dados hierarchyid fornece vários métodos que facilitam o trabalho com dados hierárquicos. Um resumo desses métodos é mostrado na Figura 9. Há informações detalhadas sobre todos os métodos disponíveis em SQL Server Books Online (msdn2.microsoft.com/ms130214).
Figure 9 Methods provided by the hierarchyid data type (Close Figure 9)

Método | Descrição
GetAncestor | Retorna um hierarchyid que representa o º ancestral deste nó de hierarchyid.
GetDescendant | Retorna um nó filho deste nó de hierarchyid.
GetLevel | Retorna um inteiro que representa até onde se estende este nó de hierarchyid em toda a hierarquia.
GetRoot | Retorna o nó de hierarchyid raiz da árvore hierárquica. Estático.
IsDescendant | Retorna verdadeiro caso o nó filho passado seja um descendente deste nó de hierarchyid.
Parse | Converte a representação de uma cadeia de caracteres de uma hierarquia em um valor hierárquico. Estático.
Reparent | Move um nó de uma hierarquia para um novo local dentro dela.
ToString | Retorna uma cadeia de caracteres que contém a representação lógica de hierarchyid.

Tipos de dados espaciais
Espaciais são dados que identificam formas e locais geográficos, essencialmente na Terra. Entre eles podem estar pontos de referência, estradas e até mesmo o local de uma empresa. O SQL Server 2008 fornece os tipos de dados geography e geometry para trabalhar com esses tipos de dados.
O tipo de dados geography trabalha com informações sobre o arredondamento da terra. O modelo de terra arredondada leva em conta a superfície curvada da terra em seus cálculos. As informações sobre a posição são fornecidas em longitude e latitude. Esse modelo é bem adequado a aplicações como transporte transoceânico, planejamento militar e de curto alcance relacionadas à superfície terrestre. Trata-se do modelo a ser usado se os dados forem armazenados em latitudes e longitudes.
O tipo de dados geometry trabalha com o modelo plano ou de achatamento da terra. Nesse modelo, a terra é tratada como uma projeção achatada começando em um ponto conhecido. Como o modelo de terra achatada não leva em conta a curvatura terrestre, ele é essencialmente usado na descrição de distâncias curtas – por exemplo, em um aplicativo de banco de dados que mapeia o interior de um edifício.
Os tipos geography e geometry são criados a partir de objetos vetoriais, especificados nos formatos WKT (Well-Known Text) ou WKB (Well-Known Binary). Esses são os formatos de transporte para dados espaciais descritos pela Especificação de recursos simples para SQL do OGC (Open Geospatial Consortium). A Figura 10 lista os sete tipos de objetos vetoriais para os quais o SQL Server 2008 dá suporte.
Figure 10 Vector objects supported by SQL Server 2008 (Close Figure 10)

Objeto | Descrição
Point | Um local.
MultiPoint | Uma série de pontos.
LineString | Uma série de zero ou mais pontos ligados por linhas.
MultiLineString | Um conjunto de linestrings.
Polygon | Uma região contígua descrita por um conjunto de linestrings fechadas.
MultiPolygon | Um conjunto de polygons.
GeometryCollection | Uma coleção de tipos geometry.
Para criar um tipo geography com um ou mais objetos vetoriais, você deve primeiramente declarar o tipo no script T-SQL, como mostra a Figura 11. Em seguida, você chama um dos métodos listados na Figura 12, passa a cadeia de caracteres do objeto vetorial e a SRID (Spatial Reference ID). A SRID é o sistema de identificação de referência espacial definido pelo European Petroleum Survey Group. Ela faz parte de um conjunto de padrões desenvolvidos para cartografia, pesquisa e armazenamento geodésico de dados. Cada SRID identifica um tipo específico de elipsóide a ser usado nos cálculos geográficos. Ela é necessária porque a terra não é uma esfera perfeita. O SQL Server 2008 só pode realizar cálculos usando SRIDs idênticas.
Figure 12 Construct objects for geography and geometry (Close Figure 12)

Método | Descrição
STGeomFromText | Cria qualquer tipo de instância de geography usando o texto de entrada.
STPointFromText | Cria uma instância Point de geography usando o texto de entrada.
STMPointFromText | Cria uma instância MultiPoint de geography usando o texto de entrada.
STLineFromText | Cria uma instância LineString de geography usando o texto de entrada.
STMLineFromText | Cria uma instância MultiLineString de geography usando o texto de entrada.
STPolyFromText | Cria uma instância Polygon de geography usando o texto de entrada.
STMPolyFromText | Cria uma instância MultiPolygon de geography usando o texto de entrada.
STGeomCollFromText | Cria uma instância GeometryCollection de geography usando o texto de entrada.
Figure 11 Create points, lines, and polygon geometry (Close Figure 11)
DECLARE @geo1 geometry
SELECT @geo1 = geometry::STGeomFromText('POINT (3 4)', 0)
PRINT @geo1.ToString()

DECLARE @geo2 geometry
SELECT @geo2 = geometry::Parse('POINT(3 4 7 2.5)')
PRINT @geo2.STX;
PRINT @geo2.STY;
PRINT @geo2.Z;
PRINT @geo2.M;

DECLARE @geo3 geography;
SELECT @geo3 = geography::STGeomFromText(
    'LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326);
SELECT @geo3.ToString();

--Results
--POINT (3 4)
--3
--4
--7
--2.5

DECLARE @gx geometry;
SET @gx = geometry::STPolyFromText(
    'POLYGON ((5 5, 10 5, 10 10, 5 5))', 0);
PRINT @gx.ToString();
--Results
--POLYGON ((5 5, 10 5, 10 10, 5 5))

Diferenças entre geography e geometry
Como os tipos de dados geography e geometry servem para trabalhar com tipos diferentes de dados, há algumas diferenças a serem observadas. Com o tipo de dados geometry, as distâncias e as áreas recebem a mesma unidade de medida das coordenadas das instâncias. Por exemplo, a distância entre os pontos (0,0) e (6,8) será sempre de 10 unidades. Não é esse o caso com o tipo geography, que funciona com coordenadas elipsoidais expressas em graus latitudinais e longitudinais.
O tipo de dados GEOMETRY retorna resultados incoerentes quando as coordenadas são expressas como pares de latitude/longitude. O seguinte código T-SQL calcula a distância entre os pontos (90 0) e (90 180). Como ambos se referem ao Pólo Norte, a distância entre eles deve ser 0. No caso de GEOMETRY, a distância calculada é de 180.
DECLARE @g1 GEOMETRY, @g2 GEOMETRY, @g3 GEOGRAPHY, @g4 GEOGRAPHY
SELECT @g1 = GEOMETRY::STGeomFromText('POINT (90 0)', 0)
SELECT @g2 = GEOMETRY::STGeomFromText('POINT (90 180)', 0)

SELECT @g3 = GEOGRAPHY::STGeomFromText('POINT (90 0)', 4326)
SELECT @g4 = GEOGRAPHY::STGeomFromText('POINT (90 180)', 4326)
SELECT @g2.STDistance(@g1) AS 'GEOMETRY',
       @g4.STDistance(@g3) AS 'GEOGRAPHY';

--Results
--GEOMETRY               GEOGRAPHY
------------------------ ----------------------
--180                    0
A orientação dos dados espaciais também é diferente para os dois tipos de dados. No sistema plano usado pelo tipo de dados geometry, a orientação do polígono não é um fator importante. Por exemplo, um polígono com as coordenadas ((0, 0), (10, 0), (0, 20), (0, 0)) é considerado igual ao polígono ((0, 0), (0, 20), (10, 0), (0, 0)). Porém, no modelo de dados usado pelo tipo de dados geography, um polígono permanece obscuro sem uma orientação especificada. Considere, por exemplo, um anel endocapsular. O polígono descrito por esse anel se refere ao hemisfério norte ou ao hemisfério sul? A questão aqui é que, ao trabalhar com dados geográficos, a orientação e a localização devem ser descritas com precisão.
Também há algumas restrições quanto ao tipo de dados geography do SQL Server 2008. Por exemplo, cada instância de geography deve caber em um único hemisfério. Objetos espaciais maiores não são permitidos, e eles causarão a emissão de ArgumentException. Os tipos de dados geography que exigem duas entradas retornarão NULL se os resultados dos métodos não couberem em um único hemisfério.
O SQL Server fornece vários métodos que possibilitam a realização das operações em instâncias de geography e geometry. A Figura 13 mostra alguns exemplos usando métodos fornecidos pelo SQL Server 2008 para o trabalho com dados espaciais. Por conta de restrições quanto ao espaço, não posso entrar em mais detalhes sobre esse tópico, mas é possível encontrar descrições completas em SQL Server Books Online.
Figure 13 Working with spatial data (Close Figure 13)
DECLARE @gm geometry;
DECLARE @gg geography;
DECLARE @h geography;

SET @gm = geometry::STGeomFromText('POLYGON((0 0, 13 0, 3 3, 0 13, 0 0),(2 2, 2 1, 1 1, 1 2, 2 2))', 0);
SELECT @gm.STArea();

--Results
--38

SET @gg = geography::STGeomFromText('LINESTRING(0 0, 5 5)', 4326);
--Calculate the distance to a point slightly offset from the LINESTRING.
SET @h = geography::STGeomFromText('POINT(4 4)', 4326);
SELECT @gg.STDistance(@h);

--Results
-- 430.182777043046

--Calculate the distance to a point on the LINESTRING.
SET @h = geography::STGeomFromText('POINT(5 5)', 4326);
SELECT @gg.STDistance(@h);

--Results
-- 0

DECLARE @temp table ([name] varchar(10), [geom] geography);

INSERT INTO @temp values ('Point', geography::STGeomFromText('POINT(
5 10)', 4326));
INSERT INTO @temp values ('LineString', geography::STGeomFromText(
'LINESTRING(13 5, 50 25)', 4326));
--Calculate the distance to a point on the LINESTRING.
--Display the number of dimensions for a geography object stored in a --table variable.
INSERT INTO @temp values ('Polygon', geography::STGeomFromText(
'POLYGON((47.653 -122.358, 47.649 -122.348, 47.658 -122.348, 47.658 -122.358, 47.653 -122.358))', 4326));

SELECT [name], [geom].STDimension() as [dim]
FROM @temp;

--Results
--name       dim
------------ -----------
--Point      0
--LineString 1
--Polygon    2
Espero que essas informações sobre os sete novos tipos de dados do SQL Server 2008 tenham sido úteis.

Kelly Wilson é engenheira de software há mais de 20 anos. O nome dela aparece nos créditos de aplicativos em SQL Server, gráficos 3D, jogos e ciências das cores. Atualmente, Kelly é escritora de programação do grupo de SQL Server da Microsoft.


 SQL Server 2008: Desempenho de consultas de data warehouse
SQL Server 2008 Sunil Agarwal and Torsten Grabs and Dr. Joachim Hammer

Desempenho de consultas de data warehouse
Visão geral:
  • Otimização de consultas de junção em estrela
  • Paralelismo de tabela particionada
  • Compactação ROW e PAGE
  • Exibições indexadas alinhadas com a partição

O SQL Server 2008 oferecerá recursos relacionais de data warehouse muito mais eficientes do que os de seu antecessor, mas você talvez ainda esteja se perguntando como usar toda essa nova tecnologia na criação de um data warehouse com bom desempenho destinado a dar apoio a decisões relacionadas a bilhões de linhas. Ou talvez queira saber quais recursos lhe ajudarão a obter o melhor desempenho das consultas relacionadas a consultas e relatórios de apoio à decisão ou que tipo de melhoria no desempenho você pode esperar de fato dessa nova versão do SQL Server®.
Certamente haverá muitas perguntas na medida em que nos aproximarmos do lançamento real. Esperamos que essa análise aprofundada de alguns dos recursos mais importantes de data warehouse relacionados ao desempenho do SQL Server 2008 possa lhe ajudar em sua preparação.

Design do banco de dados lógico: modelagem dimensional
Os aplicativos de linha de negócios transacionais costumam apresentar um esquema de banco de dados normalizado. O design do esquema de banco de dados lógico dos data warehouses relacionais enfatiza menos a normalização. Muitos designs de data warehouse relacionais atuais seguem uma abordagem de modelagem dimensional, popularizada por Ralph Kimball e Margy Ross no livro The Data Warehouse Toolkit: The Complete Guide to Dimensional Modeling.
Caso perca muito tempo lidando com data warehouse, é provável que você já esteja familiarizado com padrões de esquema comuns destinados a data warehouses relacionais (como, por exemplo, os esquemas estrela e floco de neve). A modelagem dimensional difere as tabelas de dimensões das tabelas de fatos. As tabelas de dimensões são as responsáveis pelo armazenamento dos dados mestre (como, por exemplo, produtos, clientes, lojas ou países) e as tabelas de fatos, pelo armazenamento dos dados transacionais (como, por exemplo, ordens, pedidos ou devoluções).
As tabelas de dimensões e de fatos são vinculadas pelas relações de PK (chave primária)/FK (chave estrangeira). Você verá que muitos data warehouses não impõem as restrições de FK como uma forma de manter os requisitos de armazenamento mínimos. Isso evita a sobrecarga de armazenamento dos índices subjacentes e mantém baixo o custo de manutenção da tabela de fatos. As tabelas de dimensões de um data warehouse costumam ser bem pequenas – elas normalmente mantêm milhares ou até muitos milhões de linhas. Por outro lado, a tabela de fatos pode ser muito grande, mantendo centenas de milhões até bilhões de linhas. Por isso, o design lógico realmente precisa prestar mais atenção nos requisitos de armazenamento da tabela de fatos.
O fator tamanho tem implicações quanto à determinação da chave a ser escolhida em uma tabela de dimensões para manter as relações entre as tabelas de fatos e dimensões. As chaves compostas com base na chave de negócios da dimensão – que diz respeito ao identificador do mundo real da entidade representada pela dimensão – normalmente abrangem várias colunas. Você deve saber que se trata de um problema para a chave estrangeira correspondente na tabela de fatos porque a chave composta com várias colunas será repetida em todas as linhas da tabela de fatos.
Como resposta a isso, uma prática comum é usar pequenas chaves alternativas para implementar as relações entre uma tabela de fatos e suas dimensões. A chave alternativa é uma coluna de identidade de tipo inteiro que funciona como uma chave primária artificial da tabela de dimensões. Com a tabela de fatos se referindo à chave alternativa menor, há uma redução significativa nos requisitos de armazenamento das tabelas de fatos maiores. A Figura 1 ilustra um esquema de data warehouse de modelagem dimensional usando tabelas de dimensões e fatos com chaves alternativas.
Figure 1 Exemplo de esquema estrela com uma tabela de fatos e duas tabelas de dimensões
Figure 1 Exemplo de esquema estrela com uma tabela de fatos e duas tabelas de dimensões
O design do esquema floco de neve difunde uma ou muitas dimensões em vários níveis (por exemplo, cliente, país e região para uma dimensão cliente), o que normaliza dimensões maiores que talvez sofram com redundâncias excessivas nos dados. Os níveis são representados por tabelas separadas, dando ao esquema a forma de um floco de neve. Por outro lado, o design do esquema estrela não difunde nenhuma das dimensões nas tabelas. Um esquema estrela tem a forma de uma estrela na qual as tabelas de dimensões são agrupadas próximas à tabela de fatos no centro.
Com os esquemas estrela ou floco de neve de modelagem dimensional, as consultas de apoio à decisão seguem um padrão típico: a consulta seleciona várias medidas de interesse na tabela de fatos, adiciona as linhas de fatos a uma ou a várias dimensões com as chaves alternativas, coloca predicados de filtro nas colunas de negócios das tabelas de dimensões, agrupa uma ou várias colunas de negócios e agrega as medidas recuperadas da tabela de fatos durante um determinado período. A seguir, o padrão, às vezes conhecido como consulta de junção em estrela:
select ProductAlternateKey,
CalendarYear,sum(SalesAmount)
from FactInternetSales Fact
     join DimTime
on Fact.OrderDateKey = TimeKey
     join DimProduct
on DimProduct.ProductKey =
   Fact.ProductKey
where CalendarYear between 2003 and 2004
      and ProductAlternateKey like 'BK%'
group by ProductAlternateKey,CalendarYear

Design físico
Muitas consultas SQL no data warehouse relacional seguirão a estrutura da consulta de junção em estrela. No entanto, as consultas de apoio à decisão normalmente variam conforme o tempo porque os tomadores de decisão estão sempre tentando compreender melhor os dados corporativos fundamentais de novas formas. É por isso que as cargas de trabalho dos data warehouses tendem a apresentar uma alta taxa de consultas ad hoc. Isso torna o design físico para consultas de apoio à decisão e um esquema de data warehouse com dados modelados dimensionalmente algo desafiador.
Com o SQL Server, os designers de data warehouse normalmente começam com um plano gráfico ou design físico que ajustam e refinam com o passar do tempo à medida que as cargas de trabalho evoluem. Você deve se sentir livre para adotar e variar esse plano gráfico de acordo com seu próprio ambiente de data warehouse. Caso você faça isso, não se esqueça, obviamente, das práticas recomendadas para o design físico de banco de dados como, por exemplo, o impacto sobre o desempenho causado pela manutenção do índice em relação a atualizações e os requisitos de armazenamento dos índices.

A tabela de fatos
O design de plano gráfico pretende prever a forma da consulta em estrela típica e cria índices na tabela de fatos. O índice clusterizado da tabela de fatos usa várias colunas de chaves alternativas da dimensão (as colunas de chaves estrangeiras) como chaves de índice. As colunas mais usadas devem estar na lista das chaves de índice. Você talvez queira passar o tempo verificando se isso realmente proporciona um bom caminho de acesso às consultas mais executadas na carga de trabalho.
Além disso, o plano gráfico cria um índice não clusterizado com uma única coluna para cada coluna alternativa (chave estrangeira) da dimensão na tabela de fatos. Ele fornece um caminho de acesso altamente eficiente para consultas que sejam muito seletivas em uma das dimensões.
O objetivo do índice clusterizado é proporcionar um bom desempenho para a maioria das consultas na carga de trabalho. O conjunto de índices não-clusterizados se destina a consultas que recuperam as medidas da tabela de fatos para um cliente ou produto específico. Esses índices não clusterizados garantem que você, por exemplo, não precise examinar a tabela de fatos para poder recuperar dados de vendas referentes a um único cliente.

Tabelas de dimensões
Ao aplicar o design de plano gráfico às tabelas de dimensões, você precisa criar índices para cada uma das tabelas de dimensões. Entre eles estão um índice restrito de palavras primárias não-clusterizado na coluna da chave alternativa da dimensão e um índice clusterizado nas colunas da chave de negócios da entidade da dimensão. Para tabelas de dimensões maiores, você também deve considerar a inclusão de índices não-clusterizados nas colunas mais usadas em predicados altamente seletivos.
O índice clusterizado facilita um ETL (extração, transformação e carregamento) mais eficiente durante a janela de manutenção do data warehouse, que costuma ser um processo em que o tempo é crítico. Com dimensões que mudam mais lentamente, por exemplo, as linhas existentes são atualizadas in-loco, ao passo que as linhas ainda não presentes na dimensão são acrescentadas à tabela de dimensões. Para que haja êxito, esse padrão de acesso exige uma pesquisa com bom desempenho e a atualização da tabela de dimensões no momento do ETL.
O design de projeto gráfico que descrevemos serve como um bom ponto de partida para designs físicos em data warehouses relacionais criados com o SQL Server. Com base nessa instalação de data warehouse relacional típica, podemos explorar novos recursos importantes do SQL Server 2008.

Otimização de consultas de junção em estrela
O processamento da tabela de fatos costuma significar o maior custo da execução de uma consulta de junção em estrela em um data warehouse relacional de modelagem dimensional. É fácil de ver isso porque mesmo as consultas altamente seletivas recuperam uma ordem de magnitude de mais linhas da tabela de fatos do que de qualquer dimensão. Por isso, usar o melhor caminho de acesso até a tabela de fatos é essencial para um bom desempenho da consulta.
Com o SQL Server, o otimizador de consulta escolhe o caminho de acesso com o menor custo estimado de um conjunto de alternativas. No contexto de data warehouse, o principal objetivo é verificar se o otimizador de consulta considera as alternativas atraentes dos caminhos de acesso para o plano de execução da consulta de junção em estrela. O SQL Server inclui várias funcionalidades no otimizador de consulta para fornecer automaticamente planos de execução da consulta de junção em estrela de bom desempenho.
É possível pensar nas consultas de junção em estrela como estando divididas em três classes diferentes, como mostrado na Figura 2. Essas classes amplas também ajudam o mecanismo do SQL Server a identificar as opções de plano apropriadas a essas consultas. O principal conceito no qual o SQL Server se baseia é a seletividade dessas consultas na tabela de fatos. Uma consulta é considerada mais seletiva com menos linhas usadas da tabela de fatos. A porcentagem das linhas recuperadas da tabela de fatos é usada para fornecer a intuição dessas classes de consulta. Essas porcentagens representam valores das implantações de cliente típicas, embora não sejam limites rígidos usados na geração das definições do caminho de acesso.
Figure 2 Intervalos de seletividade para consultas de junção em estrela
Figure 2 Intervalos de seletividade para consultas de junção em estrela
A primeira classe aborda as consultas altamente seletivas, que processam até 10% das linhas na tabela de fatos. A segunda, de seletividade média, consiste em consultas que processam mais de 10% e até 75% das linhas da tabela de fatos. Já as consultas na terceira classe, de baixa seletividade, exigem um processamento de mais de 75% das linhas armazenadas na tabela de fatos. As caixas da figura também realçam as opções do plano de execução da consulta básica em cada classe de seletividade.

Opção de plano com base na seletividade
Como as consultas em estrela de alta seletividade normalmente não recuperam mais de 10% das linhas da tabela de fatos, essas consultas podem conseguir o acesso aleatório à tabela de fatos. Por isso, os planos de consulta dessa classe dependem muito das junções em loop aninhadas com buscas em índices (não-clusterizados) e pesquisas em marcadores da tabela de fatos. Como realizam E/S aleatória na tabela de fatos, elas são executadas por E/S seqüencial porque precisamos recuperar partes maiores da tabela de fatos. Isso gera planos de consulta diferentes porque o número de linhas da tabela de fatos excede um determinado número.
Como as consultas em estrela de seletividade média processam uma parte significativa das linhas na tabela de fatos, junções de hash com verificações da tabela de fatos ou verificações do intervalo da tabela de fatos costumam ser a opção preferencial para o caminho de acesso à tabela. O SQL Server usa filtros de bitmap para melhorar o desempenho dessas junções de hash.
A Figura 3 ilustra como o SQL Server usa esses filtros de bitmap para melhorar o desempenho da junção durante a execução da consulta de junção em estrela. A figura mostra um plano de consulta em duas tabelas de dimensões, Product e Time, que se juntam à tabela de fatos com as chaves alternativas. A consulta usa predicados de filtro como, por exemplo, cláusulas WHERE nas tabelas de dimensões de forma que apenas uma linha se qualifique para cada dimensão. Isso é indicado pelas tabelas vermelhas pequenas próximas aos dois operadores da junção.
Figure 3 Plano de consulta de junção em estrela com processamento de redução das junções
Figure 3 Plano de consulta de junção em estrela com processamento de redução das junções
A implementação de cada junção é uma junção de hash, que permite ao SQL Server usar as informações sobre linhas qualificadas das tabelas de dimensões naquilo que chamamos informações de redução das junções em ambas as tabelas de dimensões. As caixas verdes na figura representam as estruturas de dados das informações de redução das junções. Uma vez preenchido usando as tabelas de dimensões subjacentes, o SQL Server move essas estruturas de dados automaticamente durante a execução da consulta para o operador que processa a tabela de fatos como, por exemplo, uma verificação de tabela. Esse operador usa as informações sobre as linhas da tabela de dimensões para eliminar as linhas da tabela de fatos que não se qualificarão para as condições de junção em relação às dimensões.
O SQL Server remove essas linhas da tabela de fatos já no início do processamento das consultas – depois de recuperar a linha da tabela de fatos. Isso possibilita as economias da CPU e de E/S de disco potencial porque as linhas removidas não precisam ser processadas em mais operadores do plano de consulta. O SQL Server usa uma representação em bitmap para implementar de maneira eficiente as estruturas de dados das informações de redução durante a execução da consulta.

Pipeline de otimização na junção em estrela
O processo de otimização usa heurística padrão na otimização da consulta de junção para gerar um conjunto inicial de alternativas ao plano de execução da consulta. Em seguida, as extensões com objetivos especiais são invocadas para gerar alternativas adicionais ao plano de consulta.
No caso de data warehouse, a extensão detecta esquemas estrela, flocos de neve, além dos padrões de consulta em estrela, e estima a seletividade da consulta com base na tabela de fatos. Caso o esquema e a forma de consulta correspondam aos padrões, o SQL Server adiciona automaticamente mais planos de consulta ao espaço do plano, abordado em seguida pela otimização com base no custo para escolher o plano mais promissor para a execução.
No momento da execução da consulta, o SQL Server também monitora a seletividade real da redução de junções durante o runtime. Caso haja alterações na seletividade, o SQL Server reorganiza as estruturas de dados das informações de redução das junções dinamicamente para que seja aplicada a mais seletiva primeiro.

Heurística da junção em estrela
Muitos designs físicos para data warehouses seguem o esquema estrela, mas não especificam completamente as relações entre as tabelas de fatos e de dimensões, como mencionado anteriormente a respeito das restrições de chave estrangeira, por exemplo. Sem as restrições de chave estrangeira especificadas explicitamente, o SQL Server deve depender da heurística para detectar padrões de consulta do esquema em estrela. A seguinte heurística é aplicada para detectar padrões de consulta da junção em estrela:
  1. A maior das tabelas participantes da junção n-ary é considerada a tabela de fatos. Há restrições adicionais quanto ao tamanho mínimo da tabela de fatos. Por exemplo, mesmo que a tabela maior não exceda um tamanho específico, a junção n-ary não é considerada uma junção em estrela.
  2. Todas as condições das junções binárias em uma consulta de junção em estrela devem ter predicados de igualdade de coluna únicos. As junções devem ser internas. Embora possa parecer algo restritivo, isso abrange a grande maioria das junções entre as tabelas de fatos e de dimensões na chave alternativa em esquemas estrela típicos. Caso uma junção tenha uma condição mais complexa que não corresponda ao padrão descrito acima, ela é excluída da junção em estrela. Uma junção com cinco direções, por exemplo, pode levar a uma junção em estrela com três direções (com duas junções adicionais posteriormente), caso duas delas tenham predicados de junção mais complexos.
Observe que essas regras são heurísticas. Há poucas circunstâncias reais que levarão a heurística a escolher uma tabela de dimensões como sendo a tabela de fatos. Isso influencia a opção, embora não tenha nenhum impacto sobre a correção do plano selecionado. Em seguida, as junções binárias envolvidas em uma junção em estrela são ordenadas por seletividade decrescente. Nesse contexto, a seletividade da junção é definida como uma taxa de cardinalidade de entrada da tabela de fatos e a cardinalidade de resultado da junção – a seletividade da junção indica em que proporção uma dimensão específica reduz a cardinalidade de uma tabela de fatos. Como regra geral, queremos considerar inicialmente as junções de maior seletividade.
O processador de consultas do SQL Server aplica automaticamente a otimização a consultas que sigam o padrão de junção em estrela e as condições já mencionadas quando os planos de consulta resultantes apresentarem custos de consulta estimados atrativos. Por isso, você não precisa fazer nenhuma alteração no aplicativo para aproveitar esse aprimoramento significativo feito no desempenho. No entanto, observe que algumas das otimizações de junção em estrela como, por exemplo, a redução das junções só estão disponíveis no SQL Server Enterprise Edition.

Resultados do desempenho da junção em estrela
Como parte do esforço de desenvolvimento para a otimização da junção em estrela no SQL Server 2008, realizamos vários estudos de desempenho com base em cargas de trabalho de parâmetro de comparação e de clientes reais. Vale a pena observar os resultados de três dessas cargas de trabalho.
Data warehouse da organização de vendas da Microsoft Essa carga de trabalho acompanha o desempenho de um data warehouse usado internamente no apoio à decisão dentro da organização de vendas da Microsoft. Tiramos um instantâneo de amostra do banco de dados cujo tamanho é de aproximadamente 750 GB (inclusive índices). As consultas nessa carga de trabalho são desafiadoras quanto ao processamento porque muitas delas têm mais de dez junções.
Cliente comercial Essa série de experimentos se baseia em um cliente de data warehouse na empresa (com loja convencional e presença online). O cliente é caracterizado por um esquema floco de neve de modelagem dimensional e consultas de junção em estrela canônicas. Usamos cerca de 100 GB de dados brutos para preencher um instantâneo do depósito para os nossos experimentos.
Carga de trabalho de apoio à decisão Essa série de experimentos investiga o desempenho de uma carga de trabalho de apoio à decisão em um banco de dados de modelagem dimensional com 100 GB. A Figura 4 mostra os resultados dessas três cargas de trabalho. A figura indica meios geométricos normalizados do tempo de resposta da consulta em relação a todas as consultas na carga de trabalho. Essa métrica é um bom indicador de qual deve ser o desempenho da consulta durante a execução de uma consulta arbitrária na carga de trabalho. As barras da figura comparam o desempenho da linha de base (1.0) quando não se usa a otimização da junção em estrela de acordo com o desempenho otimizado da junção em estrela. Todas essas execuções foram realizadas com o SQL Server 2008.
Figure 4 Aprimoramentos no desempenho com otimização da junção em estrela
Figure 4 Aprimoramentos no desempenho com otimização da junção em estrela
Como mostra a figura, todas as cargas de trabalho melhoram significativamente, de 12% a 30%. Embora a milhagem individual varie, esperamos que as cargas de trabalho de apoio à decisão no SQL Server Engine melhorem de 15% a 20% com base na extensão das otimizações específicas da junção em estrela novas no SQL Server 2008.

Paralelismo de tabela particionada
Para agilizar o processamento em data warehouses grandes, os administradores de banco de dados normalmente particionam grandes tabelas de fatos por data. Isso coloca os dados em grupos de arquivos diferentes, reduzindo a quantidade de dados a serem pesquisados durante o processamento das linhas dentro um intervalo de dados e também usando o desempenho simultâneo do sistema de discos subjacente quando os grupos são implantados em um grande número de discos físicos.
O SQL Server 2005 introduziu a possibilidade de particionar uma grande relação em partes lógicas menores para melhorar a administração e o gerenciamento de tabelas maiores. Ele também tem sido usado com êxito para melhorar o processamento de consultas, especialmente quando há aplicativos de apoio à decisão maiores.
Infelizmente, alguns clientes que usam o SQL Server 2005 observaram problemas de desempenho associados a consultas nessas tabelas particionadas – em especial, durante a execução em máquinas com vários processadores de memória compartilhada em paralelo. Em meio ao processamento de consultas em paralelo nas tabelas particionadas no SQL Server 2005, talvez haja instâncias quando apenas um subconjunto dos threads disponíveis estiver atribuído para a execução da consulta.
Pense em uma máquina de 64 núcleos na qual as consultas poderiam usar até 64 threads em paralelo e em uma delas atingindo duas partições. Com o SQL Server 2005, ela recebe dois dos 64 threads e, por isso, deve usar apenas 2/64 (3,1%) da energia da CPU da máquina. Observou-se que, em algumas consultas, o desempenho no caso particionado poderia ser dez ou mais vezes pior que com a mesma consulta executada na mesma máquina ou uma versão não-particionada da mesma tabela de fatos.
Devemos observar que o SQL Server 2005 foi otimizado especificamente para consultas que atingem uma única partição. Nesse caso, o processador de consultas atribuirá todos os threads disponíveis para a realização da verificação. Essa otimização especial resultou em uma melhora significativa do desempenho em consultas de partição única executadas em máquinas com vários núcleos, e era natural que os clientes esperassem esse comportamento de consultas que atingissem várias partições.
O novo recurso PTP (paralelismo de tabela particionada) do SQL Server 2008 melhora o desempenho da consulta no caso particionado usando melhor a capacidade de processamento do hardware existente independentemente de quantas partições são atingidas por uma consulta ou do tamanho relativo das partições individuais. Em um cenário de data warehouse típico com uma tabela de fatos particionada, os usuários podem notar uma melhoria significativa relacionada a consultas em execução nos planos paralelos, especialmente se o número de núcleos de processador disponíveis for maior que o número de partições afetadas pela consulta. E esse novo recurso funciona prontamente sem qualquer tipo de ajuste ou de configuração.
Digamos que haja uma tabela de fatos representando os dados de venda organizados por data em quatro partições. O diagrama na Figura 5 lhe ajudará a visualizar esse exemplo. Observe que, em vez de um único índice clusterizado para todo o intervalo de datas como acontece no caso não-particionado, normalmente há um índice clusterizado na coluna de data para cada partição da tabela de fatos. Agora suponhamos que a consulta Q resuma as vendas referentes aos últimos sete dias. Na medida em que novos dados de vendas continuarem entrando na tabela de fatos por meio da última partição (identificada como P4), será provável que a consulta continue atingindo partições diferentes de acordo com o momento em que for executada. Isso está ilustrado na primeira linha do diagrama com a forma com que a consulta Q1 atinge uma única partição, ao passo que a consulta Q2 atinge duas partições, porque os dados relevantes no momento da execução se estendem pelas partições P3 e P4.
Figure 5 O novo recurso PTP em funcionamento
Figure 5 O novo recurso PTP em funcionamento
Agora suponhamos que haja oito threads disponíveis. A execução de Q1 e Q2 no SQL Server 2005 pode gerar algum tipo de comportamento inesperado. O SQL Server 2005 conta com uma otimização por meio da qual se o otimizador souber, durante o momento da compilação, que apenas uma partição será atingida pela consulta, essa partição será tratada como uma tabela não-particionada única, e será gerado um plano que acessa a tabela com todos os threads disponíveis.
O resultado é que o Q1 envolvendo uma única partição (P3) acarretará um plano processado por oito threads (não mostrados). No caso do Q2, que atinge duas participações, o executor atribui um único thread a cada partição, mesmo que o hardware subjacente tenha threads adicionais disponíveis. Por isso, o Q2 só usará uma fração muito pequena da energia da CPU disponível, sendo provável que a execução seja significativamente mais lenta do que do Q1.
A execução do Q1 e do Q2 no SQL Server 2008 resulta em um melhor uso do hardware disponível, além de um melhor desempenho e de um comportamento mais previsível. No caso do Q1, o executor atribui novamente todos os oito threads disponíveis ao processamento dos dados em P2 (não mostrados). Enquanto isso, o Q2 resultará em um plano paralelo no qual o executor atribui todos os threads disponíveis a P3 e a P4 no estilo round-robin, produzindo o efeito ilustrado na linha inferior do diagrama em que cada uma das duas partições recebe quatro threads. A CPU permanece totalmente usada, e o desempenho de Q1 e Q2 são comparáveis.
Essa alocação round-robin dos threads permite que as consultas sejam realizadas de maneira cada vez melhor com os mais núcleos de processadores existentes em comparação com o número de partições acessadas pela consulta. Porém, infelizmente há casos em que a alocação dos threads para as partições não é tão simples quanto nesse exemplo.
Os ganhos de desempenho do SQL Server 2008 em relação ao SQL Server 2005 no cenário da tabela particionada em uma máquina de processadores com vários núcleos estão mais bem ilustrados na Figura 6. Esse gráfico curioso realça o desempenho da verificação em tabelas particionadas. Nesse teste específico, que foi realizado em um sistema com 64 núcleos e 256 GB de RAM, particionamos uma tabela única de 121 GB em 11 partições de 11 GB cada. Para o conjunto de testes descrito na figura, usamos uma organização de arquivos em heap com inicializações de buffer a frio e a quente. Todas as consultas realizam verificações simples nos dados.
Figure 6 Desempenho da verificação do SQL Server com o novo recurso PTP habilitado
Figure 6 Desempenho da verificação do SQL Server com o novo recurso PTP habilitado
O eixo y mostra o tempo de resposta (segundos) e o eixo x indica o grau de paralelismo (DOP), análogo ao número de threads atribuídos à consulta. Como é possível ver, tanto no caso da inicialização a frio quanto da inicialização a quente, os tempos de resposta continuam diminuindo até DOP chegar a 22. Nesse ponto, o sistema de E/S se torna saturado para o caso da inicialização a frio. Isso acontece devido ao fato da consulta usada no exemplo ser vinculada a E/S. Em mais cargas de trabalho vinculadas à CPU, essa limitação talvez não exista ou ocorra em DOPs mais altos.
No entanto, a curva que representa o caso da inicialização a quente continua mostrando diminuições no tempo de resposta enquanto os níveis de DOP aumentam. No SQL Server 2005, ambas as curvas começariam a cair próximas do DOP 11 porque o número de threads por partição estaria limitado a 1 em caso de haver várias partições.
É importante ressaltar que, na prática, o ganho em tempos de resposta em relação a números de DOP cada vez maiores jamais é linear. Na verdade, o comportamento esperado é mais que uma função de etapa – ele reflete a realidade de que a consulta essencialmente aguarda a subparte mais lenta. Dessa forma, por exemplo, a simples inclusão de mais um thread a uma verificação não irá melhorar o tempo de conclusão de uma consulta até que todas as verificações restantes tenham recebido threads adicionais que as proporcionem também uma conclusão mais rápida.
Realizamos experimentos adicionais para testar o novo comportamento do PTP em vários outros hardwares e configurações de arquivo. Com isso, observamos um comportamento semelhante em termos de colocação de escala da produtividade à medida que o DOP excede um thread/partição.
Por fim, mas não menos importante, o novo recurso PTP do SQL Server 2008 também aumenta a legibilidade dos planos de consulta e possibilita um maior aprofundamento na execução de determinadas cargas de trabalho. Por exemplo, como parte do recurso PTP, a forma na qual os planos em paralelo e em série são representados no XML do plano de execução foi melhorada e as informações fornecidas sobre o particionamento nos planos de execução do tempo de compilação e do runtime.

Compactação de dados
À medida que businesses intelligence se torna cada vez mais comum, as empresas estão colocando mais e mais dados nos data warehouses para análise. O resultado é um crescimento exponencial no tamanho dos dados gerenciados. Em 1995, a primeira pesquisa feita pela Winter Corporation sobre o tamanho do banco de dados indicava que o maior sistema do mundo apresentava um terabyte de dados. Dez anos depois, e o maior banco de dados era aproximadamente 100 vezes maior. O fato mais impressionante é que o tamanho dos data warehouses triplica a cada dois anos. Isso gera novos desafios em termos do gerenciamento dessas grandes quantidades de dados e do fornecimento de níveis aceitáveis de desempenho para consultas de data warehouse. Essas consultas costumam ser complexas, envolvendo muitas junções e agregações, e acessam grandes quantidades de dados. E não é algo incomum muitas consultas na carga de trabalho serem vinculadas a E/S.
A compactação de dados nativos pretende resolver esse problema. O SQL Server 2005 SP2 apresentou um novo formato de armazenamento de comprimento variável, o formato de armazenamento vardecimal, para dados decimais e numéricos. Esse novo formato de armazenamento pode reduzir o tamanho dos bancos de dados de maneira significativa. Já as economias de espaço podem ajudar a melhorar o desempenho das consultas vinculadas a E/S de duas formas. Primeiro, há poucas páginas a serem lidas e, segundo, como os dados são mantidos compactados no pool do buffer, isso aumenta a expectativa de vida da página (em outras palavras, aumenta as chances de que a página solicitada seja encontrada no buffer). Obviamente, a economia de espaço obtida com a compactação de dados apresenta, de fato, um custo de CPU por conta do processo de compactação e descompactação dos dados.
O SQL Server 2008 aproveita o formato de armazenamento vardecimal, fornecendo dois tipos de compactação: ROW e PAGE. A compactação ROW estende o formato de armazenamento vardecimal armazenando todos os tipos de dados de comprimento fixo em um formato de armazenamento de comprimento variável.
Alguns exemplos dos tipos de dados de comprimento fixo são integer, char e float. Mesmo que o SQL Server armazene esses tipos de dados em formato de comprimento variável, a semântica dos tipos de dados permanecerá inalterada (um tipo de dados continua sendo o tipo de dados de comprimento fixo, do ponto de vista do aplicativo). Portanto, isso significa ser possível obter os benefícios da compactação de dados sem exigir nenhuma alteração nos aplicativos.
Já a compactação PAGE minimiza a redundância de dados em colunas de uma ou mais linhas em uma determinada página. Ela usa uma implementação própria do algoritmo LZ78 (Lempel-Ziv), armazenando os dados redundantes apenas uma vez na página e, em seguida, os referenciando nas várias colunas. Observe que quando você usa a compactação PAGE, a compactação ROW também é incluída, na verdade.
As compactações ROW e PAGE podem ser habilitadas em uma tabela ou em um índice, ou em uma ou mais partições das tabelas e dos índices particionados. Isso lhe dá total flexibilidade sobre a escolha de tabelas, índices e partições para compactação, o que permite que você obtenha o equilíbrio certo entre a economia de espaço e o impacto sobre a CPU. A Figura 7 ilustra isso usando uma tabela de vendas particionada de formas diferentes com índices alinhados.
Figure 7 Tabela particionada com configurações de compactação diferentes
Figure 7 Tabela particionada com configurações de compactação diferentes
Cada partição representa um trimestre, com outubro-dezembro sendo o último deles. Suponhamos que as duas primeiras partições não sejam acessadas com freqüência, que a terceira apresenta atividade moderada e a última seja a mais ativa. Nesse caso, uma configuração possível é habilitar a compactação PAGE nas duas primeiras partições a fim de obter o máximo em economia de espaço com o mínimo impacto sobre o desempenho da carga de trabalho, além da compactação ROW na terceira partição e nenhuma compactação na última.
É possível habilitar a compactação, online ou offline, usando as instruções DDL (linguagem de definição de dados) Alter Table ou Alter Index. O SQL Server também fornece um procedimento armazenado para estimar a economia de espaço. As economias de espaço obtidas dependerão da distribuição de dados e do esquema do objeto que está sendo compactado.
Com base nos resultados vistos nos testes com muitos bancos de dados de clientes, parece que a maioria deles será capaz de reduzir o tamanho do banco de dados entre 50% e 65% e de melhorar o desempenho das consultas vinculadas a E/S de maneira significativa. No entanto, estimar o impacto sobre o desempenho das consultas vinculadas à CPU é mais complicado e depende da complexidade da consulta. No SQL Server, o custo da descompactação só incorre quando há o acesso a índices ou tabelas. Caso o custo de CPU relativo dos operadores de verificação seja baixo em comparação com o custo geral de CPU da consulta, como normalmente acontece no cenário de data warehouse, você deve observar um impacto inferior a 20% a 30% sobre o uso da CPU.

Exibições indexadas alinhadas com a partição
No SQL Server 2008, as exibições indexadas alinhadas com a partição lhe permitem criar e gerenciar agregações resumidas no data warehouse relacional com mais eficiência e usá-las em cenários nos quais você não poderia usá-las efetivamente antes. Isso melhora o desempenho da consulta. Em um cenário típico, você conta com uma tabela de fatos particionada por data. As exibições indexadas (ou agregações resumidas) são definidas nessa tabela para ajudar a agilizar as consultas. Quando você alterna uma nova partição, as partições correspondentes das exibições indexadas alinhadas com a partição definidas na tabela particionada mudam também, e fazem isso automaticamente.
Há uma melhoria significativa em relação ao SQL Server 2005, em que você deve descartar todas as exibições indexadas definidas em uma tabela particionada antes de usar a operação ALTER TABLE SWITCH a fim de entrar ou sair de uma partição. O recurso das exibições indexadas alinhadas com a partição do SQL Server 2008 lhe oferece os benefícios das exibições indexadas em tabelas particionadas maiores ao mesmo tempo em que evita o custo de recriação das agregações em uma tabela particionada inteira. Entre esses benefícios estão a manutenção automática das agregações e a correspondência da exibição indexada.

Escalonamento de bloqueios no nível da partição
O SQL Server dá suporte ao particionamento por intervalos, que lhe permite particionar os dados por questões de gerenciamento ou agrupar os dados de acordo com o padrão de uso. Dessa forma, por exemplo, os dados de vendas podem ser particionados em limites mensal ou trimestral. É possível mapear uma partição para seu próprio grupo de arquivos e, por sua vez, mapear o grupo de arquivos para um conjunto de arquivos. Isso oferece dois benefícios importantes. Primeiro, é possível fazer o backup e restaurar uma partição como uma unidade independente. Segundo, você pode mapear um grupo de arquivos para um subsistema de E/S lento ou rápido dependendo do padrão de uso ou da carga de consulta.
Um ponto interessante aqui é o padrão de acesso dos dados. As consultas e as operações DML talvez só precisem acessar ou manipular um subconjunto de partições. Portanto, caso esteja analisando, por exemplo, os dados de vendas referentes a 2004, você precisa apenas acessar as partições relevantes e o ideal é que você não seja afetado, exceto em relação aos recursos do sistema pelas consultas que acessam os dados de outras partições simultaneamente. No SQL Server 2005, o acesso simultâneo dos dados em outras partições pode levar a um bloqueio da tabela com impacto sobre o acesso às demais partições.
Para minimizar essa interferência, o SQL Server 2008 apresenta uma opção em nível de tabela para controlar o escalonamento de bloqueios no nível da tabela ou da partição. Por padrão, o escalonamento de bloqueios é habilitado no nível da tabela, como acontece no SQL Server 2005. No entanto, é possível substituir a política de escalonamento de bloqueios da tabela. Assim, por exemplo, você pode definir o escalonamento de bloqueios da seguinte forma:
Alter table <mytable> set (LOCK_ESCALATION = AUTO)
Esse comando instrui o SQL Server a escolher a granularidade do escalonamento de bloqueios apropriada ao esquema da tabela. Caso a tabela não esteja particionada, o escalonamento de bloqueios está no nível da TABELA. Caso a tabela esteja particionada, a granularidade do escalonamento de bloqueios está no nível da partição. Essa opção também é usada como uma dica pelo SQL Server para desqualificar a granularidade de bloqueio no nível da tabela.

Conclusão
Esta é apenas uma visão geral resumida dos recursos aprimorados encontrados no SQL Server 2008 que lhe ajudarão a obter um melhor desempenho em relação às consultas de apoio à decisão em data warehouses relacionais. Mas lembre-se de que, embora tempos de resposta competitivos para as consultas de apoio à decisão sejam essenciais, há outros requisitos importantes que estão além do escopo deste artigo.
Entre algumas das funcionalidades adicionais relacionadas ao data warehouse relacional estão:
  • Suporte à sintaxe MERGE em T-SQL para atualizar, excluir ou inserir dados (dimensionais) com uma instrução e uma viagem de ida e volta ao banco de dados.
  • Desempenho de registro em log do mecanismo do SQL Server para possibilitar um ETL mais eficiente.
  • Grupos configurados de forma a facilitar a escrita de consultas de apoio à decisão agregadas em T-SQL.
  • Compactação de backup para reduzir os requisitos de E/S para backups completos e incrementais.
  • Governança de recursos para controlar a alocação dos recursos a cargas de trabalho diferentes.
Incentivamos você a consultar informações mais detalhadas sobre todos esses recursos interessantes na página da Web do SQL Server, disponível em microsoft.com/sql.
Gostaríamos de agradecer a Boris Baryshnikov, Prem Mehra, Peter Zabback e Shin Zhang por fornecerem sua experiência técnica.

Sunil Agarwal é gerente de programa sênior do grupo de mecanismo de armazenamento do SQL Server na Microsoft. Ele é responsável por simultaneidade, índices, tempdb, LOBS, capacidade de suporte e importações/exportações em massa.
Torsten Grabs é gerente geral sênior de programa do mecanismo de armazenamento de núcleo na equipe do Microsoft SQL Server. Ele possui PhD em sistemas de bancos de dados e tem dez anos de experiência trabalhando com o SQL Server.
Dr. Joachim Hammer é gerente de programa do grupo de processamento de consultas na Microsoft. Ele é especialista na otimização de consultas para aplicativos de data warehouse em larga escala, bem como em consultas distribuídas, em ETL e na integração de informações.


 SQL Server: Minimize o bloqueio no SQL Server
SQL Server Cherié Warren

Minimize o bloqueio no SQL Server
Visão geral:
  • Por que o escalonamento de bloqueios ocorre
  • Evitando bloqueios desnecessários
  • Otimizando suas consultas
  • Monitorando o impacto do bloqueio do desempenho

O bloqueio é necessário para o suporte a atividades de leitura e de gravação simultâneas em um banco de dados, mas pode afetar de forma negativa o desempenho do sistema, às vezes de maneira sutil. Neste artigo, examinarei como otimizar seu banco de dados do SQL Server 2005 ou SQL Server 2008 para minimizar
o bloqueio, bem como para monitorar o sistema para que você possa entender melhor como é o impacto do bloqueio sobre o desempenho.

Bloqueio e escalonamento
O SQL Server® escolhe o detalhamento mais apropriado de bloqueio, com base em quantos registros são afetados e que atividade simultânea existe no sistema. Por padrão, o SQL Server seleciona o menor detalhamento de bloqueio possível, escolhendo apenas bloqueios com detalhamentos mais brutos se ele puder usar de forma mais eficiente a memória do sistema. O SQL Server irá escalonar um bloqueio se o escalonamento beneficiar todo o desempenho do sistema. Como exibido na Figura 1, os escalonamentos ocorrerão quando o número de bloqueios em uma verificação particular exceder 5 mil ou quando a memória usada para os bloqueios pelo sistema exceder a capacidade disponível:
Figure 1 Condições que causam escalonamento de bloqueio
Figure 1 Condições que causam escalonamento de bloqueio
  • 24% da memória não-AWE (que não é de extensão do endereço baseada em janelas) usada pelo mecanismo de banco de dados se a configuração de bloqueio for 0
  • 40% da memória não-AWE usada pelo mecanismo de banco de dados se a configuração de bloqueio não for 0
Se um escalonamento realmente ocorrer, será sempre para um bloqueio de tabela.

Evitando bloqueios desnecessários
O bloqueio pode ocorrer em qualquer detalhamento de bloqueio, mas a exposição do bloqueio é aumentada quando ocorrem escalonamentos. O escalonamento de bloqueio pode ser um sinal de que o seu aplicativo foi projetado, codificado ou configurado de modo ineficiente.
Respeitar os conceitos básicos de projeto de bancos de dados (como usar um esquema normalizado com chaves estreitas e evitar operações de dados em massa em sistemas transacionais) é importante para evitar o bloqueio. Se esses princípios não forem seguidos (como separar o sistema de relatórios do sistema transacional ou processar alimentações de dados fora do horário do expediente), será difícil ajustar o sistema.
A indexação pode ser um fator crucial para se determinar quantos bloqueios são necessários para acessar os dados. Um índice pode reduzir o número de registros acessados por uma consulta, reduzindo o número de pesquisas internas que o mecanismo de banco de dados precisa executar. Por exemplo, quando você seleciona uma única linha a partir de uma tabela em uma coluna não-indexada, cada linha da tabela precisa ser temporariamente bloqueada até que o registro desejado seja identificado. Por outro lado, se essa coluna fosse indexada, apenas um único bloqueio seria necessário.
O SQL Server 2005 e o SQL Server 2008 contêm exibições de gerenciamento dinâmico (sys.dm_db_missing_index_group_stats, sys.dm_db_missing_index_groups, sys.dm_db_missing_index_details) que revelam tabelas e colunas que se beneficiariam de índices, com base em estatísticas de uso acumuladas.
A fragmentação também pode estar envolvida em problemas de desempenho, já que o mecanismo do banco de dados pode precisar acessar mais páginas do que precisaria normalmente. Além disso, estatísticas incorretas podem levar o otimizador de consultas a escolher um plano menos eficiente.
Tenha em mente que embora os índices acelerem o acesso aos dados, eles podem retardar a modificação de dados porque não apenas os dados subjacentes precisam ser alterados, mas também os índices precisam de atualização da mesma forma. Uma exibição de gerenciamento dinâmico sys.dm_db_index_usage_stats destaca com que freqüência os índices estão sendo usados. Um exemplo comum de indexação ineficiente ocorre com índices compostos, onde a mesma coluna é indexada em isolamento e em combinação. Como o SQL Server acessa índices da esquerda para a direita, o índice será usado desde que as colunas mais à esquerda sejam úteis.
Particionar tabelas pode tanto otimizar o sistema (para que haja menos exposição de bloqueio) e dividir os dados em objetos físicos separados que podem ser separadamente sustentados. Embora permitir as partições de linha seja uma maneira mais óbvia de separar os dados, particionar os dados horizontalmente é outra opção a ser considerada. Você pode escolher intencionalmente desnormalizar, dividindo uma tabela em tabelas separadas com o mesmo número de linhas e chaves, mas diferentes colunas, para reduzir as chances de processos separados desejarem acessar exclusivamente os dados ao mesmo tempo.
Quanto mais diversas as maneiras que um aplicativo possa acessar uma linha particular de dados e quanto mais colunas sejam incluídas nessa linha, mais atrativa será uma abordagem de particionamento de coluna. O enfileiramento de aplicativos e as tabelas de estado podem às vezes se beneficiar dessa abordagem. O SQL Server 2008 adiciona a capacidade de desativar os escalonamentos de bloqueio por partição (ou por tabela, quando as partições não forem ativadas para a tabela).

Otimização de consulta
A otimização de consulta representa um papel importante no aprimoramento do desempenho. Veja três abordagens que podem ser tomadas:
Reduzir a transação Uma das maneiras mais importantes de reduzir o bloqueio, bem como melhorar o desempenho geral, é garantir que as transações sejam as menores possíveis. Qualquer processamento não importante para a integridade da transação (como pesquisar dados relacionados, indexar e depurar dados) deve ser retirado para reduzir seu tamanho.
O SQL trata cada instrução como uma transação implícita. Se a instrução afetar um grande número de linhas, uma única instrução poderá ainda constituir uma transação grande, especialmente se existirem várias colunas envolvidas ou se as colunas contiverem tipos de dados grandes. Uma única instrução pode também causar divisões de páginas se o fator de preenchimento estiver alto ou se uma instrução UPDATE estiver preenchendo uma coluna com um valor mais amplo do que foi alocado. Em tais circunstâncias, pode ser útil dividir a transação em grupos de linhas, processando-os um de cada vez até ficarem concluídos. O processamento em lote deve ser considerado apenas quando a instrução individual ou grupos de instruções puderem ser divididos em menores lotes que ainda podem ser considerados completos como uma unidade de trabalho, se forem bem-sucedidos ou falharem.
Ordenar a transação Dentro da transação, o seqüenciamento intencional das instruções pode diminuir a probabilidade de bloqueio. Há dois princípios para se ter em mente. Primeiro, acesse objetos na mesma ordem dentro de todos os códigos do SQL no seu sistema. Sem uma ordem consistente, os bloqueios podem ocorrer onde dois processos concorrentes acessam dados em uma ordem diferente, causando um erro de sistema para um dos processos. Segundo, coloque objetos freqüentemente acessados ou caros de acessar no final da transação. O SQL espera para bloquear os objetos até que eles sejam necessários na transação. Atrasar o acesso aos "pontos de acesso" permite que esses objetos segurem o bloqueio por uma menor porcentagem de tempo.
Use dicas de travamento As dicas de travamento podem ser usadas no nível da sessão ou da instrução para uma tabela ou exibição específica. Um cenário típico para usar uma dica de nível de sessão seria um processamento em lote em um data warehouse, onde o desenvolvedor sabe que o processo será o único em execução em um determinado momento nesse conjunto de dados. Usando um comando como SET ISOLATION LEVEL READ UNCOMMITTED no início do procedimento armazenado, o SQL Server não reservará nenhum bloqueio de leitura, reduzindo, portanto, a sobrecarga de bloqueio geral e aumentando o desempenho.
Um cenário típico para usar as dicas de nível de instrução seria quando o desenvolvedor sabe que uma leitura suja pode ocorrer com segurança (como ao ler uma única linha de uma tabela onde outros processos simultâneos nunca precisarão da mesma linha), ou quando todos os outros esforços de ajuste de desempenho tiverem falhado (design do esquema, design do índice e manutenção e ajuste de consulta) e o desenvolvedor deseja forçar o compilador a usar um tipo específico de dica.
Dicas de bloqueio de linha podem fazer sentido se o monitoramento demonstrar que bloqueios com maior detalhamento tiverem ocorrido onde poucos registros são afetados pela consulta, uma vez que isso poderia reduzir o bloqueio. Dicas de bloqueio de tabela podem fazer sentido se o monitoramento demonstrar que bloqueios com menor detalhamento estiverem sendo mantidos (e não escalonados) quando quase todos os registros da tabela forem afetados pela consulta, uma vez que isso poderia reduzir os recursos do sistema necessários para manter os bloqueios. Observe que especificar uma dica de bloqueio não garante que o bloqueio não será escalonado quando o número de bloqueios atingir o limite da memória do sistema. No entanto, isso impedirá todos os outros escalonamentos.

Ajuste sua configuração
Conforme exibido na Figura 2, existem vários fatores a considerar ao configurar seu sistema SQL Server.
Figure 2 Como o SQL Server determina a quantidade de memória que pode ser usada para o bloqueio
Figure 2 Como o SQL Server determina a quantidade de memória que pode ser usada para o bloqueio
Memória Os bloqueios são normalmente realizados na memória não-AWE. Portanto, aumentar o tamanho da memória não-AWE aumentará a capacidade de o sistema realizar bloqueios.
Uma arquitetura de 64 bits deve ser a primeira escolha ao tentar aumentar a capacidade de bloqueio, uma vez que a arquitetura de 32 bits é limitada a 4 GB de memória não-AWE, enquanto que a de 64 bits não possui limite algum.
Em sistemas de 32 bits, você pode obter um gigabyte adicional de memória a partir do sistema operacional para o SQL Server adicionando a opção /3GB ao arquivo Boot.ini.
Configurações do SQL Server Uma variedade de configurações pode ser ajustada por sp_configure que afeta o bloqueio. A configuração de bloqueio configura quantos bloqueios podem ser realizados pelo sistema antes que ocorra um erro. Por padrão, a configuração é 0, o que significa que o servidor irá dinamicamente ajustar os bloqueios reservados com outros processos que competem por memória. O SQL irá reservar inicialmente 2.500 bloqueios e cada bloqueio consome 96 bytes de memória. A memória paginável não é utilizada.
As configurações mínimas e máximas de memória reservam a quantidade de memória usada pelo SQL Server, configurando, portanto, o servidor para manter estaticamente a memória. Como o escalonamento de bloqueio está relacionado à memória disponível, reservar a quantidade de memória de processos concorrentes pode fazer uma diferença com relação à ocorrência ou não dos escalonamentos.
Configurações de conexão Por padrão, os bloqueios que estão obstruindo não têm tempo limite, mas você pode usar a configuração @@LOCK_TIMEOUT, que faz com que um erro ocorra se o limite de espera especificado para um bloqueio ser lançado for excedido.
Sinalizadores de rastreamento Dois sinalizadores de rastreamento em particular se relacionam a escalonamentos de bloqueios. Um é o sinalizador de rastreamento 1211, que desabilita os escalonamentos de bloqueio. Se o número de bloqueios consumidos exceder a memória disponível, ocorrerá um erro. O outro é o sinalizador de rastreamento 1224, que desabilita os escalonamentos de bloqueio para instruções individuais.

Observando seu sistema
Leitura adicional
  • Inside Microsoft SQL Server 2005: The Storage Engine por Kalen Delaney
  • Como monitorar o bloqueio no SQL Server 2005 e no SQL Server 2000
  • Script de estatísticas de desempenho do SQL Server 2005
  • Como resolver problemas de bloqueio causados por escalonamento de bloqueio no SQL Server
  • Escalonamento de bloqueio (mecanismo de banco de dados)

O impacto que o bloqueio exerce no desempenho geral do sistema pode ser monitorado pela sondagem de dados de estado a intervalos determinados (talvez a cada hora) e pela captura de estatísticas de execução nos bloqueios realizados. As principais informações para capturar são:
  • Objeto afetado, detalhes e tipo de bloqueio
  • Duração dos bloqueios e bloqueadores
  • Comando SQL sendo emitido (nome do procedimento armazenado, instrução do SQL interna)
  • Informações sobre a cadeia de bloqueio, onde relevante
  • Como o sistema está consumindo sua capacidade de bloqueio disponível
Você pode executar um script como o da Figura 3 para capturar essas informações, escrevendo-o em uma tabela com o carimbo de data/hora relevante. E para dividir mais o ResourceId dos dados sendo bloqueados, você pode executar um script como o da Figura 4.
Figure 4 Learning more about blocked data (Close Figure 4)
DECLARE @SQL                           nvarchar(max)
      , @CallingResourceType           varchar(30)
      , @Objectname                    sysname
      , @DBName                        sysname
      , @resource_associated_entity_id int

-- TODO: Set the variables for the object you wish to look up

SET @SQL = N'
USE     ' + @DbName + N'
DECLARE @ObjectId int

SELECT  @ObjectId = CASE
                    WHEN @CallingResourceType = ''OBJECT''
                    THEN @resource_associated_entity_id
                    WHEN @CallingResourceType IN (''HOBT'', ''RID'', ''KEY'',''PAGE'')
                    THEN (SELECT  object_id
                          FROM    sys.partitions
                          WHERE   hobt_id = @resource_associated_entity_id)
                    WHEN @CallingResourceType = ''ALLOCATION_UNIT''
                    THEN (SELECT  CASE
                                     WHEN type IN (1, 3)
                                     THEN (SELECT  object_id
                                           FROM    sys.partitions
                                           WHERE   hobt_id = allocation_unit_id)
                                     WHEN type = 2
                                     THEN (SELECT  object_id
                                           FROM    sys.partitions
                                           WHERE   partition_id = allocation_unit_id)
                                     ELSE NULL
                                     END
                          FROM    sys.allocation_units
                          WHERE   allocation_unit_id = @resource_associated_entity_id)
                    ELSE NULL
                    END

SELECT  @ObjectName = OBJECT_NAME(@ObjectId)'

EXEC    dbo.sp_executeSQL
        @SQL
      , N'@CallingResourceType varchar(30)
      , @resource_associated_entity_id int
      , @ObjectName sysname OUTPUT'
      , @resource_associated_entity_id = @resource_associated_entity_id
      , @CallingResourceType = @CallingResourceType
      , @ObjectName = @ObjectName OUTPUT
Figure 3 Capturing locking stats (Close Figure 3)
SELECT  er.wait_time                      AS WaitMSQty
      , er.session_id                     AS CallingSpId
      , LEFT(nt_user_name, 30)            AS CallingUserName
      , LEFT(ces.program_name, 40)        AS CallingProgramName
      , er.blocking_session_id            AS BlockingSpId
      , DB_NAME(er.database_id)           AS DbName
      , CAST(csql.text AS varchar(255))   AS CallingSQL
      , clck.CallingResourceId
      , clck.CallingResourceType
      , clck.CallingRequestMode
      , CAST(bsql.text AS varchar(255))   AS BlockingSQL
      , blck.BlockingResourceType
      , blck.BlockingRequestMode
FROM    master.sys.dm_exec_requests er WITH (NOLOCK)
        JOIN master.sys.dm_exec_sessions ces WITH (NOLOCK)
          ON er.session_id = ces.session_id
        CROSS APPLY fn_get_sql (er.sql_handle) csql
        JOIN (
-- Retrieve lock information for calling process, return only one record to
-- report information at the session level
              SELECT  cl.request_session_id                 AS CallingSpId
                    , MIN(cl.resource_associated_entity_id) AS CallingResourceId
                    , MIN(LEFT(cl.resource_type, 30))       AS CallingResourceType
                    , MIN(LEFT(cl.request_mode, 30))        AS CallingRequestMode
-- (i.e. schema, update, etc.)
              FROM    master.sys.dm_tran_locks cl WITH (nolock)
              WHERE   cl.request_status = 'WAIT' -- Status of the lock request = waiting
              GROUP BY cl.request_session_id
              ) AS clck
           ON er.session_id = clck.CallingSpid
         JOIN (
              -- Retrieve lock information for blocking process
              -- Only one record will be returned (one possibility, for instance,
              -- is for multiple row locks to occur)
              SELECT  bl.request_session_id            AS BlockingSpId
                    , bl.resource_associated_entity_id AS BlockingResourceId
                    , MIN(LEFT(bl.resource_type, 30))  AS BlockingResourceType
                    , MIN(LEFT(bl.request_mode, 30))   AS BlockingRequestMode
              FROM    master.sys.dm_tran_locks bl WITH (nolock)
              GROUP BY bl.request_session_id
                    , bl.resource_associated_entity_id
              ) AS blck
           ON er.blocking_session_id = blck.BlockingSpId
          AND clck.CallingResourceId = blck.BlockingResourceId
        JOIN master.sys.dm_exec_connections ber WITH (NOLOCK)
          ON er.blocking_session_id = ber.session_id
        CROSS APPLY fn_get_sql (ber.most_recent_sql_handle) bsql
WHERE   ces.is_user_process = 1
        AND er.wait_time > 0
Você também pode monitorar seu sistema quanto a escalonamentos pelo SQL Profiler (evento Lock:Escalation), a exibição de gerenciamento dinâmico dm_db_index_operational_stats (index_lock_promotion_count) ou a sondagem regular de informações de bloqueio do sistema. As informações pertinentes são coletadas do monitoramento de escalonamento se o processamento garante um escalonamento; caso contrário, os procedimentos armazenados relevantes podem identificar uma causa principal para problemas de desempenho. As tabelas com grandes quantidades de dados ou alto uso simultâneo devem ser o foco principal da avaliação.
Após coletar dados sobre travamentos, bloqueios e escalonamentos, os dados podem ser analisados para determinar o bloqueio cumulativo e o tempo de travamento (número de incidências multiplicado pela duração de incidências) por objeto. Normalmente, isso pode iniciar um ciclo iterativo de ajuste de desempenho onde as alterações são implantadas, monitoradas, analisadas e corrigidas. Às vezes, só é necessária uma simples alteração, como adicionar um índice para fazer uma melhoria de desempenho significativa que irá alterar qual área no sistema constitui o gargalo de desempenho mais penoso.
Você pode obter mais informações sobre a redução do bloqueio no SQL Server no quadro “Leitura adicional”. Se for dada uma atenção especial à manutenção das transações pequenas por todas as fases de design, codificação e estabilização, vários problemas de bloqueio poderão ser minimizados. O hardware adequado pode também reduzir significativamente a probabilidade de escalonamentos indesejados. Seja como for, a avaliação contínua do bloqueio no sistema pode rapidamente identificar problemas de desempenho na sua raiz.

Cherié Warren é uma líder de desenvolvimento sênior para a TI da Microsoft. Ela é responsável atualmente por um dos maiores bancos de dados transacionais na Microsoft. Cherié também consulta freqüentemente as causas principais e resolve problemas de desempenho relacionados a bloqueios. Ela se especializa em bancos de dados do SQL Server de nível empresarial há 10 anos.


 Microsoft Office: Integra&#231;&#227;o de bancos de dados do Access ao SharePoint
Microsoft Office Peter Serzo

Integração de bancos de dados do Access ao SharePoint
Visão geral:
  • Benefícios da integração do Access ao SharePoint
  • Migração de dados do Access para o SharePoint
  • Estendendo a funcionalidade do Access com o SharePoint

Quando converso com os usuários finais sobre o MOSS (Microsoft Office SharePoint Server) 2007, sempre peço a eles para me mostrarem as ferramentas que usam e como eles as utilizam. Nunca falha, alguém, em algum lugar da
organização utiliza o Microsoft® Office AccessTM para atender a necessidades comerciais essenciais. O Access ainda é uma ferramenta viável e um ativo importante em várias empresas.
O MOSS 2007 oferece uma forma de utilizar aplicativos criados em Access e os integra ao SharePoint® para criar uma nova solução com um alcance muito maior. O foco deste artigo é mostrar como e onde o MOSS se integra ao Access e como um usuário final pode configurar esses dois produtos para criar uma solução.
A tecnologia subjacente que o MOSS traz ao Access incorpora fluxo de trabalho, um repositório comum (SQL Server®) e uma interface baseada na Web (o navegador). Os recursos do SharePoint incluem gerenciamento de documentos, espaços de trabalho e a capacidade de configurar listas personalizadas e para utilizar fluxos de trabalho internos e Web parts prontas que cobrem tudo, desde eventos de propaganda e a criação de uma lista de contatos ou de uma lista de problemas até o gerenciamento de formulários criados por usuário. Além do mais, a facilidade de uso e as tecnologias do Office conhecidas vão aprimorar a sensação de poder do usuário final. Como você verá, o MOSS não ameaça as soluções atuais que já têm seu lugar. Em vez disso, o MOSS facilita a eficiência, já que você não precisa reescrever aplicativos, permitindo que usuários finais se concentrem em resolver problemas de negócios em vez dos problemas técnicos.
E não é só o usuário final que terá vantagens. Os departamentos de TI e os administradores lutam com a forma de auxiliar seus usuários finais na manutenção de todos os bancos de dados personalizados que surgem em uma empresa. Muitos nem sabem que o Access está sendo usado para resolver problemas de negócios de missão crítica até que certos problemas aparecem, como limites de armazenamento, acesso multiusuário, segurança, reparo de bancos de dados corrompidos, uso da Web, versões incompatíveis do Access e implantação de alterações em vários desktops. O SharePoint possui uma resposta para cada um desses problemas.
Embora o Access tenha seus limites, é poderoso e amigável, especialmente para aqueles que não escrevem código para viver. Em um ponto você obtém tabelas relacionais configuráveis, consultas simples (e as complexas), um criador de formulários de front-end para arrastar e soltar, relatórios baseados nos dados e a capacidade de configurar vários usuários. Criar soluções baseadas em Access e em SharePoint faz sentido para organizações que procuram agrupar recursos e talento e para indivíduos que desejam aproveitar a vantagem de aplicativos e habilidades criados através dos anos.

Introdução
O Access 2007 oferece diversos pontos para a integração com o MOSS 2007. Como você pode ver na Figura 1, entre eles estão: importação de dados de uma Lista do SharePoint, publicação de dados em um site do SharePoint, criação de uma Lista do SharePoint, uso de dados do SharePoint como uma origem externa, migração de um banco de dados do Access para um novo site do SharePoint ou para um existente e acesso offline de dados do SharePoint.
Figure 1 O Access 2007 oferece diversos pontos de entrada fáceis para a integração com SharePoint
Figure 1 O Access 2007 oferece diversos pontos de entrada fáceis para a integração com SharePoint
A criação de uma lista do SharePoint a partir de uma tabela do Access é um bom ponto de partida. Uma lista do SharePoint é muito similar a uma tabela do Access. Ela é salva no banco de dados de conteúdo do SQL Server, contém certos atributos de campo e oferece suporte a pesquisas.
Entre algumas limitações que devemos ter em mente durante a criação de uma lista do SharePoint, podemos destacar: a Microsoft recomenda um limite de 2.000 itens por modo de exibição para obter o desempenho ideal; o SharePoint não impõe a integridade referencial; os Objetos OLE não são exportados para o SharePoint e a validação de dados é limitada.
Para criar uma lista do SharePoint a partir de uma tabela do Access, primeiro selecione a guia Dados Externos e clique no botão Lista do SharePoint habilitado no grupo Exportar. Agora você precisa especificar o site do SharePoint onde essa lista será ativada ao preencher a caixa de diálogo Exportar - Site do SharePoint mostrada na Figura 2 ou clicar com o botão direito do mouse em sua tabela e escolher Exportar para uma Lista do SharePoint. Observe que se a tabela fosse um filho em um relacionamento, todas as tabelas-pai também seriam exportadas.
Figure 2 Os dados de acesso serão exportados para o site do SharePoint especificado por você
Figure 2 Os dados de acesso serão exportados para o site do SharePoint especificado por você
Quando o processo estiver concluído, você terá a opção de salvar as etapas de exportação para não precisar repeti-las. Neste ponto, você pode ir até o site do SharePoint e ver os dados que foram carregados. Essa operação simples é útil para mover dados para o SharePoint e para torná-los acessíveis aos usuários. Os benefícios são uma segurança maior , já que os dados agora são salvos em um banco de dados do SQL Server, e acesso mais fácil, uma vez que as informações estão disponíveis por meio do navegador.
No entanto, acontece que outra operação — a vinculação de listas no SharePoint como tabelas no Access — é uma forma muito mais eficiente de integrar o Access e o SharePoint. Para isso, clique na guia Dados Externos no Access e escolha Lista do SharePoint no grupo Importar. Isso exibirá a caixa de diálogo mostrada na Figura 3.
Figure 3 Vinculando o Access ao SharePoint
Figure 3 Vinculando o Access ao SharePoint
Escolha o site que contém a lista do SharePoint que será usada como uma fonte de dados vinculada e selecione a lista que deseja vincular. Quando essa operação estiver concluída, a lista será exibida como uma tabela vinculada no Access e, no canto inferior direito do aplicativo, você verá um indicador "Online com o SharePoint". Agora existe uma sincronização bidirecional entre o Access e o SharePoint, oferecendo suporte às operações de adição, de alteração e de exclusão tanto a partir do SharePoint como do Access. Como você verá, código pode ser escrito na tabela para oferecer funcionalidade extra.
Quando você cria vínculos no Access para listas do SharePoint, verá que outra tabela, a Lista de Informações de Usuários do WSS (Windows® SharePoint Services), também é importada e vinculada por padrão. E uma tabela de problemas é criada e chamada de "Mover para Problemas do Site do SharePoint". Aqui você poderá revisar quaisquer conflitos com os dados.
Para obter mais informações sobre a migração de dados e sobre como tipos de dados são manipulados durante a conversão, consulte "Como o Access faz a conversão entre os tipos de dados do Access e do SharePoint" (office.microsoft.com/en-us/access/HP010477131033.aspx) e a seção chamada Limitações de migração de "Mover as tabelas em um banco de dados do Access para um site do SharePoint e criar vínculos para elas" (office.microsoft.com/en-us/access/HA101314681033.aspx).
Uma terceira forma de integrar tabelas e listas é iniciada por meio do SharePoint. Escolha uma lista e, na guia Ações, clique na opção "Abrir com o Access". Será exibida uma caixa de diálogo que solicitará o nome do banco de dados (novo ou existente). Depois de inserir o nome do banco de dados, opte por simplesmente criar vínculos para os dados do site do SharePoint ou por exportar os dados diretamente para o Access (consulte a Figura 4).
Figure 4 Tornando os dados do SharePoint acessíveis por meio do Access
Figure 4 Tornando os dados do SharePoint acessíveis por meio do Access

Movendo um banco de dados para o SharePoint
Até aqui, temos analisado a importação de uma lista do SharePoint como uma tabela vinculada e a exportação de tabelas para o SharePoint como listas, mas e se você precisar acessar todo o banco de dados? Muitas organizações possuem aplicativos de missão crítica em execução no Access e precisam que eles estejam disponíveis de forma remota para que indivíduos possam executar relatórios e consultas e inserir dados. Nessas situações nem sempre é exeqüível — economicamente ou com base nas habilidades disponíveis — reescrever o aplicativo. O SharePoint e o Access resolveram isso com a opção "Mover para o SharePoint", encontrada na guia Listas do SharePoint do Access. Isso é similar à opção de mover para o SQL Server usando o Assistente de Upsizing, que apareceu pela primeira vez no Access 97.
As vantagens de mover todo um banco de dados do Access para o Sharepoint é que todas as tabelas serão convertidas para listas do SharePoint; será feito um backup do banco de dados do Access; listas automaticamente se tornarão tabelas vinculadas no Access; você poderá mover todo o banco de dados e não só tabelas e o banco de dados funcionará como antes da mudança.
Quando você clicar no botão Mover para o SharePoint, será exibida a caixa de diálogo da Figura 5. Depois de especificar o site, será preciso decidir se você escolherá a opção de salvar o banco de dados. Em caso afirmativo, todo o banco de dados será salvo em uma biblioteca de documentos selecionada. Isso significa que todo o banco de dados (incluindo formulários, relatórios, consultas e macros) será salvo no SharePoint e, portanto, estará disponível no servidor. Quando um usuário quiser acessar o banco de dados, bastará navegar até a biblioteca onde ele se encontra, clicar nele e ele será automaticamente implantado em seu desktop.
Figure 5 Especifique o site do SharePoint para o qual deseja mover o seu banco de dados
Figure 5 Especifique o site do SharePoint para o qual deseja mover o seu banco de dados
Quando você opta por mover todo o banco de dados, é exibida uma barra de mensagens Publicar Alterações abaixo da faixa. Isso permite que você mantenha as alterações locais feitas no design e nos dados sincronizadas com a cópia do servidor. Se você não selecionar essa opção, somente as tabelas serão convertidas em listas e vinculadas para o Access. Nesse caso, o banco de dados completo não está disponível para a comunidade de usuários e não será feito seu backup como um objeto do SharePoint.
Depois de escolher uma dessas opções, o banco de dados e suas informações associadas estarão disponíveis por meio do site do SharePoint escolhido. Novamente, uma tabela é automaticamente criada e chamada de "Mover para Problemas do Site do SharePoint". É aqui que qualquer conflito decorrente da migração será documentado. Você pode revisar quaisquer problemas encontrados pelo Access durante o carregamento da tabela no site do SharePoint.

Modos de exibição, formulários e relatórios
Depois que o banco de dados for movido, você vai querer testar sua funcionalidade. Verifique se o indicador "Online com o SharePoint" está visível antes de começar. Observe que consultas do Access se tornam modos de exibição do SharePoint; um modo de exibição do SharePoint é muito similar a uma consulta do Access.
Quando você move todo o banco e dados, as consultas existentes são copiadas para o SharePoint como modos de exibição. Os usuários do Access compreendem que escrever consultas permite que eles vejam um subconjunto de dados. Aprender a fazer isso em um Modo de Exibição do SharePoint ajuda você a entender como os dados são organizados em uma lista do SharePoint.
Um dos modos de exibição mais úteis que podem ser criados é um Modo de Exibição do Access. Para isso, navegue até a lista sob a qual criará o modo de exibição, escolha Modos de Exibição e Criar Modo de Exibição. Ali, você verá a opção Modo de Exibição do Access, que permite a criação de formulários e de relatórios com base em uma lista. Depois de clicar nessa opção e de escolher o banco de dados do Access, surgirá uma caixa de diálogo parecida com a da Figura 6. Como você pode ver, agora é o momento de definir o formato (tipo de formulário, Gráfico Dinâmico, Tabela Dinâmica ou Relatório) e quando o processo for concluído, haverá um formulário ou relatório vinculado no banco de dados do Access.
Figure 6 Criando um Modo de Exibição do Access
Figure 6 Criando um Modo de Exibição do Access

Acesso offline
No mundo real, estender o alcance de um aplicativo de missão crítica traduz-se em retorno sobre o investimento. Uma forma de estender o alcance de um aplicativo Access/SharePoint integrado é perceber que você não precisa estar conectado ao SharePoint para usá-lo. Para facilitar essa flexibilidade, o Access 2007 introduziu a capacidade de trabalho offline. As informações são armazenadas em cache na cópia local do banco de dados até serem associadas ao servidor. Para colocar um banco de dados em estado offline, clique no botão Trabalhar Offline no grupo Dados Externos|Listas do SharePoint na faixa.
Quando estiver pronto para reconectar-se ao SharePoint, você poderá optar por Trabalhar Online ou Sincronizar. Ambas as opções carregam os dados e apresentam conflitos para revisão; no entanto, com o Synchronize, os dados são carregados mas o aplicativo permanece offline.
Um outro item que deve ser considerado no grupo Listas do SharePoint é Descartar Alterações, que possui duas opções. A primeira descarta todas as alterações mas não atualiza os dados do SharePoint no Access. A segunda opção descarta todas as alterações e atualizações feitas nos dados do SharePoint (listas vinculadas).

Modelos do Access
O Access 2007 possui diversos modelos pré-criados para auxiliar usuários com a criação rápida de soluções comerciais, como você pode ver ao clicar no botão Listas do SharePoint na guia Criar do grupo Tabelas (consulte a Figura 7). A escolha de um deles definirá automaticamente o esquema para uma tabela que esteja vinculada ao SharePoint. No momento, somente Contatos, Tarefas, Problemas e Eventos são suportadas. Isso significa que se você exportar uma tabela que contém um desses tipos de informação, os dados terminarão como o tipo de conteúdo WSS correspondente (por exemplo, Problemas para Problemas).
Figure 7 Escolhendo o tipo de lista
Figure 7 Escolhendo o tipo de lista
Você também pode criar modelos personalizados que poderão ser usados para listas do SharePoint ou criar modelos do Site do SharePoint com bancos de dados do Access 2007 de vinculação automática. Fazer isso requer o Access 2007 Developer Extensions e a configuração da WSSTemplateID da tabela. Essa propriedade rastreia as tabelas que possuem um modelo de lista do SharePoint equivalente.

O Access e os metadados
As empresas que possuem aplicativos do Access nem sempre desejam mover todos eles para o SharePoint e podem não ser capazes de fazer isso. Nesses casos, algumas vezes faz sentido escrever código em Access para atualizar o SharePoint. Com código, você pode juntar o SharePoint e o Access.
Um exemplo simples é o caso do banco de dados da Northwind Traders, que armazena informações sobre produtos, fornecedores e ordens de cliente. Normalmente, cada produto possui uma planilha de produtos associada entregue pelo fornecedor como um arquivo .pdf. O banco de dados do Access rastreia todas as informações contidas na planilha de produtos, como a localização geográfica, o número do produto, o histórico de revisões e o código de departamento da empresa. Essas informações precisam estar disponíveis para fornecedores por meio da extranet do SharePoint.
Um site do SharePoint é configurado e todos os documentos são movidos para uma biblioteca de documentos vinculada, mas os campos de metadados estão vazios (consulte a Figura 8), uma vez que os dados são rastreados no Access (e a pessoa que monitora isso trabalha confortavelmente com o Access e não deseja mudar).
Figure 8 Documento da Northwind exibido no SharePoint, sem metadados
Figure 8 Documento da Northwind exibido no SharePoint, sem metadados
Felizmente, como mostra a Figura 9, você pode adicionar código do Visual Basic® for Applications (VBA) para atualizar os metadados por meio do aplicativo do Access. O aplicativo não precisa ser reescrito. O funcionário continua a usar uma ferramenta que já conhece enquanto navega pela Web, e os fornecedores podem acessar a extranet com base em suas permissões (para que vejam somente o que devem ver), e não há problemas de concorrência ou de tamanho de banco de dados.
Figure 9 Atualizando metadados usando código
Figure 9 Atualizando metadados usando código

Segurança interna
Um dos maiores benefícios de mover aplicativos do Access para o SharePoint é ser capaz de aproveitar as vantagens do seu modelo de segurança, que possui autenticação interna no Active Directory®. Isso significa que você não precisará se preocupar mais com a forma de implementar segurança em aplicativos do Access ao criar esquemas e tabelas e na adição de usuários. Com as listas do SharePoint, você poderá usar a remoção de segurança, onde usuários só verão o que é permitido; isso é inato no SharePoint. Além disso, se houver componentes do banco de dados que você não deseja mover para o SharePoint, não será necessário movê-los.
O SharePoint oferece um modelo de segurança granular e baseado em funções. Ao determinar como e para onde mover um banco de dados, você terá de projetar o site e a segurança antes da migração. Será mais fácil configurar e testar permissões. Além disso, haverá menos problemas de migração e o banco de dados do Access terá um desempenho mais eficiente.

Integridade referencial
Eu seria negligente se pelo menos não mencionasse o assunto integridade referencial. A verdade é que o SharePoint não impõe a integridade referencial como o Access. Muitas instalações são normalizadas em algum nível. Isso precisa ser levado em consideração para que esses bancos de dados do Access de missão crítica funcionem. Felizmente, existem algumas soluções alternativas que podem ser criadas como aprimoramentos ao sistema existente.
Anteriormente, observei que quando você move um banco de dados para o SharePoint, se mover tabelas-filho, também moverá as tabelas-pai. Além disso, os campos de pesquisa são usados no SharePoint quando ele reconhece que uma opção de campo se baseia em outra tabela. Por exemplo, suponha que um cliente seja escolhido e uma ordem seja feita no banco de dados da Northwind Traders. Se essas tabelas fossem movidas para o SharePoint, o campo do cliente seria uma pesquisa na lista Ordem.
E quanto a executar atualizações/exclusões em cascata e operações mais intrincadas? É aqui que o SharePoint e seus fluxos de trabalho devem ser avaliados como uma solução em potencial. Voltando ao banco de dados da Northwind Traders, suponha que um cliente ligue para cancelar uma ordem existente, disparando várias ações: o estoque deve ser reposto, os fornecedores precisam ser notificados, o funcionário associado à ordem deve fazer o acompanhamento do cliente, a remessa deve ser cancelada e a contabilidade tem de ser atualizada. Há muitas partes em movimento que precisam ser coordenadas.
Utilizando o SharePoint Designer, um fluxo de trabalho pode ser criado no SharePoint para cumprir todas as tarefas mencionadas anteriormente assim que o status da ordem mudar. Existem 22 fluxos de trabalho prontos que podem ser misturados e combinados em centenas de ações. O SharePoint Designer é uma ótima ferramenta para criar a marca do seu site e para criar fluxos de trabalho.
A melhor parte é que usar o SharePoint Designer para criar fluxos de trabalho envolve habilidades já conhecidas dos usuários que sabem como "programar" em Access. Isso significa que os usuários que criam aplicativos do Access podem fazer a transição e estender seu escopo de habilidades para a criação de fluxos de trabalho sem muito esforço. Não será preciso escrever código ao utilizar o SharePoint Designer para fluxos de trabalho e a sua implantação é bem simples.

Peter Serzo é engenheiro sênior da CDW Berbee. Sua principal ocupação é arquitetar soluções de SharePoint Enterprise para empresas em todo o mundo.


 Do editor: Aos velhos e novos amigos
Do editor
Aos velhos e novos amigos

Devemos começar neste mês com uma nota triste, mas feliz ao mesmo tempo. Infelizmente, chegou o momento de nos despedirmos de Joseph Davies, The Cable Guy, que encerra sua coluna nesta edição da TechNet Magazine. Tivemos a enorme sorte de contar com um especialista do calibre de Joseph para nos ajudar em meio a tantos tópicos sobre o sistema de rede do Windows. É uma pena, mas Joseph aceitou recentemente um novo cargo atribulado na Microsoft, e a coluna mensal é uma tarefa que ele precisa deixar. Todos nós da TechNet Magazine agradecemos as contribuições incríveis dadas por ele nesses anos e desejamos muita sorte em suas novas empreitadas.
Mas apesar da nossa tristeza ao ver a partida do The Cable Guy, o show tem que continuar. Assim, em nossa próxima edição, haverá uma nova coluna chamada "Por dentro do SharePoint". No ano passado, recebemos uma quantidade incrível de comentários solicitando mais informações e diretrizes sobre o SharePoint. E como o SharePoint é uma tecnologia interessante e que está crescendo rapidamente, podemos pensar em algo mais interessante como uma coluna mensal. Pav Cherny dará início a ela, retomando as origens com uma visão geral da arquitetura da infra-estrutura do SharePoint. Nos próximos meses, abordaremos segurança, disponibilidade, desempenho, solução de problemas e muito mais. Caso haja algum tópico sobre o SharePoint que você gostaria que nós abordássemos, mande-o para nós! Envie um email para tnmag@microsoft.com.
Também precisamos estender uma enorme dívida de gratidão para com dois dos nossos editores seniores, Terrence Dorsey e Nancy Michell. Terry e Nancy estão conosco desde o início, trazendo consigo seus enormes talentos e suas experiências que nos ajudaram a moldar a TechNet Magazine como ela é publicada hoje. Porém, a partir deste mês, Terry e Nancy voltam todas as suas atenções à nossa publicação irmã, a MSDN Magazine. Por outro lado, dois de nossos outros editores seniores extremamente talentosos, Matthew Graven e Sharon Terdeman, darão adeus às tarefas na MSDN Magazine para se concentrarem exclusivamente na TechNet Magazine. Felizmente, Terry e Nancy não irão muito longe, e continuamos esperando contar com todas as suas idéias e experiências à medida que a TechNet Magazine vai crescendo.
E feita essa faxina, deixo você curtindo a edição deste mês. Voltada essencialmente para o lançamento em breve do SQL Server 2008, abordamos vários recursos novos que lhe ajudarão a armazenar, proteger, gerenciar e aproveitar os dados que, dada sua quantidade cada vez maior e seu escopo em expansão, são, sem sombra de dúvida, o seu ativo de negócios mais importante. – Joshua Hoffman


 Cartas: A palavra est&#225; com os leitores
Cartas
A palavra está com os leitores

Hosts fortes e fracos
A coluna The Cable Guy de setembro de 2007 (technetmagazine.com/issues/ 2007/09/CableGuy), "Modelos de hosts fortes e fracos", mencionou a capacidade de habilitar ou desabilitar o uso do host fraco, mas não especificou como fazer isso. Será que é o caso de simplesmente habilitar ou desabilitar o firewall ou de configurar um parâmetro do Registro? Existe um parâmetro do Registro associado a isso?
Além disso, a configuração do acesso local exige duas informações: o endereço IP e a máscara IP. Por que a Microsoft considera inválida uma configuração que não contém o parâmetro de gateway opcional?
— Milt B.
Você pode configurar o comportamento de hosts fortes ou fracos no Windows Vista® e no Windows Server® 2008 com os comandos listados na figura (publicada pela primeira vez na edição de setembro de 2007). Não há entradas do Registro correspondentes. Não é possível configurar comportamento de hosts fortes ou fracos no Windows® XP e no Windows Server 2003. O IPv4 só pode ser configurado no host fraco e o IPv6 só pode ser configurado no host forte.
Quanto à sua segunda pergunta, até onde sabemos, a configuração de IPv4 ou de IPv6 em uma interface não exige a configuração de um gateway padrão ou de um roteador, tanto por meio da interface do usuário como na linha de comando.


 Toolbox: Novos produtos para profissionais de TI
Toolbox
Novos produtos para profissionais de TI
Greg Steen

Gerencie vários monitores
UltraMon
realtimesoft.com
Com o preço de monitores LCD caindo, parece que a maioria dos administradores de sistema possui pelo menos dois, se não mais, monitores em sua estação de trabalho para ajudá-los a ficar de olho em diferentes painéis administrativos. (Se você não possui, eu altamente recomendo — facilita muito a vida!) Mas com a adição de outro monitor ou dois, você também começa a usar seu mouse mais intensivamente, o que pode realmente retardá-lo. Um utilitário de gerenciamento de exibição bom e fácil de usar com atalhos de teclado pode ser de grande ajuda. Uma ferramenta desse tipo que vale a pena levar em consideração é o UltraMon da Realtime Soft, um utilitário que suporta Windows® 98 até Windows Vista®, incluindo edições de 32 e 64 bits.
Quando você inicia pela primeira vez o UltraMon, provavelmente irá observar os dois pequenos ícones no canto de cada uma das janelas do seu aplicativo. O primeiro ícone expande rapidamente a janela do aplicativo pelos monitores e o segundo transporta o aplicativo para o monitor oposto. Você também notará que a barra de tarefas fica estendida ao longo de cada um dos monitores e contém os aplicativos ativos para aquele determinado monitor. Isso significa que você não precisa voltar para o seu primeiro monitor para expandir um aplicativo e você sabe imediatamente onde esse aplicativo aparecerá quando for maximizado e minimizado.
Em cada um dos atalhos do seu aplicativo, uma nova guia do UltraMon permite que você defina em que monitor esse aplicativo deve ser iniciado e em que posição. Dessa forma, você pode, por exemplo, sempre ter o Microsoft® Outlook® exibido na sua janela esquerda e o Internet Explorer® aberto acima à direita. Como profissional de TI, você está mais provavelmente se conectando à sua estação de trabalho remotamente de diferentes locais, como um laptop ou o computador da sua casa. Saiba apenas que cada uma dessas conexões remotas provavelmente requer uma leve alteração na área de trabalho e na resolução da sua tela.
Felizmente, o UltraMon suporta também perfis de exibição, que permitem a você alterar rapidamente entre exibições personalizadas nos seus monitores. Isso é de grande ajuda se você está compartilhando sua máquina com outras pessoas que precisam ou desejam sua própria exibição personalizada ou se você deseja alterar sua exibição com base nas suas atividades.
Se estiver executando o Windows 2000 ou Windows XP, você também pode ativar um recurso de "espelhamento" perfeito para apresentações, uma vez que ele possibilita que seu monitor principal seja executado a uma resolução superior do que o monitor da apresentação, mas ainda espelha as atividades do aplicativo nas duas telas. E, se você ainda não tiver atualizado para o Windows Vista, pode também fazer com que o aplicativo fique alongado pelos vários monitores (o que o Windows Vista faz por padrão).
Recursos de exibição adicionais — como um atalho para a tela de configurações de exibição, a capacidade de definir rapidamente e alternar o monitor principal no seu sistema e alternar para um perfil de exibição diferente — são algumas das atividades repetidas acessíveis rapidamente disponíveis com o ícone da bandeja do sistema UltraMon. Aqui você pode também iniciar a janela de opções do UltraMon que permitirão a você personalizar sua "Smart Taskbar" (Barra de tarefas inteligente), configurar teclas de atalho para mover e alterar janelas e colocar seu mouse em um ponto de foco específico, entre outras coisas.

Preço: a partir de US$ 39,95 para uma única licença.
The options window in UltraMon lets you set up hotkeys and manage your Smart Taskbar
The options window in UltraMon lets you set up hotkeys and manage your Smart Taskbar

Resenha de livro
Microsoft SQL Server 2005 Analysis Services
informit.com
Possuir amplos dados sobre a base do seu cliente é uma coisa, mas entender e manipular esses dados para obter estatísticas úteis e informativas sobre esses clientes é outra bem diferente. Para chegar a essas exibições e projeções calculadas, você precisa de uma solução de inteligência comercial eficiente e dinâmica. Parte da resposta da Microsoft para a inteligência comercial e a arena do OLAP (processamento analítico online) é o SQL Server® 2005 Analysis Services. E para ajudar a orientá-lo pela utilização completa dessa solução há o livro Microsoft SQL Server 2005 Analysis Services.
Esteja você considerando uma nova implantação de mineração de dados, atualizando para o Analysis Services 2005 do Analysis Services 2000 ou seja você um administrador de banco de dados interessado no que essas ferramentas podem fazer por você e pela sua organização, esse livro de Py Bateman, Alexander Berger, Irina Gorbach e Edward Melomed é perfeito para você. Em vez de insistir no território das abordagens teóricas à inteligência comercial, o livro oferece uma visão detalhada, aprofundada do uso, desenvolvimento, da implantação e do gerenciamento do Analysis Services no mundo real. Vários dos exemplos fornecidos por ele se baseiam no Food Mart 2005, um banco de dados de amostra que acompanha o software, para que você possa começar rapidamente a fazer experimentos em seu próprio ambiente de teste.
A seção introdutória do livro mostra as novidades na versão 2005, incluindo a arquitetura cliente-servidor com a comunicação XMLA (XML for Analysis) de Web service, o Unified Dimensional Model e melhorias na escalabilidade na nova versão. Você também obterá uma introdução ao banco de dados de amostra Food Mart e os conceitos básicos de bancos de dados multidimensionais. Em seguida, você passará para a criação de modelos de dados, aprendendo sobre XML DDL (linguagem de definição de dados), atributos de dimensão e hierarquias e cubos e análises multidimensionais. Você também terá uma introdução ao design e ao local de trabalho de desenvolvimento do profissional de inteligência comercial do 2005 Analysis Services com o Business Intelligence Development Studio.
Depois de aprender sobre esses conceitos de design, você passa para a manipulação de dados por MDX (expressões multidimensionais). Além de ver como consultar dados com MDX, você irá aprender como usar as funções MDX e propriedades de membro e célula, lidar com conjuntos vazios e nulos, Subselects e Subcubes e aprender como criar e usar cálculos MDX baseados em cubos e estender suas consultas com procedimentos armazenados. O livro então se aprofunda em KPIs (indicadores chave de desempenho), detalhamentos e scorecards, os quais podem todos mostrar uma visão detalhada nos vários aspectos de crescimento comercial, métrica e destinos.
O bloco seguinte do livro fornecerá a você o processo de extração, transformação e carregamento (ETL) dos seus dados, mostrando não apenas como colocar os dados no seu sistema, mas também como otimizar seu design de agregação e usar o cache proativo para aumentar o desempenho. Aqui também, você trabalhará no modelo de dado físico dos seus cubos e dimensões e verá como o processamento de cada um funciona com o 2005 Analysis Services. Além disso, você aprenderá como escalonar sua implantação e atender as necessidades dos seus negócios, atingindo o balanceamento de carga de rede, farms OLAP, grupos de dimensão e medida vinculados e processamento de partição remota.
O livro chega no âmago real da execução de consultas para fornecer a você uma melhor compreensão das operações subjacentes e ajudá-lo a ajustar o desempenho do seu aplicativo. Ele explora o acesso aos seus dados da perspectiva de um cliente e as várias opções disponíveis para fazer isso, como XMLA, ADOMD.net e AMO (Analysis Management Objects). Você precisa separar o "codificador interno" dessa seção para ver como utilizar o Visual Studio e IDEs de inteligência comercial para criar seus próprios aplicativos personalizados de data warehouse.
A última seção analisa o gerenciamento da sua instalação do Analysis Services, incluindo o uso da ferramenta de rastreamento, gravador de vôo e o SQL Server Profiler para monitorar o desempenho e a saúde do sistema. Além disso, são exibidas a você várias opções para backup e restauração da sua implantação com seções sobre o uso de um comando DDL para fazer backup do seu banco de dados, automação pelo SQL Server Agent ou SSIS (SQL Server Integration Services) e técnicas para recuperar dados perdidos ou danificados. De modo geral, esse guia para o SQL Server 2005 Analysis Services é um livro completo, de amplo espectro.

Preço:US$ 59,99.

Diagnostique problemas do banco de dados
ApexSQL Audit
apexsql.com/sql_tools_audit.asp
Você provavelmente sabe que a primeira etapa para solucionar um problema ou rastrear uma possível violação é coletar as informações pertinentes com relação ao evento que causou o problema. E se você estiver envolvido no suporte ao usuário final, provavelmente está familiarizado com reclamações juntamente com as palavras "o sistema perdeu os dados". Uma ferramenta que pode ajudá-lo rapidamente a se concentrar em problemas com os bancos de dados do SQL Server é a ApexSQL Audit da ApexSQL, que suporta totalmente o SQL Server 7.0 ao SQL Server 2005.
Como suponho que você tenha concluído pelo nome, esse aplicativo rastreia a atividade nos bancos de dados especificados e permite que você crie relatórios personalizados sobre a trilha de auditoria para análise. As entradas de auditoria são adicionadas por disparadores do SQL e armazenadas em um esquema gerado automaticamente. Você pode optar por armazenar as informações de auditoria no mesmo banco de dados dos dados que está monitorando ou em seu próprio banco de dados para um isolamento.
A instalação (e remoção) do esquema de auditoria (ou arquitetura, como a chamam) é uma operação tranqüila pela interface gráfica do usuário. Configurar um plano de auditoria para um banco de dados é relativamente simples: você escolhe o banco de dados, seleciona as tabelas e campos para monitorar e clica no botão para gerar os disparadores.
O aplicativo permite que você modifique os modelos de disparadores para o seu projeto e eu realmente gostaria que o editor de modelos fornecesse recursos do tipo IntelliSense® para o modelo do objeto de auditoria, facilitando a personalização de ambos quando o disparador fizer o lançamento e que informações serão armazenadas. Outro recurso interessante permite que você consulte facilmente tabelas de pesquisa para que as informações de auditoria sejam entendidas, em vez de serem apenas um conjunto de IDs opacas. Você também pode mapear nomes de campos monitorados para fazer a auditoria de nomes de campos se desejar mapear as colunas.
Depois de estar em pleno funcionamento, a interface do usuário pode fornecer a você uma exibição rápida dos atuais disparadores de auditoria aplicados e, com um clique, você pode ativar e desativar disparadores específicos, se necessário. Você também pode examinar que cobertura de auditoria possui com a exibição de tabela prática de interface.
Como você sabe, as informações de auditoria tendem a ser detalhadas e algum tipo de plano de gerenciamento de informações precisa ser colocado em prática para arquivar e remover bancos de dados de auditoria. O ApexSQL Audit oferece a você uma ferramenta de gerenciamento de dados que permite excluir todas as informações com um clique, especificar um conjunto de critérios e excluir ou programar uma exclusão baseada em critérios.
Os trabalhos programados são criados automaticamente como pacotes DTS (Data Transformation Services) e programados pelo SQL Agent. É claro que possuir todas essas informações de auditoria é uma coisa, mas poder usá-las é outra bem diferente. Felizmente, o ApexSQL Audit possui um forte componente de criação de relatórios que permite a você gerar exibições filtradas personalizadas de dados de auditoria atômicos e visões agregadas desses dados auditados. Depois de gerar seu relatório, você pode facilmente imprimi-lo ou exportar a saída em HTML, no Microsoft Excel ou em um arquivo de texto.

Preço: a partir de US$ 599,00.
The look-up tables in ApexSQL Audit provide extensive audit information
The look-up tables in ApexSQL Audit provide extensive audit information

Automatize lembretes de expiração da senha
Password Reminder PRO v1.4
sysoptools.com/password-reminder-pro.html
Você já notou um fluxo de chamadas para a assistência técnica quando sua política de expiração de senha passa por um grupo na sua organização? Se sim, convém conhecer a ferramenta Password Reminder PRO da SysOp Tools. Essa simples ferramenta integra-se com o Active Directory® e notifica seus usuários finais que suas contas ou senhas irão expirar em breve.
Você pode configurar três lembretes diferentes, cada um com um modelo de email distinto baseado em texto ou formatado em HTML. Você também pode configurar uma duração de senha máxima para o mesmo número de dias da sua configuração do Active Directory e o horário no qual os lembretes devem ser enviados, para que você não entre em conflito com as horas de pico. O modo de teste permite que você visualize os efeitos sem realmente afetar seus usuários finais para garantir que você configurou tudo adequadamente.
O utilitário também possui um console de relatório, que mostra uma exibição de grade de dados de diferentes classes de usuário: contas que estão expirando, usuários inativos, contas novas, contas desativadas e mais. A partir desse console de relatório, você pode exportar todas as informações em um arquivo XLS para uma revisão posterior. Para uma auditoria adicional dos emails enviados, o Password Reminder PRO envia um relatório diário de que lembretes foram enviados a quais usuários.

Preço: a partir de US$ 249,00 para uma licença de 100 usuários.
Password Reminder PRO previews configurations before deployment
Password Reminder PRO previews configurations before deployment

Solução de problemas remota simplificada
UltraVnc SC
uvnc.com/pchelpware/sc
A maneira mais fácil de solucionar um problema ou orientar um usuário por um processo é normalmente estando fisicamente na máquina. Mas isso geralmente não é possível nas empresas geograficamente dispersas de hoje. As ferramentas Conexão de Área de Trabalho Remota e Assistência Remota incorporadas ao Windows podem ajudá-lo a se conectar a algumas das máquinas no seu ambiente. Mas para cobrir todas as bases, convém você conhecer a ferramenta gratuita UltraVNC SC, dos produtores do projeto principal UltraVNC.
Como seu irmão mais velho, o UltraVNC SC permite que você exiba e controle uma máquina remota; no entanto, essa versão é um servidor UltraVNC minúsculo de 166 K que você configura e envia ao seu usuário final. Ele não requer entradas do Registro, não é executado como um serviço e não precisa de um instalador, então não há instalação ou configuração para o usuário final. O usuário apenas clica duas vezes no executável para executar o minisservidor VNC e você pode conectar à máquina para oferecer suporte e administrar, conforme necessário.
Enquanto o servidor padrão UltraVNC suporta transferências de arquivos e diretórios, atualmente o UltraVNC SC suporta apenas transferência de arquivos. Em termos de segurança, a comunicação é criptografada até o nível da sua API Microsoft Crypto (40 ou 128 bits). Além disso, o minisservidor não permite conexões de entrada, ele é apenas instanciado pelo usuário final, e pode se conectar apenas à máquina especificada na sua configuração antes de ser enviado ao usuário final.
Para criar o visualizador personalizado, ajuste alguns arquivos de configuração de texto e gráficos e execute um arquivo de processamento em lote a partir da instalação de outro complemento de projeto chamado PCHelpware para gerar o executável. A documentação não é excelente, mas mostra como executar o processo relativamente simples. Finalmente, o aplicativo é automaticamente desinstalado quando a conexão é fechada após o uso, então ele não deixa rastros ou brechas de segurança.

Preço: gratuito.

Greg Steen é um profissional de tecnologia, empresário e entusiasta que está sempre em busca de novas ferramentas para facilitar as operações, o controle de qualidade e o desenvolvimento para os profissionais de TI.


 P+R SQL: Aumente bancos de dados, use iFilters e conecte-se remotamente
P+R SQL
Aumente bancos de dados, use iFilters e conecte-se remotamente
Edited by Matthew Graven

Dica: Limpe o cache
Você já pensou por que um procedimento armazenado pode funcionar bem no ambiente de teste, mas funcionar com desempenho ruim quando implantado no SQL Server de produção? Esse problema pode estar relacionado com o cache. Antes de implantar procedimentos armazenados ao seu ambiente de produção, teste os procedimentos no ambiente de teste após ter limpado planos de consulta em cache para que você saiba como seu procedimento armazenado será executado em um ambiente de cache "frio". Veja abaixo duas coisas úteis para manter na sua lista de técnicas.
Para limpar o cache de procedimento em um SQL Server:
DBCC FREEPROCCACHE
Go
Consulta para listar todos os planos em cache:
Select * from sys.dm_exec_cached_plans
Go

P Possuo um banco de dados que apresenta tráfego intenso durante o dia e eu não desejo usar o crescimento automático porque isso poderia potencialmente causar tempos limites, se o SQL Server® decidir fazer isso durante horários de pico. Gostaria de implementar um trabalho periódico para expandir o arquivo do banco de dados em uma porcentagem específica do espaço usado. Como posso fazer isso?
R O crescimento de arquivo é uma operação de E/S de disco intensiva e, se o SQL Server precisar esperar um arquivo de dados ou de log para ser expandido, você certamente poderia ver esse desempenho prejudicial e os tempos de resposta. O incremento do crescimento padrão é de 1 MB para arquivos de dados e 10% para arquivos de log, que podem ser incrementos de crescimento insuficientes para sistemas movimentados. Além disso, confiar no crescimento automático pode levar à fragmentação do disco porque os arquivos de dados ou log não são contínuos no disco — isso significa que os tempos de resposta podem ser mais longos que o necessário, uma vez que os dados ficam fisicamente espalhados pelo disco.
A chave para o bom desempenho é alocar de maneira proativa espaço suficiente para arquivos de dados e log antecipadamente. Isso muitas vezes requer alguma análise de tendência e previsão de crescimento e resultará em um melhor desempenho porque os arquivos estarão contínuos no disco, além de evitar o custo de E/S exigido pelo crescimento automático durante períodos de pico. O crescimento automático deve geralmente ficar ativado, pois um arquivo de dados ou log completamente cheio impedirá o acesso ao banco de dados no total. Mas tenha em mente que o crescimento automático deve ser considerado uma rede de segurança, e não um recurso para gerenciar bancos de dados.
O agendamento de expansões de arquivos de banco de dados regulares deve ser evitado porque pode também levar a arquivos não-contínuos no disco e, conseqüentemente, a um desempenho reduzido. O monitoramento proativo pode ser atingido pela execução regular de um script com o objetivo de determinar a porcentagem do espaço livre para cada banco de dados (executado por um trabalho do SQL Agent) e, em seguida, pela execução de uma ação (como enviar um alerta por email pelo Correio do Banco de Dados). O código da figura fornece um script de amostra que revela como reunir a porcentagem de espaço livre para o banco de dados atual.
Depois que um alerta for gerado, você poderá fazer o script do crescimento de arquivo único com o comando ALTER DATABASE e poderá usar um trabalho do SQL Agent para agendar que essa ação ocorra fora dos horários de pico. Tente aumentar o arquivo para um tamanho que será suficiente até um futuro próximo para evitar futuras expansões de arquivos com incremento pequeno. Também é uma boa idéia verificar se o encolhimento automático não está ativado em nenhum banco de dados — isso pode criar desnecessariamente ciclos de encolhimento ou crescimento do banco de dados.
—Justin Langford
Determinando o espaço livre em um banco de dados
-- Script to gather size, free space and
-- calculate % free space for current
-- USER database
DECLARE @size DEC(15,2)
DECLARE @free DEC(15,2)
DECLARE @result DEC(15,2)

SELECT @size = SUM(size)*1.0/128
FROM sys.database_files

SELECT @free =
(SUM(unallocated_extent_page_count)*1.0/128)
FROM sys.dm_db_file_space_usage

PRINT 'DB Size ' + CONVERT(VARCHAR(15), @size)
PRINT 'Free Space ' +
CONVERT(VARCHAR(15), @free)

SELECT @result = (@free/@size)*100

PRINT '% Free Space ' +
CONVERT(VARCHAR(15), @result)

P Minha empresa armazena diferentes formatos de arquivos dentro do nosso banco de dados usando colunas varbinary e image. Eu soube que o SQL Server integrou uma funcionalidade que permitirá que eu pesquise esses diferentes formatos de arquivos. Como posso configurar o SQL Server para fazer isso?
R Essa funcionalidade é incorporada no serviço de indexação de texto completo. O serviço fornece a flexibilidade de usar interfaces IFilter, possibilitando o desenvolvimento e o carregamento de filtros que podem extrair informações úteis a partir de dados proprietários. Esses IFilters são também usados para outros produtos, como o Microsoft® Office SharePoint® Server, para coletar informações sobre arquivos rastreados.
Um IFilter é fornecido pelo criador do formato de arquivo ou por terceiros. O SQL Server já contém alguns IFilters carregados quando o FTS (FulltextService) é instalado — eles incluem filtros para arquivos HTML e DOC. No entanto, mais IFilters podem ser adicionados conforme necessário. Por exemplo, filtros para Adobe PDF podem ser encontrados no site da Adobe e um novo pacote de filtros para extensões do sistema Office 2007 foram publicadas no final de 2007. Observe que você deve saber qual versão do IFilter é necessária. Por exemplo, um IFilter pretendido para sistemas de 32 bits não funcionará com instalações de 64 bits do SQL Server.
Após executar o pacote de instalação no cliente, o IFilter normalmente será registrado no ecossistema do SO. Com os bits registrados no SO, será necessário executar algumas etapas para que o FTS possa carregar os IFilters. Após iniciar sua ferramenta de execução de consulta, emita os seguintes comandos:
  • sp_fulltext_service 'load_os_resources',1. (Essa instrução permitirá que o FTS carregue os bits registrados para processamento, incluindo componentes como separadores de palavras e lematizadores.)
  • sp_fulltext_service'verify_signature',0. (Com isso o SQL Server irá ignorar a ação de verificar se os filtros usados são assinados, uma vez que vários fornecedores não assinam seus filtros de acordo com o padrão.)
  • Reinicie a instância do SQL Server e a instância do FTS.
  • Crie seu índice de texto completo nas colunas tendo a coluna binária como o conteúdo para o IFilter a ser rastreado e a coluna de extensão (isto é, a coluna com o tipo de extensão, como DOCX) para o SQL Server escolher o filtro para o qual o conteúdo será redirecionado.
Mais informações podem ser encontradas em go.microsoft.com/?linkid=7912971.
—Jens Suessmeyer

P Não consigo me conectar a um SQL server remoto. Preciso configurar o firewall no meu cliente ou na máquina do servidor?
R Conexões remotas ao SQL Server 2005 podem falhar por várias razões, mas a configuração do firewall é um dos problemas mais comuns. O blog dos Protocolos do SQL (blogs.msdn.com/sql_protocols) é um grande recurso para obter informações sobre como fazer uma conexão SQL.
A instalação padrão do SQL Server 2005 não permite conexões remotas. A partir da máquina que executa o SQL, no menu Iniciar, selecione Microsoft SQL Server 2005 | Ferramentas de configuração | Configuração da Área de Superfície do SQL Server. Aqui, vá para Configuração da Área de Superfície de Serviços e Conexões, selecione Conexões Remotas e selecione o botão de rádio "Usando TCP/IP e pipes nomeados". Para que a alteração tenha efeito, é necessário reiniciar o SQL.
Por padrão, o SQL Server usa a porta 1433. Para verificar se a porta está aberta, use o seguinte comando do telnet, substituindo <ipaddress> pelo endereço IP real da máquina que executa o SQL Server:
telnet <ipaddress> 1433
Se você receber uma resposta de falha de conexão, abra o Firewall do Windows®, vá até a guia Exceções, selecione Adicionar Porta e adicione a porta TCP 1433. O Telnet deve agora ser bem-sucedido. (Observe que o Telnet não está instalado por padrão no Windows Vista®.)
—Rick Anderson
Agradecemos aos seguintes especialistas em SQL Server por contribuírem para essa coluna:
Justin Langford trabalha para a Coeo Ltd., uma empresa Integradora de Sistemas e Parceira Certificada pela Microsoft com base na Inglaterra. Jens Suessmeyer é consultor de banco de dados na Microsoft da Alemanha. Rick Anderson trabalha na Formação do Usuário Desenvolvedor na Microsoft. Saleem Hakani é engenheiro sênior de banco de dados e líder da comunidade do SQL Server na Microsoft.


 Utilit&#225;rio em destaque: WCAT (Ferramenta de An&#225;lise de Capacidade na Web)
Utilitário em destaque
WCAT (Ferramenta de Análise de Capacidade na Web)
Greg Steen

Logs da Web e análises históricas de tráfego podem fornecer a você uma visão detalhada do tipo de tráfego que você pode esperar com o tempo, mas como você poderá saber com o que a sua infra-estrutura realmente poderá lidar? Para descobrir, você precisa de uma ferramenta que pode expandir sua infra-estrutura e sua pilha de aplicativos até o ponto de interrupção. Uma ferramenta desse tipo é a WCAT gratuita (Ferramenta de Análise de Capacidade na Web), um utilitário leve de geração de carga que reproduz solicitações HTTP com script em um servidor Web (ou um farm de servidores com carga balanceada) ao mesmo tempo em que coleta estatísticas de desempenho para uma análise posterior. A versão mais recente (6.3.1 no momento da elaboração deste artigo) está disponível para sistemas Windows x86 e x64 (x86: iis.net/downloads/1466/ItemPermaLink.ashx; x64: iis.net/downloads/1467/ItemPermaLink.ashx) e oferece suporte a redes IPv6. Além disso, a WCAT é multithreaded e oferece suporte a vários clientes de teste de carga controlados a partir de uma única origem, de forma que você pode simular milhares de usuários simultâneos.
Esse utilitário permite que você adapte suas máquinas antigas como clientes de teste e cada um desses clientes de teste pode gerar vários clientes virtuais (o número máximo de clientes dependerá dos adaptadores da rede e de outro hardware da máquina cliente). Você pode escolher solicitações HTTP 1.0 ou HTTP 1.1, com ou sem SSL. E, se seu cenário de teste exigir, você pode usar autenticação NTLM ou básica com script para obter acesso às partes restritas do seu site. (Se o seu site usa cookies, formulários ou autenticação baseada em sessão, você pode criar a solicitação GET ou POST correta para autenticar seu usuário de teste.) A WCAT gerencia também qualquer cookie que o seu site pode definir; dessa forma, as informações do perfil e da sessão serão mantidas.
WCAT can help you test the limits of your Web site infrastructure
WCAT can help you test the limits of your Web site infrastructure
A WCAT vem acompanhada de um Guia do Usuário excelente que me ajudou a criar rapidamente um aplicativo de console do Microsoft® .NET Framework que gerou um script de cliente de teste, baseado em dados de tráfego do usuário a partir do histórico de auditoria de tráfego do site, permitindo que eu simulasse um tráfego real em uma nova base de código antes da implantação. E, se você possui um programador de C na sua equipe, pode criar funções personalizadas e manipuladores de resposta que podem ser chamados pelos seus arquivos de cenário para ajustar sua funcionalidade ao seu ambiente.
Para usar a WCAT, você precisa configurar dois arquivos: um arquivo controlador que contém as configurações de teste gerais, como o número de clientes, clientes virtuais por cliente, contadores de desempenho a controlar e o servidor Web no qual está testando, e um arquivo de cenário que contém o cenário de teste, os parâmetros de solicitação padrão e qualquer referência a funções personalizadas e bibliotecas.
O aplicativo registra em log os resultados do teste em um arquivo XML, ao qual você pode aplicar a folha de estilos XSL incluída, para obter uma tabulação organizada dos resultados quando exibidos no Internet Explorer®. O relatório contém informações de resumo, como o número de transações executadas, alternâncias de contexto ocorridas, a porcentagem de utilização da CPU (de todas as CPUs) e o número total de erros encontrados. Você também obtém uma seção que lista os resultados dos contadores de desempenho configurados no arquivo de configurações (veja a imagem da captura de tela como exemplo), uma análise de tempo de resposta, um relatório de estatísticas por transação, uma seção de divisão por cliente e informações relacionadas a como sua configuração de teste foi definida. Além disso, você verá a configuração de hardware do servidor Web remoto que está testando, juntamente com uma listagem de todas as atualizações instaladas. Essa é uma excelente maneira de determinar e controlar se um patch terá alguma implicação de desempenho no seu site.
Em suma, se você gerencia uma infra-estrutura de site da Web, o utilitário WCAT pode ajudá-lo a obter uma visão detalhada sobre como sua plataforma será executada sob pressão antes do próximo grande lançamento de código.

Greg Steen é um profissional de tecnologia, empresário e entusiasta que está sempre em busca de novas ferramentas para facilitar as operações, o controle de qualidade e o desenvolvimento para os profissionais de TI.


 The Cable Guy: Solucionando problemas de imposi&#231;&#227;o de NAP
The Cable Guy
Solucionando problemas de imposição de NAP
Joseph Davies

A nova plataforma NAP (Proteção de Acesso à Rede) interna do Windows Vista, do Windows Server 2008 e do Windows XP SP3 ajuda a proteger a intranet privada impondo a conformidade com os requisitos de integridade do computador. Os principais componentes da NAP são clientes, pontos de imposição e servidores de diretiva de integridade.
Um cliente NAP é um computador capaz de fornecer informações sobre o status da integridade para a avaliação da integridade do sistema. Um ponto de imposição de NAP é um dispositivo de acesso à rede ou ao computador que usa a NAP ou que pode ser usado com ela para exigir a avaliação do estado de integridade do cliente NAP e conceder acesso à rede restrita ou à comunicação. Um servidor de diretiva de integridade de NAP é um computador com o Windows Server® 2008 e o serviço NPS (Servidor de Diretivas de Rede) em execução que armazena as diretivas de requisito de integridade e realiza avaliações da integridade dos clientes de NAP. O servidor de integridade de NAP e os pontos de imposição NAP trocam informações sobre a integridade do sistema e as instruções de acesso restrito com o servidor RADIUS (Remote Authentication Dial-In User service) e as mensagens proxy.
Nesta coluna, descrevo os componentes de uma diretiva de requisito de integridade, como o serviço NPS processa solicitações de entrada para avaliação de NAP e de que forma solucionar os problemas mais comuns com a imposição de NAP.

Diretivas de requisito de integridade
Como funciona a avaliação de integridade de NAP
O serviço NAP do servidor de diretiva de integridade de NAP usa o seguinte processo para realizar uma avaliação de integridade:
  1. O serviço NPS compara a mensagem de solicitação de entrada com o conjunto configurado de diretivas de solicitação de conexão. Na NAP, a mensagem de solicitação deve corresponder a uma diretiva de solicitação de conexão que especifica que o serviço NPS realiza a autenticação e a autorização localmente.
    2. A diretiva de solicitação de conexão também pode impor requisitos de conexão. Por exemplo, na imposição 802.1X e VPN, a diretiva de solicitação de conexão exige o uso de um método de autenticação baseado no protocolo PEAP (Protected Extensible Authentication Protocol). Caso o cliente da conexão não use o protocolo PEAP, a solicitação da conexão é rejeitada.
  2. O serviço NPS avalia as informações de integridade na mensagem de solicitação, que consiste em uma SSoH (declaração de integridade do sistema) contendo as informações de status de integridade. O serviço NPS passa as informações de status da integridade para os SHVs instalados, os quais retornam informações de avaliação da integridade para o serviço NPS.
  3. O serviço NPS compara a mensagem de solicitação e as informações de avaliação da integridade dos SHVs com o conjunto apropriado de diretivas de rede. As informações de avaliação da integridade são comparadas com a condição da diretiva de integridade das diretivas de rede baseadas em NAP. A condição da diretiva de integridade especifica as condições de conformidade ou de não-conformidade da integridade. O serviço NPS aplica a primeira diretiva de rede correspondente à mensagem solicitada.
  4. Com base na diretiva de rede baseada em NAP correspondente e nas configurações da NAP associada, o serviço NPS cria uma SSoHR (resposta de declaração de integridade do sistema). Essa resposta inclui as informações de avaliação de integridade dos SHVs e indica se o cliente NAP tem acesso ilimitado ou restrito e se esse ele deve tentar corrigir automaticamente o estado de integridade.
  5. O serviço NPS envia uma mensagem de resposta RADIUS com a SSoHR para o ponto de imposição de NAP. Caso tenha sido concedido ao cliente o acesso restrito, a mensagem de resposta também pode conter instruções que especificam a forma de restrição de acesso do cliente NAP.
  6. O ponto de imposição de NAP envia a SSoHR para o cliente NAP.

Uma diretiva de integridade é uma combinação de uma diretiva de solicitação de conexão, uma ou mais diretivas de rede, uma ou mais diretivas de integridade e configurações NAP de um método de imposição de NAP. Para criar uma diretiva de requisito de integridade, use o assistente de configuração da NAP no snap-in do Servidor de Diretivas de Rede. (Para obter mais informações sobre o processo de avaliação, consulte a barra lateral "Como funciona a avaliação de integridade de NAP".)
Diretivas de solicitação de conexão Trata-se de conjuntos ordenados de regras que permitem ao serviço NPS determinar se uma solicitação de conexão de entrada deve ser processada localmente ou encaminhada para outro servidor RADIUS. Um servidor de diretiva de integridade de NAP processa as solicitações de conexão localmente.
As solicitações RADIUS de entrada dos pontos de imposição de NAP baseados no Windows® podem conter uma marca de origem especificando o tipo de ponto de imposição de NAP como, por exemplo, um servidor de protocolo DHCP ou um servidor VPN (rede virtual privada).
Caso a mensagem de solicitação de entrada contenha uma marca de origem, o serviço NPS do servidor de diretiva de integridade de NAP tenta comparar a solicitação apenas com as diretivas de solicitação de conexão com uma origem correspondente (todas as demais diretivas de solicitação de conexão são ignoradas). Caso a mensagem de solicitação de entrada não contenha uma marca de origem, o serviço NPS tenta comparar a solicitação com as diretivas de solicitação de conexão com uma origem não especificada (todas as demais diretivas de solicitação de conexão que especificam as origens são ignoradas).
Por exemplo, as solicitações de entrada de um servidor DHCP com NAP habilitada especificam uma marca de origem de DHCP. O serviço NPS tenta comparar as solicitações do servidor DHCP com as diretivas de solicitação de conexão com a origem de DHCP. As solicitações de entrada dos comutadores com 802.1X habilitado e dos pontos de acesso sem fio não especificam uma marca de origem. O serviço NPS tenta comparar essas solicitações com as diretivas de solicitação de conexão sem uma origem especificada.
A diretiva de solicitação de conexão usada na avaliação do processamento local ou remoto é a primeira correspondente na lista ordenada do subconjunto das diretivas que se aplicam à solicitação de entrada. Caso não corresponda a nenhuma diretiva de solicitação de conexão, a solicitação é rejeitada.
Diretivas de rede Elas são conjuntos ordenados de regras que especificam as circunstâncias nas quais as tentativas de conexão correspondentes a mensagens de solicitação de entrada são autorizadas ou rejeitadas. Para cada regra há uma permissão de acesso que concede ou nega acesso, além de um conjunto de condições, um conjunto de restrições e configurações de diretivas de rede. Caso uma conexão seja autorizada, as restrições da diretiva de rede e as configurações podem especificar um conjunto de restrições de conexão. Na NAP, as diretivas de rede podem especificar uma condição de diretiva de integridade para a verificação dos requisitos de integridade e das configurações de comportamento da imposição.
Assim como as diretivas de solicitação de conexão, as diretivas de rede usam uma marca de origem para determinar quais diretivas de rede devem ser testadas tendo em vista a correspondência com a solicitação de entrada. Caso a mensagem de solicitação de entrada contenha uma marca de origem, o serviço NPS tenta comparar a solicitação apenas com as diretivas de rede de conexão com uma origem correspondente (todas as demais diretivas de rede são ignoradas). Caso a mensagem de solicitação de entrada não contenha uma marca de origem, o serviço NPS tenta comparar a solicitação com as diretivas de rede com uma origem não-especificada (todas as demais diretivas de rede que especificam as origens são ignoradas).
A diretiva de rede usada na autorização ou na avaliação de integridade é a primeira diretiva de rede correspondente na lista ordenada do subconjunto de diretivas que se aplicam à tentativa de conexão. Caso a tentativa não corresponda a nenhuma diretiva de rede, a solicitação é rejeitada.
Diretivas de integridade Elas lhe permitem especificar requisitos de integridade em relação aos SHVs (validadores da integridade do sistema) instalados, usados na avaliação de integridade e se os clientes NAP devem ser aprovados ou reprovados em algum ou em todos os SHVs selecionados. Por exemplo, uma diretiva de integridade para clientes NAP compatíveis pode especificar se o cliente deve passar por todas as verificações de integridade. Uma diretiva de integridade para clientes NAP não-compatíveis pode especificar se o cliente deve ser reprovado em pelo menos uma verificação ou em todas as verificações de integridade.
Configurações da Proteção de Acesso à Rede Elas consistem na configuração dos SHVs instalados no servidor de diretiva de integridade de NAP tendo em vista os requisitos de integridade e as condições de erro, além dos grupos de servidores de atualizações, que especificam os conjuntos de servidores acessíveis a clientes NAP não-compatíveis com acesso restrito à rede para os métodos de imposição DHCP e VPN.

Estabelecendo o escopo em problemas de imposição de NAP
Durante a solução de problemas, é útil uma abordagem lógica. Entre algumas perguntas comuns a serem feitas durante a solução de problemas estão: O que funciona? O que não funciona? Como estão relacionados o que funciona e o que não funciona? O que não funciona alguma vez já funcionou? Em caso positivo, o que mudou desde a última vez que funcionou?
É claro que essas perguntas são mais específicas quando você lida com problemas de imposição de NAP. A conexão ou a conectividade estava funcionando antes da implantação do método de imposição de NAP? Por exemplo, o servidor do protocolo IPSec ou o isolamento do domínio estava funcionando antes da imposição do protocolo IPSec? A autenticação 802.1X estava funcionando antes da implantação da imposição do 802.1X? O acesso remoto VPN estava funcionando antes da implantação da imposição de VPN? O DHCP estava funcionando antes da implantação da imposição do DHCP?
Além disso, um método de imposição de NAP específico estava funcionando antes? Em caso positivo, o que mudou no cliente NAP, no ponto de imposição de NAP ou no servidor de diretiva de integridade de NAP? As respostas a essas perguntas podem indicar por onde iniciar a solução de problemas, permitindo, possivelmente, isolar o componente, a camada ou o problema de configuração que está causando o problema.
Para a solução de problemas gerais de imposição de NAP, você precisa determinar o escopo do problema. A primeira etapa é saber se o problema é efetivamente a imposição de NAP. Para a imposição de IPSec, determine se o cliente NAP tem o conjunto correto de diretivas IPSec para a negociação de mesmo nível IPSec e a proteção dos dados. Para a imposição do DHCP, descubra se o cliente NAP pode trocar mensagens DHCP com um servidor DHCP. Para a imposição de 802.1X e de VPN, determine se o cliente NAP consegue se autenticar com êxito. Por exemplo, caso os clientes VPN não consigam se autenticar para a conexão VPN, verifique as configurações da autenticação e as credenciais dos clientes VPN.
Caso você tenha identificado o problema como sendo da imposição de NAP, determine sua extensão em seguida. Todos os clientes NAP de todos os métodos de imposição de NAP são afetados? Todos os clientes NAP de um determinado método de imposição são afetados? Todos os clientes NAP de um determinado método de imposição e do ponto de imposição de NAP são afetados? Todos os clientes NAP membros de um determinado grupo são afetados? O problema afeta apenas um cliente NAP específico?
Por exemplo, caso todos os clientes NAP estejam enfrentando problemas com todos os tipos de imposição de NAP, talvez haja problemas de configuração nos servidores de diretiva de integridade de NAP. Caso todos os clientes NAP estejam enfrentando problemas com um método de imposição de NAP específico, talvez haja problemas de configuração nas definições da Diretiva de Grupo dos clientes NAP ou nas diretivas de requisito de integridade do método de imposição de NAP específico nos servidores de diretiva de integridade. Caso apenas clientes NAP específicos estejam enfrentando problemas na imposição de NAP, talvez haja problemas de configuração na imposição de NAP desses clientes NAP.

Problemas de imposição de NAP comuns
Recursos NAP
  • Introdução à Proteção de Acesso à Rede
  • Arquitetura de plataforma da Proteção de Acesso à Rede
  • Diretivas da Proteção de Acesso à Rede no Windows Server 2008
  • Proteção de Acesso à Rede NPS

Acesso ilimitado Quando um cliente NAP tem acesso ilimitado (não restrito), isso pode acontecer porque ele foi avaliado como sendo compatível pelo servidor de diretiva de integridade de NAP. É exatamente isso o que você quer. No entanto, o acesso ilimitado também poderia ser concedido porque o cliente NAP não recebeu uma SSoHR, que é o que normalmente ocorre quando uma avaliação de integridade não é realizada para o cliente NAP. Caso não haja nenhuma avaliação de integridade de NAP, não há SSoHR enviada novamente para o cliente NAP, e este obtém acesso ilimitado.
Por exemplo, um cliente NAP configurado para a imposição de DHCP enviará a SSoHR para o servidor DHCP. Se o servidor DHCP com o Windows Server 2008 em execução não estiver configurado para a NAP, ele não enviará mensagens de solicitação de avaliação de integridade para um servidor de diretiva de integridade de NAP. Além disso, um servidor DHCP com o Windows Server 2008 em execução configurado para NAP que não consiga atingir um servidor de diretiva de integridade de NAP atribui, por padrão, uma configuração de endereço para acesso ilimitado.
O acesso ilimitado também pode acontecer quando o servidor de diretiva de integridade de NAP não realiza uma avaliação de integridade porque a solicitação de entrada encontrou uma diretiva de rede que não exige avaliação de integridade de NAP. Para obter informações sobre como determinar se a diretiva de rede corresponde à solicitação de um cliente NAP, consulte a seção "Solucionando problemas de imposição de NAP passo a passo" desta coluna.
Acesso restrito Um cliente NAP que tem acesso restrito foi avaliado como sendo não-compatível pelo servidor de diretiva de integridade de NAP. Caso o cliente NAP tenha acesso restrito, embora devesse ter acesso ilimitado, verifique o estado de integridade do cliente NAP em relação às configurações de diretiva de integridade correspondentes à diretiva de rede referente à solicitação do cliente NAP.
Sem correções automáticas Quando configurados apropriadamente, os clientes NAP podem corrigir automaticamente o estado de integridade. Caso os clientes NAP não consigam se corrigir, verifique se a caixa de seleção Habilitar correção automática de computadores cliente está marcada nas configurações da imposição de NAP da diretiva de rede correspondente à solicitação do cliente NAP.
Outro problema que pode afetar a correção automática é quando o cliente NAP restrito não consegue atingir os servidores de atualizações para baixá-las. Para a imposição de IPSec, verifique se os servidores de atualizações têm a diretiva de IPSec correta aplicada. Para a imposição de 802.1X, verifique as configurações na diretiva de rede correspondente que atribuem a ACL (lista de controle de acesso) ou o VLAN ID (identificador da rede local virtual) e verifique a configuração da ACL ou a VLAN dos comutadores ou dos APs (pontos de acesso) sem fio. Para a imposição de VPN ou de DHCP, verifique as configurações na diretiva de rede correspondente ao grupo de servidores de atualizações e se todos os servidores de atualizações estão configurados como membros do grupo. Para a imposição de DHCP, verifique se as opções de escopo do DHCP dos clientes NAP estão configuradas corretamente como, por exemplo, o valor da opção Gateway Padrão da classe do usuário NAP.
Avaliação de incapacidade para NAP Em qualquer método de imposição de NAP, verifique se o cliente de imposição correspondente está habilitado no cliente NAP. Para a imposição de 802.1X e VPN, verifique se o cliente NAP apresenta a verificação de integridade de sistema para o método de autenticação do PEAP habilitada tanto na diretiva de solicitação da conexão quanto no cliente NAP (a caixa de seleção Ativar verificações de Quarentena na caixa de diálogo Propriedades EAP protegidas está marcada).
Cliente NAP não está restrito, mas não consegue chegar à intranet Para a imposição de IPSec, verifique se a diretiva de IPSec dos clientes NAP compatíveis e a diretiva IPSec dos computadores da intranet têm um mesmo conjunto de configurações de negociação e de proteção. Para a imposição de 802.1X, confirme se a diretiva de rede dos clientes NAP compatíveis especifica a ACL ou o VLAN ID da intranet, e não de toda a rede. Verifique a configuração da ACL ou do VLAN ID da intranet nos comutadores ou nos APs sem fio. Para a imposição de VPN, verifique se não há filtros de pacote IP configurados na diretiva de rede para clientes NAP compatíveis restringindo o tráfego dos clientes de VPN.

Solucionando problemas de imposição de NAP passo a passo
Uma forma de iniciar a solução de um problema com a imposição de NAP de um cliente NAP específico é começar pela configuração do cliente NAP, verificar o log de eventos do cliente e, em seguida, acessar o servidor de integridade de NAP para determinar como o serviço NPS processou a solicitação do cliente NAP.
Etapa 1: verificar a configuração do cliente NAP A configuração do cliente NAP consiste em serviços do Windows, clientes de imposição e configurações específicas da imposição de NAP. Para exibir o status do cliente NAP e as informações de configuração, use os comandos netsh nap client show state e netsh nap client show configuration.
Observe que, caso as configurações do cliente NAP estejam sendo fornecidas pela Diretiva de Grupo, todas as configurações do cliente NAP são especificadas por ela e todas as configurações do cliente são ignoradas. Nesse caso, use o comando netsh nap client show grouppolicy para exibir a configuração do cliente NAP baseado na Diretiva de Grupo e fazer as alterações por meio dela.
Para a imposição de IPSec em um computador com o Windows Vista® em execução, use o comando net start para verificar se os serviços Agente de Proteção de Acesso à Rede, IKE e Módulo de Chaveamento IPSec AuthIP, além do Agente de Diretiva IPsec foram iniciados. Use o comando netsh nap client show configuration para verificar se o cliente de imposição da Terceira Parte Confiável IPSec está habilitado. Se necessário, use o snap-in Configuração de Cliente NAP para habilitar o cliente de imposição Terceira Parte Confiável IPSec ou use o comando netsh nap client set enforcement 79619 enabled. Os comandos de imposição netsh nap client set devem ser executados em um prompt de comando com privilégios elevados.
Para a imposição de 802.1X em um computador com o Windows Vista em execução, use o comando net start para verificar se os serviços de protocolo EAP, Agente de Proteção de Acesso à Rede, Serviço de Configuração Automática de Rede com Fio (para imposição de 802.1X em conexões com fio) e Configuração Automática de WLAN (para imposição de 802.1X em conexões sem fio) foram iniciados.
Use novamente o comando netsh nap client show configuration para verificar se o cliente de imposição da Quarentena EAP está habilitado. Se necessário, use o snap-in Configuração de Cliente NAP para habilitar o cliente de imposição da Quarentena EAP ou use o comando netsh nap client set enforcement 79623 enabled. Verifique se a caixa de seleção Ativar verificações de Quarentena está marcada para as propriedades do método de autenticação EAP Protegido da conexão com ou sem fio.
Para a imposição de VPN em um computador com o Windows Vista em execução, use o comando net start para verificar se os serviços de protocolo EAP, Agente de Proteção de Acesso à Rede e Gerenciador de Conexão de Acesso Remoto foram iniciados.
Use a exibição do comando netsh nap client show configuration para verificar se o cliente de imposição da Quarentena de Acesso Remoto está habilitado. Se necessário, use o snap-in Configuração de Cliente NAP para habilitar o cliente de imposição da Quarentena de Acesso Remoto ou o comando netsh nap client set enforcement 79618 enabled. Verifique se a caixa de seleção Ativar verificações de Quarentena está marcada para as propriedades do método de autenticação EAP Protegido da conexão VPN.
Para a imposição de DHCP em um computador com o Windows Vista em execução, use o comando net start para verificar se os serviços Agente de Proteção de Acesso à Rede e Cliente DHCP foram iniciados. Se necessário, use o snap-in Serviços ou a ferramenta Sc.exe para iniciar esses serviços e configurá-los para inicialização automática.
Use a exibição do comando netsh nap client show configuration para verificar se o cliente de imposição da Quarentena DHCP está habilitado. Se necessário, use o snap-in Configuração de Cliente NAP para habilitar o cliente de imposição da Quarentena DHCP ou use o comando netsh nap client set enforcement 79617 enabled.
Etapa 2: verificar o log de eventos do cliente NAP Use o snap-in Visualizar Eventos para verificar os eventos no log criado pelo serviço Agente de Proteção de Acesso à Rede. Nos computadores com o Windows Vista em execução, use o snap-in Visualizar Eventos em Logs de Aplicativos e Serviços\Microsoft\Windows\Proteção de Acesso à Rede\Operacional. Nos computadores com o Windows XP com SP3 em execução, use o snap-in Visualizar Eventos para exibir os eventos NAP no log de eventos do sistema.
Nos eventos de cliente NAP, obtenha a identificação de correlação da avaliação de integridade de cliente NAP. É possível usar a identificação de correlação ou o nome do computador do cliente NAP para localizar o evento de avaliação de integridade no servidor de diretiva de integridade de NAP. A Figura 1 mostra um exemplo de um evento de um cliente NAP incompatível com a identificação de correlação.
Figure 1 Exemplo de um evento de cliente NAP do Windows Vista
Figure 1 Exemplo de um evento de cliente NAP do Windows Vista
Etapa 3: verificar o log de eventos do NPS No servidor de diretiva de integridade de NAP, use o snap-in Visualizar Eventos para exibir os eventos no log Logs do Windows\Segurança criado pelo serviço NPS. Para exibir os eventos de NPS, no Visualizar Eventos, abra Modos de Exibição Personalizados, Funções do Servidor e clique em Serviços de Acesso e Diretiva de Rede. Para exibir um tópico da ajuda online associado ao evento, clique no link "Ajuda Online do Log de Eventos" da guia Geral do evento.
Eventos de avaliação de integridade de NAP típicos apresentam as identificações 6278 (de acesso ilimitado) ou 6276 (de acesso restrito). Localize o evento de servidor de diretiva de integridade de NAP com base no nome do computador do cliente NAP (o campo Nome da Conta na seção Cliente da descrição do evento) ou a identificação de correlação (o campo Identificador de Sessão na seção Informações de Quarentena da descrição do evento).
Os eventos do log NPS 6278 e 6276 contêm informações sobre a avaliação de integridade NAP como, por exemplo, o nome da diretiva de solicitação de conexão correspondente (o campo Nome da Diretiva de Proxy na seção Detalhes da Autenticação na descrição do evento) e a diretiva de rede correspondente (o campo Nome da Diretiva de Rede na seção Detalhes da Autenticação da descrição do evento). A Figura 2 é um exemplo da guia Detalhes de uma identificação de evento 6276 com o Nome da Diretiva de Proxy, o Nome da Diretiva de Rede e a identificação de correlação (chamada QuarantineSessionID). Trata-se do evento de diretiva de integridade de NAP correspondente ao evento de cliente NAP do Windows Vista na Figura 1.
Figure 2 Exemplo de um evento de servidor de diretiva de integridade de NAP
Figure 2 Exemplo de um evento de servidor de diretiva de integridade de NAP
Caso não haja nenhum evento correspondente ao evento de cliente NAP, verifique se o serviço Servidor de Diretivas de Rede foi iniciado e se o ponto de imposição de NAP foi configurado corretamente para a NAP e para o uso do servidor de diretiva de integridade NAP como servidor RADIUS. Verifique se as mensagens RADIUS podem ser enviadas entre o ponto de imposição de NAP e o servidor de diretiva de integridade de NAP.
Seguindo essas três etapas, você já deve estar bem encaminhado para saber por que a imposição de NAP não está funcionando como esperado. Para obter mais informações sobre a NAP, consulte a barra lateral "Recursos NAP".

Joseph Davies é redator técnico da Microsoft, além de ensinar e escrever tópicos sobre o sistema de rede do Windows desde 1992. Ele já escreveu oito livros para a Microsoft Press e é autor da coluna online mensal Cable Guy, da TechNet.


 Windows PowerShell: Assine aqui, por favor
Windows PowerShell
Assine aqui, por favor
Don Jones

Na coluna Windows PowerShell de janeiro de 2008, salientei a importância da assinatura digital de seus scripts do Windows PowerShell. E descrevi alguns cenários onde qualquer diretiva de execução diferente de AllSigned poderia criar vulnerabilidades de segurança significativas em seu ambiente.
Um assunto que não abordei em muitos detalhes é a forma como realmente assinar os seus scripts. Dê uma olhada na outra coluna em technetmagazine.com/issues/2008/01/PowerShell. Adivinhe sobre o que falarei neste mês?

Mais do que uma simples assinatura
A palavra assinatura é o termo técnico correto para o assunto sobre o qual estou falando, embora a palavra propriamente dita não seja uma boa descrição do que está acontecendo aqui. Assinar um script não significa que você o está aprovando ou autorizando, como o faria com um contrato ou com uma guia de cartão de crédito. No mundo da segurança digital, assinar é o processo de associar a sua identidade a algo e garantir que o estado ou condição desse "algo" não seja modificado de forma alguma. Tudo se baseia em criptografia, e a criptografia (pelo menos neste caso) começa com um par de chaves de criptografia.
Essas chaves são conhecidas como chaves assimétricas porque são diferentes uma da outra. O par consiste em uma chave privada, que só pode ser acessada por você, e em uma chave pública, que pode ser acessada por qualquer pessoa. Estou simplificando um pouco, mas basicamente qualquer coisa criptografada com a chave privada só poderá ser descriptografada com a chave pública correspondente.
Veja como funciona. Novamente, estou simplificando apenas para manter a discussão em andamento. Tenho um script Windows PowerShell® que desejo assinar e tenho um certificado que contém a minha chave privada que desejo usar para isso. O próprio Windows PowerShell possui um cmdlet, sobre o qual falarei em instantes, que pode obter o script e o certificado e executar a assinatura real. Quando faz isso, o Windows PowerShell obtém o script e o criptografa usando a minha chave privada. Essa cópia criptografada é exibida como texto sem sentido adicionado ao final do script como uma série de comentários (consulte a Figura 1). A minha identidade também é codificada, mas não criptografada, nesses comentários — a identidade propriamente dita pode ser lida sem que seja preciso recorrer à criptografia.
Figure 1 Bloco de assinatura no final do seu script
Figure 1 Bloco de assinatura no final do seu script
Mais tarde, quando o Windows PowerShell ler a assinatura, decodificará a minha identidade e a usará para obter a minha chave pública. Uma vez que somente a minha chave pública pode descriptografar o resto da assinatura, o Windows PowerShell sabe que se ela é capaz de descriptografar a assinatura, então eu devo tê-la criado. Se outra pessoa tivesse assinado, a minha chave pública não seria capaz de descriptografar a assinatura. Depois que a assinatura é descriptografada, o Windows PowerShell compara o script à cópia que foi criptografada na assinatura. Se forem iguais, a assinatura será considerada intacta. Se os dois scripts forem diferentes, a assinatura será quebrada e considerada inválida.
Essa é a forma como uma assinatura protege um script não-criptografado de ser modificado sem que ninguém note. Lembre-se, enquanto o próprio script pode ser facilmente alterado, a assinatura não poderá ser alterada para coincidir com o script modificado sem o uso da minha chave privada — e somente eu tenho a minha chave privada.
Isso é definitivamente uma simplificação do processo técnico subjacente. Na realidade, as assinaturas podem e contêm mais informações, como uma cópia da minha chave pública, informações sobre a CA (autoridade de certificação) que emitiu as chaves, e assim por diante. Mas a minha descrição aqui certamente destaca as partes importantes do processo e realça o fato de que a assinatura na verdade protege você de modificações não autorizadas no script.
Um fator de segurança crítico é a proteção absoluta da sua chave privada — você não quer que ela caia nas mãos de outra pessoa. Quando instalar a sua chave no Windows, proteja-a imediatamente por senha para que um processo malicioso não a utilize sem o seu conhecimento. Os cartões inteligentes oferecem uma segurança ainda melhor, já que contêm a sua chave privada. A sua chave privada nunca deixará o cartão inteligente. Em vez disso, os dados que você deseja criptografar são transmitidos para o cartão por meio de seu hardware de leitura e o conjunto de circuitos do próprio cartão executará a criptografia e enviará o resultado de volta.

Obtendo um certificado
Cmdlet do mês: Export-CSV
Com freqüência, o pessoal que freqüenta os fóruns do site PowerShellCommunity.org pergunta se o Windows PowerShell pode ser exportado para o Microsoft Excel®. É claro que sim! O cmdlet Export-CSV executa esse truque, já que o Excel pode abrir, editar e salvar arquivos CSV de forma nativa. Por exemplo, se você quiser exportar uma lista de serviços, basta executar Get-Service | Export-CSV MeusServicos.csv. Na verdade, você pode inserir Export-CSV no final de qualquer pipeline e todos os objetos desse pipeline terminarão no arquivo CSV especificado. Por padrão, Export-CSV adiciona uma linha de cabeçalho ao início do arquivo, que será usada para especificar o tipo de objeto exportado. Essa linha é comentada para que não impeça que o Excel abra o arquivo. Se você não quiser que essas informações de tipo sejam exportadas, basta adicionar o parâmetro -notype a Export-CSV. Além disso, você pode adicionar o parâmetro -force para impor a substituição de um arquivo CSV existente com o mesmo nome sem confirmação (o padrão é a solicitação da confirmação) ou pode adicionar o parâmetro -noClobber para impedir a substituição de um arquivo existente.

Para assinar scripts, você precisará de um tipo específico de certificado — um certificado de assinatura de código Authenticode de Classe III — e existem três maneiras de obter um. A primeira é usar a PKI (Infra-Estrutura de Chave Pública) interna da sua organização, se houver uma. Uma PKI bem implementada fará com que todos os computadores da sua organização confiem na sua autoridade de certificação raiz — isso é necessário para que os certificados emitidos pela autoridade de certificação possam ser usados na organização.
O Windows Server® vem com seu próprio software de Servidor de Certificação desde o Windows® 2000, e você poderá usá-lo para criar a sua própria PKI. Uma implementação de PKI completa exige muito planejamento, mas se você simplesmente precisar de uma PKI para emitir certificados de assinatura de código, não terá toneladas de trabalho. Bastará usar uma Diretiva de Grupo para disponibilizar o seu certificado raiz da autoridade de certificação para todos os seus computadores para que eles confiem nele.
Uma segunda opção é usar uma autoridade de certificação comercial. Uma vantagem de usar uma é que, se você selecionar uma das principais autoridades de certificação, provavelmente os computadores da sua organização já estarão configurados para confiarem nos certificados emitidos por ela (observe que o Windows XP confia em um grande número delas por padrão, enquanto que o Windows Vista® confia em um número muito menor por padrão). Uma autoridade de certificação muito conhecida é a VeriSign (verisign.com). Existem outras que também merecem a sua atenção, como a CyberTrust (cybertrust.com) e a Thawte (thawte.com).
A terceira opção para a obtenção de um certificado de assinatura de código é criar o seu próprio certificado auto-assinado usando uma ferramenta como Makecert.exe. Ele vem com o SDK da Plataforma do Windows, pode ser instalado em algumas edições do Microsoft® Office e pode ser encontrado em vários outros locais. A vantagem de um certificado auto-assinado é que ele é gratuito e não exige infra-estrutura. A desvantagem, no entanto, é que ele só pode ser usado em seu computador. Mas se você simplesmente precisa habilitar a execução de scripts em seu computador — para testes ou experimentos gerais com assinatura de código — o Makecert.exe é uma ótima opção. A documentação dessa ferramenta pode ser encontrada em go.microsoft.com/fwlink/?LinkId=108538. Saiba que houve muitas versões dessa ferramenta nos últimos anos e, portanto, é possível que o seu computador esteja executando uma versão mais antiga que não funciona exatamente como descrito pela documentação.
Depois de obter o Makecert.exe, crie um certificado auto-assinado ao executar algo como o código a seguir na linha de comando do Windows PowerShell (e não me deixe pegar ninguém usando cmd.exe enquanto estiver lendo esta coluna):
makecert -n "CN=MyRoot" -a sha1 –eku
1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer
–ss Root -sr localMachine
E depois execute o seguinte comando:
makecert -pe -n "CN=MyCertificate" -ss MY
–a sh1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk
–c root.cer
O Makecert.exe solicitará uma senha para a proteção da chave e criará certificado. Você pode verificar a instalação executando este código no Windows PowerShell:
gci cert:\CurrentUser\My -codesigning
Isso exibirá uma lista de todos os itens da unidade CERT: (que é o armazenamento de certificados do Windows) que são certificados de assinatura de código. Aliás, tudo isso também está documentado no próprio Windows PowerShell. Para localizar essa documentação, basta executar a ajuda de About_Signing e ler algumas telas.

Assinando um script
Agora que você tem um certificado e um script (para fins de teste, basta criar um rapidamente, se necessário), está pronto para assinar o script. Isso é extremamente fácil com o Windows PowerShell — basta digitar:
$cert = @(gci cert:\currentuser\my
-codesigning)[0]
Set-AuthenticodeSignature myscript.ps1 $cert
A primeira parte recupera o primeiro certificado de assinatura de código instalado (se você tiver vários certificados instalados e se quiser usar algum diferente do primeiro, basta alterar o "0" pelo número apropriado). A segunda parte assina o arquivo (é claro, você terá de alterar o nome do arquivo para ficar igual ao seu). É simples assim! No entanto, para ser totalmente honesto, acho que o nome do cmdlet Set-AuthenticodeSignature é um pouco mais longo do que o necessário e é por isso que criei um alias chamado Sign. Agora, basta executar:
Sign myscript.ps1 $cert
Abra esse script para ver o bloco de assinatura inserido no final. Tente executar o script com a sua diretiva de execução definida como AllSigned (Set-ExecutionPolicy AllSigned) e tudo deve funcionar bem. Modifique o script, se quiser, e salve-o, mas não o assine novamente. Agora, o Windows PowerShell deve simplesmente se recusar a executar a versão modificada, uma vez que a assinatura foi quebrada.

Vale o esforço
Isso realmente vale todo esse trabalho? Seria pedir muito ser capaz de criar um script com algumas tarefas administrativas sem ter de gastar US$ 500 em um certificado ou implementar todo um novo elemento de infra-estrutura? Veja, eu sou um administrador também e compreendo as suas preocupações. Mas a resposta simples é que isso definitivamente vale cada pedacinho de esforço exigido.
O fato é que a segurança quase sempre envolve algum nível de trabalho. O software antivírus pode ser um saco, mas você não vive sem ele. O software de firewall é definitivamente um problema, mas como você sabe, não é seguro viver sem um firewall. E o UAC (Controle de Conta de Usuário) do Windows Vista também pode ser um problema, mas torna o seu computador mais seguro. E essa não é a segurança aprimorada que todos nós estamos tentando obter?
O Windows PowerShell é uma ferramenta poderosa e, como qualquer outra ferramenta, sempre há o risco de ser envolvida em uma vulnerabilidade de segurança por um usuário malicioso. É por isso que é importante que você tome providências para impedir esses usuários maliciosos.
A assinatura de código é a melhor providência a ser tomada e não exige muito envolvimento. Por exemplo, eu uso um editor gráfico de scripts que assina automaticamente os meus scripts sempre que eu pressiono Salvar e, portanto, a assinatura de código é bastante transparente para mim.
Você pode torná-la ainda mais transparente, mesmo sem um editor luxuoso. Por exemplo, você pode criar um perfil do Windows PowerShell para si mesmo (crie o arquivo Microsoft.PowerShell_profile.ps1 em uma pasta chamada WindowsPowerShell, localizada em sua pasta de documentos) e adicione esta função a ele:
function sign ($filename) {
  $cert = @(gci cert:\currentuser\my
-codesigning)[0]
Set-AuthenticodeSignature $filename $cert
}
Agora é possível assinar os seus scripts simplesmente digitando:
Sign c:\scripts\myscript.ps1
É claro que esse script de perfil deve ser o primeiro a ser assinado! A idéia é tomar algumas providências para tornar a assinatura de script tão conveniente quanto possível, para que ela não seja um problema.
A implantação de uma PKI de um servidor para o único propósito de emitir um certificado de assinatura de código não significa muito trabalho (no entanto, tenha em mente que você realmente precisa pesquisar e planejar a sua PKI, incluindo a proteção da autoridade de certificação raiz e o fornecimento de recuperação de desastres, especialmente se ela for usada para algo mais). O Makecert.exe sempre estará disponível se você for o único a executar scripts em seu ambiente. Observe que o tópico da ajuda About_Signing do Windows PowerShell também inclui informações sobre a proteção do certificado produzido pelo Makecert.exe.

Don Jones é o autor de Windows PowerShell: TFM and VBScript, WMI, and ADSI Unleashed. Você pode entrar em contato com ele pelo site PowerShellCommunity.org.


 Ei, Equipe de Scripts!: O retorno do script de banco de dados
Ei, Equipe de Scripts!
O retorno do script de banco de dados
The Microsoft Scripting Guys
Faça download do código deste artigo: HeyScriptingGuy2008_04.exe (151KB)

Sabe, se a Equipe de Scripts tivesse um ponto fraco (veja bem, nós dissemos "se"), seria este: nós nos preocupamos muito com as possíveis conseqüências das ações que tomamos ou das que não tomamos. Em vez de agirmos em causa própria, quase sempre nos contemos e fazemos o que achamos ser melhor para os outros. E fazemos isso a despeito do que essas ações poderiam significar para nós.
Veja os artigos sobre scripts de banco de dados, por exemplo. Para sermos totalmente honestos, achamos difícil escrever artigos sobre scripts de banco de dados. Não porque scripts de banco de dados sejam difíceis; na verdade, são bem fáceis. O problema é que a Equipe de Scripts não tem muitas oportunidades de trabalhar com bancos de dados; por causa disso, sempre que escrevemos sobre banco de dados, temos de parar e pensar no que estamos fazendo. Como você já percebeu há muito tempo, pensar definitivamente não é um requisito para alguém fazer parte da Equipe de Scripts.
Para falar a verdade, se qualquer um de nós realmente pensasse sobre isso, provavelmente não haveria uma Equipe de Scripts.
Dessa forma, se artigos sobre scripts de bancos de dados são tão difíceis de escrever, por que continuamos a escrevê-los? A resposta é simples: estamos preocupados com o que poderia acontecer com o resto do mundo caso parássemos de escrever esses artigos. Quando Sir Arthur Conan Doyle decidiu matar Sherlock Holmes (fazendo-o cair de um despenhadeiro na estória "O problema final"), pensou simplesmente que estaria se livrando de um personagem sobre o qual não desejava mais escrever. Em vez disso, conseguiu gerar protestos em todo o mundo. De acordo com alguns relatos, pessoas em Londres usavam faixas negras nos chapéus e mangas, pois ficaram de luto quando souberam da notícia. "O problema final" foi publicado na The Strand Magazine em 1893; em resposta, 20 mil cancelaram suas assinaturas.
Ai!
A Equipe de Scripts está preocupada, pois matar nossos artigos sobre scripts de banco de dados poderia ter um efeito mundial semelhante. Não queremos ser a causa de tanta dor e desespero e certamente não queremos que 20 mil de vocês cancelem suas assinaturas da TechNet Magazine. Portanto, gostaríamos de anunciar que a Equipe de Scripts continuará a escrever artigos sobre scripts de bancos de dados. Quando? Bem, que tal agora mesmo?

Adicionando registros a um banco de dados
O que pensamos em fazer neste mês é mostrar a você alguns pequenos truques engenhosos para trabalhar com bancos de dados. E sim, esses truques serão um complemento dos truques mostrados em nossa coluna de setembro de 2007 (technetmagazine.com/issues/2007/09/HeyScriptingGuy); até mesmo a Equipe de Scripts não desceria tão baixo escrevendo o mesmo artigo duas vezes.
Bem, não até pensarmos em algo para não sermos descobertos.
Vamos começar mostrando uma maneira simples de adicionar um registro a um banco de dados. Vamos supor que temos um banco de dados chamado C:\Scripts\Inventory.mdb e que ele inclui uma tabela chamada Computers. A tabela Computers contém os seguintes campos:
  • ComputerName
  • SerialNumber
  • UserName
  • Departament
Agora, como podemos adicionar um novo computador a esse banco de dados? Observe o código da Figura 1.
Figure 1 Adding a record to the Computers table (Close Figure 1)
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = C:\Scripts\Inventory.mdb"

objRecordSet.Open "INSERT INTO Computers (ComputerName, SerialNumber, UserName, Department)" &  _
    "VALUES ('atl-ws-07', '11234', 'Ken Myer', 'Finance')", _
        objConnection, adOpenStatic, adLockOptimistic
Não vamos entrar em detalhes sobre as primeiras linhas deste script; se você precisar desse tipo de informação, talvez seja melhor dar uma olhada em alguns dos recursos que temos no Script Center, microsoft.com/technet/scriptcenter. Basta dizer que usamos as constantes adOpenStatic e adLockOptimistic para controlar o tipo de cursor e o bloqueio de registros para o nosso conjunto de registros (sim, isso parece impressionante, mas na verdade é bem simples). Depois de criarmos instâncias dos objetos ADODB.Connection e ADODB.Recordset, usamos este comando para abrir o banco de dados:
objConnection.Open _
"Provider = Microsoft.Jet.OLEDB.4.0; " & _
"Data Source = C:\Scripts\Inventory.mdb"
A propósito, esse comando abre um banco de dados do Microsoft® Access® 2003. Para abrir um banco de dados do Access 2007, use este comando:
objConnection.Open _
"Provider = Microsoft.ACE.OLEDB.12.0; " & _
"Data Source = C:\Scripts\Inventory.accdb"
E, embora estejamos começando a nos afastar um pouco do tópico principal, talvez você possa usar um comando semelhante a este para abrir um banco de dados do SQL Server®:
objConnection.Open _
"Provider=SQLOLEDB;" & _
"Data Source=atl-sql-01;" & _
"Trusted_Connection=Yes;" & _ "InitialCatalog=Inventory;" & _
"User ID=fabrikam\kenmyer;Password=34DE6t4G!;"
Até aqui, tudo o que mostramos é código padronizado; como você verá em breve, grande parte de nossos scripts começará com essas mesmas linhas de código. Na verdade, a parte que queremos enfatizar é esta linha:
objRecordSet.Open _
  "INSERT INTO Computers " & _
  "(ComputerName, SerialNumber, " & _
  "UserName, Department) " & _
    "VALUES ('atl-ws-07', 'A14B1234', " & _
      "'Ken Myer', 'Finance')", _
        objConnection, adOpenStatic, _
        adLockOptimistic
Aqui, estamos usando a consulta INSERT INTO para, bem, inserir um novo registro na tabela Computers. Observe que, após o nome da tabela, incluímos os nomes de todos os campos para os quais temos valores, separando-os por vírgulas e colocando-os entre parênteses.
Você pode estar se perguntando: o que a Equipe de Scripts quer dizer quando menciona "todos os campos para os quais temos valores"? Boa pergunta. Bem, digamos que esse novo computador ainda será atribuído a um departamento. Supondo que o banco de dados nos permite colocar um valor nulo no campo Department, podemos simplesmente deixar Department de fora da lista e não atribuir nenhum valor a ele. Em outras palavras, poderíamos escrever uma consulta como esta:
objRecordSet.Open _
  "INSERT INTO Computers " & _
  "(ComputerName, SerialNumber, " & _
  "UserName) " & _
    "VALUES ('atl-ws-07', 'A14B1234', " & _
      "'Ken Myer')", _
        objConnection, adOpenStatic, _
        adLockOptimistic
Falando em atribuir valores, veja o que vem depois dos nomes de campo: a palavra-chave VALUES, seguida pelos valores que queremos atribuir a cada campo (que também estão entre parênteses). Tenha em mente que, quando listamos os nomes de campo, podemos fazê-lo em qualquer ordem; por exemplo, colocamos ComputerName primeiro, mesmo que esse não seja o primeiro campo do banco de dados. Isso funciona bem para nomes de campos, mas não tanto para valores. Os valores devem ser listados na mesma ordem dos campos. Se o nosso primeiro campo listado for ComputerName, o nosso primeiro valor deverá ser o nome do computador. Se não for, teremos problemas (por exemplo, podemos terminar atribuindo o nome de usuário ou o número de série ao campo ComputerName).
Como você pode ver, atribuir valores não é muito complicado; basta garantir a formatação dos valores de acordo com o tipo de dados: as datas e os valores de cadeia de caracteres devem ser inseridos entre aspas simples; os valores numéricos e booleanos não devem ser inseridos entre aspas simples.
Ah, e se você tiver um valor que contenha suas próprias aspas simples (como o nome O'Brien), será preciso "escapá-la", duplicando-a:
'O''Brien'
Doido, mas é verdade.

Excluindo registros de um banco de dados
Isso foi realmente muito bom: podemos adicionar um registro a um banco de dados executando uma única consulta SQL. Poderia haver algo melhor do que isso? Nós não conhecemos.
Bem, exceto talvez sermos capazes de excluir vários registros de um banco de dados usando uma única consulta.
Digamos que a sua empresa decida eliminar seu departamento de Recursos Humanos (não, não vamos fazer piadas; normalmente já temos muitos problemas com o departamento de RH da Microsoft). Como é possível excluir todos os computadores de Human Resources do nosso banco de dados Inventory? A Figura 2 mostra um meio de fazer isso.
Figure 2 Deleting multiple records (Close Figure 2)
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = C:\Scripts\Inventory.mdb"

objRecordSet.Open "DELETE * FROM Computers Where Department='Human Resources'", _
    objConnection, adOpenStatic, adLockOptimistic
Como você pode ver, esse script em particular começa exatamente da mesma forma que o script para a adição de um novo registro: definindo algumas constantes, criando alguns objetos e fazendo uma conexão ao banco de dados Inventory.mdb. Depois disso, simplesmente usamos uma consulta DELETE para excluir todos os registros (*) da tabela Computers ou, pelo menos, todos os registros onde o campo Department for igual a Human Resources:
objRecordSet.Open _
  "DELETE * FROM Computers " & _
   "Where Department='Human Resources'", _
    objConnection, adOpenStatic, _
    adLockOptimistic
É tão fácil como cair de um despenhadeiro.
Hum, sem ofensas, Sherlock Holmes.

Atualizando registros em um banco de dados
Não há dúvidas de que todos concordam como seria divertido excluir todos os traços do nosso departamento de Recursos Humanos (Observação para o departamento de RH da Microsoft: queremos dizer divertido para outras pessoas e seus departamentos de RH. Não tem nada a ver conosco. Nós detestaríamos fazer isso). Todavia, excluir todos os computadores de RH do banco de dados Inventory poderia não ser a melhor coisa a se fazer. Por que não? Bem, a menos que os seus funcionários de RH tenham fugido com todo o hardware (o que parece com algo que eles fariam — bem, deixa para lá, dissemos que não faríamos piada com isso), esses computadores ainda pertencem à sua empresa; isso significa que eles ainda estariam listados no banco de dados. Sabendo disso, vamos fazer o seguinte. Em vez de excluirmos os registros do banco de dados, vamos simplesmente atualizá-los; vamos alterar o nome do departamento de cada um dos computadores de Human Resources para None (Nenhum). Em outras palavras, executaremos o script mostrado na Figura 3.
Figure 3 Updating records (Close Figure 3)
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = C:\Scripts\Inventory.mdb"

objRecordSet.Open "UPDATE Computers Set Department = 'None' " & _
    "Where Department = 'Human Resources'", _
    objConnection, adOpenStatic, adLockOptimistic
Novamente, a única diferença desse script é a consulta SQL. Neste caso, estamos usando uma consulta UPDATE para atualizar registros na tabela Computers. Além da palavra-chave UPDATE, precisamos adicionar dois parâmetros que dizem à consulta como atualizar os registros e quais deles deverão ser atualizados:
  • Set Department = 'None'. Isso simplesmente especifica o novo valor do campo Department. Agora você pode definir mais de um valor de campo por vez usando uma sintaxe como esta: Set Department = 'None', UserName = 'None'. Como você pode ver, isso definirá os campos Department e UserName como None.
  • Where Department = 'Human Resources'. Essa é uma cláusula Where que indica que recursos deverão ser atualizados; nesse caso, todos os registros que têm um campo Department igual a Human Resources. Nós a incluímos por um motivo bem simples: não queremos modificar todos os registros do banco de dados, somente aqueles (computadores) que pertenciam ao departamento de Recursos Humanos.
A seguir, algo muito interessante que pode ser feito com consultas Update. Digamos que a sua empresa tenha decidido dar um aumento de custo de vida de 10% a alguém (obviamente, a equipe de scripts se parece com Sir Arthur Conan Doyle em pelo menos um aspecto: em nossos textos, nós lidamos com mundos fictícios). A seguir, um script que abre uma tabela chamada Employees e que modifica o campo Salary de todos os funcionários. E para que ele define o campo Salary? A consulta define esse campo como o salário atual do funcionário vezes 1,1; em outras palavras, dá a cada funcionário um aumento de 10% (ah, se fosse tão fácil assim!). Esta é a consulta:
objRecordSet.Open _
  "Update Employees " & _
  "Set Salary = (Salary * 1.1)", _
    objConnection, adOpenStatic, _
    adLockOptimistic
O que há de legal nisso? Como você pode ver, é possível fazer cálculos em suas consultas Update. Você decidiu estender o contrato de todos os seus funcionários temporários por mais 60 dias? Nesse caso, uma consulta similar à mostrada a seguir pode ser útil:
objRecordSet.Open _
  "Update TempEmployees " & _
  "Set ContractExpirationDate = " & _
  "(ContractExpirationDate + 60)", _
    objConnection, adOpenStatic, _
    adLockOptimistic

Ótimas formas de se recuperar dados
Falando de consultas que poderiam ser úteis, vamos resumir tudo examinando algumas ótimas formas de recuperar dados de um banco de dados. Por exemplo, veja um exemplo de script simples, mas muito útil. Suponha que o nosso banco de dados Inventory inclua um campo chamado Price que — logicamente — represente o preço do computador. Deseja saber quais são os cinco computadores mais caros da sua organização? O script de exemplo da Figura 4 responderá isso para você.
Figure 4 Sorting the recordset (Close Figure 4)
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = C:\Scripts\Test.mdb"

objRecordSet.Open "SELECT Top 5 * FROM Computers Order By Price", _
     objConnection, adOpenStatic, adLockOptimistic

objRecordSet.MoveFirst

Do Until objRecordset.EOF
    Wscript.Echo objRecordset.Fields.Item("ComputerName")
    objRecordset.MoveNext
Loop

objRecordSet.Close
objConnection.Close
Como você pode ver, fizemos duas coisas nessa consulta SQL: classificamos o conjunto de registros por Price (Order By Price) e solicitamos somente os cinco primeiros computadores (ou seja, os cinco mais caros); é isso que SELECT Top 5 faz. Se quiséssemos uma lista dos 10 computadores mais caros, usaríamos esta consulta:
objRecordSet.Open _
  "SELECT Top 10 * FROM Computers " & _
  "Order By Price", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Observação: também adicionamos um pouco de código que faz loops pelo conjunto de registros e exibe o nome de cada computador. Não precisamos desse código em nossos scripts anteriores porque eles não retornavam nem exibiam dados.
Como alternativa, podemos obter os primeiros 10% usando esta consulta:
objRecordSet.Open _
  "SELECT Top 10 PERCENT * " & _
  "FROM Computers Order By Price", _
    objConnection, adOpenStatic, _
    adLockOptimistic
E se quiséssemos obter os computadores mais baratos? Sem problemas; simplesmente usaríamos a mesma abordagem, exceto que dessa vez classificaríamos o conjunto de registros em ordem decrescente (ou seja, do menor para o maior preço). Em outras palavras, usamos esta consulta, onde DESC indica que o conjunto de registros deve ser classificado em ordem decrescente:
objRecordSet.Open _
  "SELECT Top 5 * FROM Computers " & _
  "Order By Price DESC", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Viu? Nós dissemos que essas consultas seriam muito úteis.
A seguir, mais duas que talvez você ache interessantes. Suponha que o seu banco de dados tenha um campo chamado Budgeted que controle o valor monetário originalmente orçado para o computador. Deseja comparar o custo real ao custo orçado? Esta consulta retorna uma lista de computadores que custam mais do que o valor orçado:
objRecordSet.Open _
  "SELECT * FROM Computers " & _
  "Where (Budgeted < Price)", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Enquanto isso, esta consulta calcula o preço médio de todos os computadores (SELECT AVG(Price) FROM Computers) e retorna uma lista de todos os computadores que custam menos do que o preço médio:
objRecordSet.Open _
  "SELECT * FROM Computers " & _
  "WHERE Price < " & _
  "(SELECT AVG(Price) FROM Computers)", _
    objConnection, adOpenStatic, _
    adLockOptimistic
E sim, você está certo, nós usamos uma consulta SELECT em nossa cláusula Where. Como isso funciona? Bem, essa será outra história para outro dia. Mas, como você pode ver, ela abre uma porta para a recuperação de todos os tipos de informações legais com as suas consultas SQL.

A moral da história
Como observamos no início da coluna deste mês, não tínhamos certeza se queríamos escrever outro artigo sobre scripts de banco de dados. No entanto, estamos contentes por termos seguido em frente, parcialmente porque pensamos que você achará que algumas dessas consultas são bem úteis, mas também por isso: se não tivéssemos escrito esta coluna agora, terminaríamos por ter de escrevê-la cedo ou tarde. Afinal de contas, até mesmo Sir Arthur Conan Doyle foi forçado a trazer Sherlock Holmes de volta dos mortos. Sir Arthur tentou dar seus primeiros passos nessa direção escrevendo uma nova história de Sherlock Holmes que supostamente teria acontecido antes da morte do detetive. Entretanto, depois disso, ele simplesmente cedeu à pressão de seus leitores, tecendo uma trama de alguma forma dúbia para explicar como Sherlock Holmes forjou sua própria morte. Por fim, todos e, portanto, tudo, estava perfeitamente bem.
O interessante é que quando a última história de Sherlock Holmes foi lançada, foram feitas 30 mil novas assinaturas da The Strand Magazine. Os editores de Sir Arthur, bastante agradecidos, tanto na Grã-Bretanha como nos EUA, responderam transformando-o no escritor mais bem pago do mundo.
Hum, Sir Arthur Conan Doyle trouxe de volta um personagem muito querido e se tornou o escritor mais bem pago do mundo; agora a Equipe de Scripts trouxe de volta um tópico muito querido — e sem ter de forjar qualquer morte. Será que o pessoal da TechNet Magazine percebeu isso?

O desafio de script do Dr. Scripto
O desafio mensal que testa não apenas sua habilidade de resolver quebra-cabeças, mas também de criar scripts.

Abril de 2008: escolha uma letra
No desafio deste mês, você terá de inserir as letras de A a O nos espaços azuis para revelar o nome da função VBScript. Cada letra (de A a O) deverá ser usada somente uma vez e as letras não aparecem em ordem alfabética. A letra inserida pode estar no início do nome da função, no final do nome da função ou em qualquer lugar no meio do nome da função. Por exemplo, na linha a seguir, você iria inserir a letra D para completar o nome da função IsDate:
Agora é a sua vez; insira as letras de A a O para revelar o nome da função VBScript nesta grade:

O desafio de script do Dr. Scripto
Resposta: Escolha uma letra, abril de 2008

The Microsoft Scripting Guys trabalha para a — bem, são funcionários da — Microsoft. Quando não está jogando/treinando/assistindo beisebol (e diversas outras atividades), a equipe administra o Script Center da TechNet. Confira no site www.scriptingguys.com.


 Security Watch: Onde est&#225; minha PII?
Security Watch
Onde está minha PII?
Frank Simorjay

Todos falamos da PII (Informações de Identificação Pessoal) ser a informação mais importante a ser protegida. Mas antes de poder protegê-la, você deve compreender perfeitamente que PII você coletou no seu PC. É fácil dizer que tudo o que há no seu computador é confidencial, mas o que realmente você quer dizer com “tudo”?
Para lançar uma luz sobre isso, comecei a olhar o problema com mais detalhes, dividindo tipos de dados que podem ser confidenciais e descobrindo onde os dados podem terminar no seu computador. Primeiro, a confidencialidade das informações é muitas vezes uma opinião pessoal. Por exemplo, algumas pessoas se sentem ameaçadas se seu nome aparece em um resultado de pesquisa. É claro que, a menos que você tenha vivido sob uma pedra, há uma grande chance de que alguém tenha postado seu nome na Internet de alguma forma a esta altura. Para investigar, use seu mecanismo de pesquisa favorito para pesquisar seu nome online. Tenha em mente que quanto mais comum seu nome for, mais difícil será encontrar ocorrências que se refiram especificamente a você. E você pode considerar isso uma coisa boa.
Se estiver se procurando na Internet, convém verificar também alguns dos sites de rede social populares, como o LinkedIn, Facebook e YouTube. É incrível ver a capacidade que a Internet possui de armazenar e dispersar informações particulares que exigiam esforços de pesquisa diligentes para serem reveladas.
Saber que informações você precisa proteger é mais uma ciência do que costumava ser antes. Para ajudar, achei que seria interessante ver se o seu computador possui informações potencialmente particulares sobre as quais você pode não estar ciente, mas que pode desejar proteger. Embora você possa dizer que todas as informações pessoais que podem ser usadas para roubar sua identidade são confidenciais, as informações podem realmente ser separadas em dois níveis de detalhes. Existem informações disponíveis de imediato e informações mais particulares e geralmente consideradas essenciais para a sua identidade pessoal.
As informações prontamente disponíveis não são tipicamente consideradas PII. Isso inclui seu nome e pode também consistir no seu telefone, endereço da rua, endereço de e-mail, sexo e, em vários casos, seu local de emprego e algumas informações educacionais. Esses itens estão disponíveis prontamente na Internet e em diretórios públicos, como listas telefônicas. A divulgação dessas informações, como permitir acidentalmente que um remetente de spam obtenha seu endereço de e-mail, pode ser irritante, mas sozinhas elas não levariam ao roubo de identidade.
As informações confidenciais consistem de mais dados particulares que fornecem uma ligação à sua identidade. Os dados que você não gostaria de divulgar publicamente incluem seu número de CPF (ou outro identificador único semelhante fornecido pelo seu governo), números de contas bancárias, números de cartões de crédito (particularmente quando acompanhados pela data de validade e identificação do membro do cartão), o número da sua carteira de motorista e sua impressão digital (ou outra informação relacionada à biométrica). Quando nas mãos erradas, esses itens podem ser usados em maneiras muito prejudiciais. É importante que você controle onde e como essas informações são gravadas e armazenadas, na Internet e no seu PC. Com esse fim, discutirei agora alguns métodos simples para encontrar qualquer PII que possa estar armazenada no disco rígido do seu sistema.

Localizando dados de PII no seu computador
As informações PII estão espalhadas por todos os lugares. Na verdade, se você examinasse o seu lixo, provavelmente encontraria algumas PII bem facilmente. Proteger essas informações requer diligência e um pouco de cuidado. Recomendo que todos invistam em um bom picador de papéis e que piquem tudo o que possua informações pessoais.
Mas e a PII que fica escondida no seu PC? Encontrar esses dados pode ser tão desafiador quanto armazená-los de modo seguro. O Windows Vista®, e várias outras ferramentas de pesquisa do computador de mesa, pode ajudá-lo a localizar informações no seu sistema. Mas você precisa saber que informações procurar.
Para ilustrar o problema, estou usando algumas ferramentas simples que me permitirão fornecer rápidos exemplos práticos do que há em jogo. Estou usando scripts com o Windows PowerShell®. Entre as várias coisas que o Windows PowerShell faz, você descobrirá que ele fornece também recursos excelentes de correspondência de cadeia de caracteres. Para atender aos nossos objetivos, estarei me concentrando na sua habilidade de comparar expressões regulares. O Windows PowerShell (disponível em microsoft.com/powershell) é uma ferramenta eficiente que rapidamente se tornou um padrão para tarefas administrativas.
Além disso, usarei o findstr.exe para fornecer um meio para gerenciar falsos positivos, isto é, a capacidade de ignorar arquivos que podem conter cadeias de caracteres que pareçam interessantes (devido à aleatoriedade de cadeias de caracteres de dados em arquivos binários), mas que na verdade não são de interesse aqui. Em outras palavras, arquivos que não sejam de texto podem ser ignorados para esse exercício.
Selecionei dois bons tipos de dados de PII: Números de CPF e informações de cartões de crédito. Esses dados devem ser fáceis de se encontrar se realmente estiverem armazenados no seu disco rígido em texto não-criptografado. A estrutura e o padrão dos dois tipos de dados são únicos o suficiente para permitir que um script simples encontre as informações. No entanto, esses dados também são confidenciais, de forma que eu me pergunto por que eles precisam estar armazenados no seu PC. Se estiver decidido a armazenar essas informações, garanta que elas estejam protegidas. Eu discutirei maneiras de proteger sua PII em breve. Minha discussão aqui é reconhecidamente limitada — existem outros tipos de dados de PII importantes que não inclui aqui, como nomes de usuário e senhas.

Procurando um número da Previdência Social dos EUA
Veja aqui uma cadeia de caracteres simples que irá procurar qualquer informação em arquivos que consistam em um número da Previdência Social dos EUA estruturado como XXX XX XXXX ou XXX-XX-XXXX. Usando o Windows PowerShell, você pode simplesmente digitar as seguintes linhas:
Get-ChildItem  -rec -exclude *.exe,*.dll |
select-string " [0-9]{3}[-| ][0-9]{2}[-| ]
[0-9]{4}"
Ou você pode usar o findstr.exe para garantir que arquivos binários não sejam lidos para a pesquisa usando isto:
Get-ChildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
" [0-9]{3}[-| ][0-9]{2}[-| ][0-9]{4}"
Nessa amostra, Get-ChildItem –rec conduz uma pesquisa de arquivos recursiva no diretório que começa a partir do diretório no qual o comando foi executado. Findstr.exe procura cadeias de caracteres em arquivos e Select-string é a função de pesquisa de cadeia de caracteres do Windows PowerShell. (Findstr.exe fornece uma funcionalidade semelhante que não discutirei aqui.) Além disso, observe que o espaço à esquerda na expressão regular é proposital. Isso ajuda a reduzir falsos positivos, eliminando informações desnecessárias, como cadeias de caracteres do Registro, como HKLM\SOFTWARE\tool\XXX-XX-XXXX.
Na minha execução de amostra, o padrão de pesquisa retornou um arquivo de amostra de teste que coloquei em um subdiretório e ele também encontrou amostras localizadas em um arquivo XML que descreve padrões de arquivos para números de cartão de crédito e da Previdência Social (veja a Figura 1).
Figure 1 Resultados ao pesquisar um padrão numérico
Figure 1 Resultados ao pesquisar um padrão numérico
Eu uso o recurso de exclusão no primeiro exemplo para eliminar todos os arquivos .exe e .dll, uma vez que eles podem gerar interferências desnecessárias. Você pode detectar outros tipos de arquivos que também causam falsos positivos. Se encontrar, você poderá usar o recurso de exclusão para ajustar o processo de pesquisa.
Se estiver procurando apenas um número específico de Previdência Social, poderá fazer o seguinte (substituindo "123 45 6789" pelo seu número da Previdência Social):
Get-ChildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"123 45 6789","123-45-6789"
Os resultados desse esforço de pesquisa são exibidos na Figura 2.
Figure 2 Procurando um número específico
Figure 2 Procurando um número específico

Procurando informações de cartões de crédito
As informações de cartões de crédito são um pouco complicadas porque os formatos variam. E desejo limitar os falsos positivos (isto é, resultados que parecem com um número de cartão de crédito apenas por um acaso aleatório). No entanto, a pesquisa provavelmente apresentará algumas seqüências aleatórias meramente semelhantes a números de cartões de crédito.
Estou usando informações fornecidas no artigo "Anatomia dos números de cartões de crédito", de Michael Gilleland, como uma referência ao criar essas cadeias de caracteres (consulte merriampark.com/anatomycc.htm). Por exemplo, minha cadeia de caracteres de pesquisa especifica que o primeiro número deve ser um 4, 5 ou 6, uma vez que isso é definido como o principal identificador da indústria do cartão de crédito.
Aqui eu criei cadeias de caracteres simples que irão pesquisar cartões Discover, MasterCard e Visa. No Windows PowerShell, minha cadeia de caracteres de pesquisa parece com isto:
Get-CchildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
 "[456][0-9]{15}","[456][0-9]{3}[-| ][0-9]{4}
[-| ][0-9]{4}[-| ][0-9]{4}"
Na amostra exibida na Figura 3, usei a função de exclusão para eliminar as interferências dos tipos de arquivos .rtf, .rbl e .h. Além disso, o código de amostra procura cadeias de caracteres de cartão de crédito que não possuam espaços ou traços. Isso, infelizmente, pode sobrecarregar sua exibição. Então, a seguir um comando alternativo para a mesma função, mas esse não apanhará números de cartões sem espaço ou sem traço:
Figure 3 Usando a exclusão para eliminar a interferência dos resultados
Figure 3 Usando a exclusão para eliminar a interferência dos resultados
Get-ChildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"[456][0-9]{3}[-| ][0-9]{4}[-| ][0-9]{4}
[-| ][0-9]{4}"
Como cartões American Express são consideravelmente diferentes, criei uma cadeia de caracteres de pesquisa modificada para localizar o padrão desse cartão. No Windows PowerShell, a cadeia de caracteres de pesquisa parece com isto:
Get-ChildItem -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"3[47][0-9]{13}","3[47][0-9]{2}[-| ][0-9]{6}
[-| ][0-9]{5}"
A sobrecarga de dados pode afetar esse resultado também. Esse comando alternativo é a mesma função, mas não apanhará números de cartões sem espaço ou sem traço:
Get-childitem -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"3[47][0-9]{2}[-| ][0-9]{6}[-| ][0-9]{5}"
Ao escrever esta coluna, executei essas pesquisas no meu próprio sistema e fiquei um tanto surpreso em encontrar várias ocorrências do meu número da Previdência Social gravado em lugares onde ele não deveria estar armazenado. Acontece que as informações estavam localizadas em um aviso que escrevi muito tempo atrás e do qual esqueci. Isso me fez repensar no que devo e não devo anotar!
Se você decidir que não deseja armazenar essas informações, mas apenas de uma maneira segura, tente usar uma ferramenta como a Password Safe (disponível em passwordsafe.sourceforge.net). Ou criptografe seu disco rígido com uma ferramenta como a Criptografia de Unidade de Disco BitLockerTM. Finalmente, o Kit de Ferramentas de Criptografia de Dados para PCs móveis fornece uma orientação testada sobre a proteção de dados em um PC móvel. Essas soluções irão pelo menos dificultar um pouco o acesso para alguém que possa estar passeando pelo seu PC em busca de informações pessoais.

Conclusão
Encontrar informações PII é razoavelmente simples. Estar ciente das informações é a parte complicada. Mas tenha em mente que um malware ou um usuário mal-intencionado que tenha obtido acesso ao seu sistema pode usar técnicas de descobertas semelhantes para encontrar informações no seu sistema igualmente fácil. Cuidado com relação a quando e onde você digita as informações PII e, se estiver decidido a armazená-las, certifique-se de criptografá-las.
Gostaria de agradecer a Matt Hainje por ajudar a solucionar problemas com meus scripts do Windows PowerShell.

Frank Simorjay é gerente de programa técnico do grupo de segurança e conformidade do Solution Accelerator da Microsoft. Ele projeta soluções de segurança para clientes da Microsoft, discursa em eventos, como a Secure World Exposition (da qual ele é um fundador), fornece educação e treinamento sobre segurança e tem contribuído com uma variedade de documentos e livros sobre segurança. Seu trabalho mais recente é o "Malware Removal Starter Kit".


 Os arquivos da &#225;rea de trabalho: Implantando o Windows XP com o WAIK
Os arquivos da área de trabalho
Implantando o Windows XP com o WAIK
Wes Miller

É incrível (e assustador) como os clientes podem ser tão diferentes. Em um mundo ideal, todos eles sempre estariam na mesma fase de implantação da mesma versão do Windows. Isso certamente simplificaria os testes. Mas, é claro que não é esse o caso. Enquanto alguns já começaram – ou talvez já tenham concluído –
as implantações do Windows Vista® ou estão entusiasmados com a preparação para a implantação do RODC (controlador de domínio somente leitura) do Windows Server® 2008 na produção, há outros tantos que me lembram regularmente (obrigado) de que ainda estão em meio a implantações a longo prazo do Windows® XP e/ou do Windows Server 2003 R2.
Outro dia recebi uma mensagem de email de um leitor perguntando "E o WAIK (Kit de Instalação Automatizada do Windows) e o Windows XP? Como uso o WAIK ao implantar o Windows XP?" Bem, tentarei responder essa.

Outra análise do WAIK
Há cerca de um ano, escrevi uma coluna abordando o WAIK, o conjunto de ferramentas eficientes projetado para lhe ajudar a implantar o Windows Vista (technetmagazine.com/issues/2007/01/DesktopFiles). Agora o WAIK resolverá também a implantação do Windows Server 2008, e esses dois sistemas operacionais têm uma nova infra-estrutura de instalação – e as ferramentas do WAIK foram, em grande parte, desenvolvidas para aproveitá-la. E, para melhor ou para pior, as versões do Windows anteriores ao Windows Vista que usam instalação autônoma ou Sysprep exigem que você use ferramentas projetadas especificamente para elas. Mas gostaria de analisar mais uma vez o WAIK para realçar as ferramentas que podem ser usadas para ajudar na implantação do Windows XP.
Windows PE 2.0 Para que haja um nível de compreensão básico, comecemos analisando a minha coluna de fevereiro de 2008 (technetmagazine.com/issues/2008/02/DesktopFiles) sobre a inicialização dupla com o Windows PE 2.0 e o Windows XP. Basicamente, se funcionar para você nesse cenário, o Windows PE 2.0 funcionará aqui. A pergunta que você deve se fazer é: "implantarei o Windows XP em algum sistema com menos de 512MB de RAM ou que não dê suporte à ACPI (Interface de Energia e Configuração Avançada) com o Windows Vista?" Se a resposta for sim para uma das partes da pergunta, você precisará do Windows PE 1.6, além de ser preciso verificar se você tem acesso a ele como parte do Software Assurance. Somente o Windows PE 2.0 e 2.1 estão disponíveis gratuitamente no momento; as versões 1.6 e anteriores continuam exigindo a associação ao Software Assurance.
ImageX/WIM O ImageX e o WIM (Windows Imaging Format) foram projetados para funcionar com toda e qualquer versão do Windows a começar do Windows 2000, independentemente dos volumes NTFS ou FAT – portanto, sim, é possível usá-los tranqüilamente para implantar o Windows XP (ou o Windows Server 2003).
Serviços de Implantação do Windows O WDS (Serviços de Implantação do Windows), que substitui o RIS (Serviços de Instalação Remota), foi originalmente distribuído como uma versão OOB (out-of-band) no WAIK 1.0, sendo atualizado e integrado ao Windows Server 2003 SP2. Agora ele está sendo distribuído com mais funcionalidades no Windows Server 2008, embora continue se aplicando perfeitamente ao ambiente do Windows XP.
Se houver um servidor RIS ou WDS em execução no modo herdado, isso não se aplicará muito a você. Mas caso tenha começado a transação para o WDS em execução no modo misto ou nativo, sim – você deve ver o WDS como uma parte possível do cenário de implantação do Windows XP.
WSIM (Gerenciador de Imagem de Sistema do Windows) Efetivamente, o WSIM só se aplica à implantação do Windows Vista e do Windows Server 2008. Se você estiver implantando o Windows Server 2003 ou anterior, o WSIM não ajudará muito.

Ferramentas de implantação do Windows XP
O Windows XP (assim como todas as versões do Windows desde o Windows NT® 4.0 até o Windows Server 2003) pode ser implantado por meio de um arquivo unattend.txt ou de uma "imagem". Tendo em vista os objetivos desta coluna, comentarei a instalação autônoma porque agora ela é, de fato, algo do passado. Se quiser usufruir o WAIK, mais especificamente ImageX, você fará uma implantação baseada em imagem. Assim, em vez de unattend.txt, você precisa de Sysprep.inf – o formato do arquivo de resposta do Sysprep.
Quando uso o termo imagem aqui, estou me referindo vagamente à forma de escolha da imagem do sistema operacional. Historicamente, é mais provável que você tenha usado Ghost, PQDI ou outras ferramentas para geração de imagens. Antes do ImageX, a Microsoft não fornecia nenhuma forma para escolher o sistema operacional e os aplicativos com Sysprep e copiá-los para um ou mais computadores de destino.
Há dois pontos importantes a serem lembrados durante a criação de uma imagem do Windows:
  • Não é possível alterar a HAL (camada de abstração de hardware), exceto durante a movimentação entre sistemas com um e vários processadores. Como mencionei em colunas já publicadas, não é possível alterar com segurança uma imagem durante a migração entre arquiteturas ACPI e não ACPI.
  • Você pode alterar controladores de armazenamento em massa. A idéia de que não é possível fazer isso é um equívoco comum. Mas para isso você precisa usar o Sysprep na instalação de todos os controladores de armazenamento em massa potenciais dos quais os computadores de destino podem precisar; após a implantação, você usa Sysprep para remover tudo exceto o driver que ficou "preso" no sistema de destino. Abordarei isso mais à frente.
Com esses dois problemas em mente, você deve ser capaz de preparar uma imagem em um sistema e fazê-la funcionar em qualquer sistema de destino que use a mesma HAL ou compatível.

Ferramentas do negócio
Sempre que estiver trabalhando com o Windows XP em um cenário de implantação baseado em imagem, você desejará manter três itens à disposição:
Ref.chm A referência do arquivo de texto da instalação autônoma. Lembre-se de que o momento ideal para configurar os componentes em qualquer versão do Windows anterior ao Windows Vista é antes da instalação. No entanto, caso você precise instalar componentes opcionais após a instalação, é possível fazer isso executando sysocmgr.exe como descrito em support.microsoft.com/ kb/222444. Caso você esteja implantando o Windows XP Tablet PC Edition, siga as etapas em go.microsoft.com/fwlink/?LinkId=108589 para criar uma imagem única que instale os componentes do Tablet PC nos sistemas aplicáveis.
Sysprep A forma para a qual a Microsoft dá suporte na criação de sistemas duplicados por disco. Ainda vejo, às vezes, algumas recomendações quanto a alteradores de SID (identificador de segurança) de terceiros; como sempre, recomendo usar apenas Sysprep, porque as demais ferramentas tendem a perder locais de SID críticos do Windows (especialmente os indisponíveis inicialmente).
Gerenciador de Imagem de Sistema do Windows A forma mais rápida e fácil de criar um arquivo sysprep.inf. Como sempre, verifique se você tem a versão correta pronta – ela costuma ser igual à versão do Windows que você está implantando (Windows XP SP2 com ferramentas de implantação do Windows XP SP2, por exemplo).
Você encontrará todos esses três itens no CD do Windows XP. Há versões atualizadas disponíveis em go.microsoft.com/fwlink/?LinkId=107541.
Você também desejará manter tap.exe à disposição. Esse utilitário está incluído nas ferramentas internas do Windows XP (go.microsoft.com/fwlink/?LinkId=108590), mesmo na versão de avaliação gratuita. No Windows PE, tap.exe retornará as informações sobre todos os dispositivos PnP (Plug and Play) encontrados pelo Windows PE; o mais interessante é que ele informará você da opção de HAL feita pelo Windows PE para o dispositivo (consulte a Figura 1). Isso é significativo principalmente porque a lógica usada pelo Windows PE na seleção da HAL é a mesma que a instalação do Windows usaria para determinar qual HAL usar – assim, tap.exe no Windows PE é uma forma prática de ver qual HAL o Windows recomendaria para um sistema específico.
Figure 1 O utilitário tap.exe pode informar a você a opção da HAL feita pelo Windows PE para um sistema específico
Figure 1 O utilitário tap.exe pode informar a você a opção da HAL feita pelo Windows PE para um sistema específico

Criando a imagem
É possível percorrer as seguintes etapas para começar a implantar a sua própria imagem do Windows XP usando ImageX (sim, você poderia usar outra ferramenta para geração de imagens, mas logo saberá por que ImageX é a ferramenta ideal para esse determinado fluxo de trabalho).
A primeira etapa é reunir todas as ferramentas e os componentes necessários, inclusive Sysprep, Gerenciador de Imagem de Sistema do Windows, ImageX e Windows PE (versão 2.0 ou 1.6, dependendo das necessidades e do acesso. Lembre-se de que se estiver usando a versão 2.0 com ImageX, você precisará usar bootsect.exe com a opção /nt52 ao criar a partição a fim de garantir a compatibilidade do código de inicialização com o Windows XP.)
É claro que você também precisará de um PC com o Windows XP (qualquer SKU) instalado, bem como das atualizações mais recentes do Windows e de todos os demais softwares instalados. O ideal é que esse sistema jamais tenha sido adicionado ao domínio – isso reduz a probabilidade de que haja problemas de domínio/rede mais tarde. O sistema deve ter apenas aplicativos seguros para geração de imagens, nada que armazene de maneira privada o nome da máquina, o SID, o domínio ou as informações específicas do usuário que Sysprep perderá ou não poderá substituir no momento da alteração do SID. Além disso, ele deve usar a HAL que você espera implantar com mais freqüência. Em hardwares mais novos, ela normalmente será a HAL ACPI MP (com vários processadores) por conta da prevalência da ACPI e dos vários núcleos (e, antes, do hyperthreading, que também usava uma HAL MP).
Agora configure o sistema Windows XP da forma com que você deseja que ele seja exibido aos usuários finais. Instale todos os aplicativos a serem destinados à maioria dos usuários (e todos os que não puderem ser instalados de maneira autônoma). Instale ou remova todos os componentes opcionais do Windows para que o sistema seja configurado da maneira desejada para os usuários finais. Em seguida, configure a área de trabalho. Faça logon como Administrador e faça todas as modificações desejadas no perfil, inclusive o plano de fundo da área de trabalho, a proteção de tela, o menu Iniciar etc. Por padrão (começando com o Windows XP SP2), Sysprep copiará as configurações da conta Administrador para a sua conta Usuário Padrão.
Em seguida, execute o Gerenciador de Imagem de Sistema do Windows (consulte a Figura 2), especificando que você deseja criar um novo arquivo autônomo do Sysprep e automatizar completamente a instalação. Observe que, como usará o Gerenciador de Imagem de Sistema do Windows, você precisará digitar uma chave do produto. Caso você não tenha uma em mãos ou queira criar um script para ela mais tarde (e sem uma chave de licença de volume), é possível especificar a chave fornecida no arquivo unattend.txt padrão no CD do Windows XP ou do Windows Server 2003 (o que permitirá a conclusão da instalação, mas sem que haja ativação).
Figure 2 Usando o Gerenciador de Imagem de Sistema do Windows para criar um arquivo de resposta de Sysprep
Figure 2 Usando o Gerenciador de Imagem de Sistema do Windows para criar um arquivo de resposta de Sysprep
Você também precisará fornecer um nome de máquina. Convém automatizar isso mais tarde usando SQL ou algum outro mecanismo, mas, por enquanto, basta digitar um valor e usar o script para substituir o nome da máquina antes da execução de Sysprep, após a implantação de um WIM na máquina.
Lembre-se de que, se você fornecer uma senha para a conta Administrador, ela só será aplicada caso a conta Administrador já existente na imagem não tenha uma. Além disso, observe que a seção de ingresso no domínio não lhe permite criptografar as credenciais para ingressar no domínio. Você deve usar a conta com privilégios mínimos para configurar a conta da máquina. Por fim, sugiro o uso da opção Seqüência de Caracteres da Versão do Gerenciador de Imagem de Sistema do Windows para controlar a "versão" da imagem recém-criada.
Agora pegue o arquivo Sysprep.inf, coloque-o no diretório C:\Sysprep com sysprep.exe e setupcl.exe e adicione o seguinte ao arquivo .inf:
[Sysprep]
BuildMassStorageSection = Yes

[SysprepMassStorage]
Em seguida, execute Sysprep –bmsd. Isso modificará sysprep.inf e todas as identificações de armazenamento em massa as quais a instalação do Windows reconhece, como mostrado na Figura 3. Caso queira adicionar outros dispositivos, você pode, ou pode adicioná-los à instalação do Windows e executar sysprep –bmsd novamente.
Figure 3 Adicionando identificações de armazenamento em massa a sysprep.inf
Figure 3 Adicionando identificações de armazenamento em massa a sysprep.inf
Em seguida, copie o arquivo sysprep.inf para um compartilhamento, execute sysprep.exe –factory e desligue o sistema. Reinicialize no Windows PE e se conecte a um compartilhamento UNC (recomendável) usando:
NET USE Y: \\myserver\myshare
/USER:DOMAIN\USER password
Agora capture a imagem usando o seguinte:
ImageX /capture C: Y:\NewImage.wim
"Factory Mode capture from 4/1/2008"
Em seguida, desligue o sistema.
Agora você tem uma imagem pronta para ser atualizada por meio do modo de fábrica. Não entrarei em detalhes específicos relacionados aqui, mas, em poucas palavras, o modo de fábrica é o mais seguro para manter as imagens até que elas estejam prontas para a implantação. Para obter mais informações, consulte a documentação deploy.cab do Windows XP mencionada anteriormente.
Quando você estiver pronto para preparar as imagens para implantação – ou seja, assim que estiver pronto para a distribuição –, inicialize no Windows PE e use o Diskpart para criar a(s) partição(ões) desejada(s). Formate as partições usando o comando format e use bootsect.exe conforme necessário para aplicar o código de inicialização do Windows Vista (/nt52). Agora se conecte a um compartilhamento UNC [ou ao local em que estão a(s) imagem(ns)] usando:
NET USE Y: \\myserver\myshare
/USER:DOMAIN\USER password
Em seguida, aplique a imagem da seguinte forma:
ImageX /apply Y:\NewImage.wim C: 1
Por fim, reinicialize no modo de fábrica do Windows e faça todas as atualizações necessárias na imagem (você precisará usar um arquivo winbom.ini aqui; consulte ref.chm em deploy.cab para obter ajuda). Winbom.ini deve conter sempre as seguintes linhas, que informam a necessidade de selar novamente a imagem a fim de que ela esteja pronta para executar a miniinstalação na próxima reinicialização:
[FACTORY]
ResealMode = Mini
Quando terminar, desligue. Repita as etapas anteriores usadas na captura da imagem, mas agora modifique o comando capture para:
ImageX /append C: Y:\NewImage.wim "Resealed
and ready for deployment – captured 4/4/2008"
Usando /append, você economizará um espaço considerável. Como você acabou de integrar o modo de fábrica a imagens seladas novamente, é possível alternar facilmente entre elas. Também é possível usar /delete para descartar imagens que você optou por não usar ao longo do caminho. Mas se lembre de que fazer isso não economizará espaço; apenas descartará a referência à imagem do volume especificada. Você precisará exportar todas as imagens do volume que deseja manter se quiser limpar o espaço não usado.
Agora é possível ver como o WAIK, embora projetado e suportado principalmente para Windows Vista e Windows Server 2008, pode lhe ajudar independentemente da implantação das versões mais recentes ou das mais antigas do Windows. Ainda que você precise usar uma combinação entre as ferramentas do Windows XP e as ferramentas do WAIK (principalmente ImageX e possivelmente Windows PE 2.0), a Microsoft agora fornece todo o necessário à distribuição de qualquer versão do Windows.

Wes Miller é gerente sênior de produto técnico na CoreTrace (www.CoreTrace.com) em Austin, no Texas. Anteriormente, ele trabalhou na Winternals Software e como gerente de programas na Microsoft. Entre em contato com ele pelo email technet@getwired.com.


 Anota&#231;&#245;es de campo: Uma iniciativa MARavilhosa
Anotações de campo
Uma iniciativa MARavilhosa
Neil Fawcett

Digamos que você tenha no seu armazém 5.000 PCs recondicionados e que haja clientes já interessados em comprar essas máquinas. O hardware tem uma nova concessão de vida, mas o sistema operacional... Bem, aí já é uma história totalmente diferente. Trata-se de uma cópia legal? Cada PC ao menos tem um sistema operacional? Você pode revendê-lo?
O novo programa MAR (Microsoft Authorized Refurbisher) apresenta uma solução para todos esses problemas. À primeira vista, esse novo esquema parte de um conceito bastante simples: ajudar as empresas a receber PCs antigos, instalar um sistema operacional legal e vendê-los.
Porém, o programa MAR tem objetivos mais avançados. De um ponto de vista pragmático, trata-se de uma oportunidade de negócios tanto para a Microsoft quanto para os recondicionadores comerciais de PCs. De uma perspectiva legal, ele ajuda a evitar a pirataria de software (acidental e intencional). Em termos ambientais, ele mantém a distância do hardware em relação aos aterros sanitários. E, por fim, ele cria um meio pelo qual as pessoas podem compreender melhor como funciona o licenciamento nos trabalhos da Microsoft, especialmente quando se lida com um PC que já mudou de dono.
Esse programa não beneficia apenas a Microsoft e os recondicionadores de PCs. Ele também oferece muitos benefícios aos clientes: eles recebem um PC formatado de maneira profissional e pré-instalado com uma versão genuína do Windows® XP Home Edition ou do Windows XP Professional, têm acesso a downloads, atualizações e recursos aprimorados, além das versões futuras do Windows à disposição. E tudo isso é feito em um computador que poderia estar facilmente em um aterro sanitário e ser mais um nas estatísticas da luta contra o descarte de materiais tóxicos.
MAR se destina a empresas com capacidade para fornecer uma média de 5.000 PCs recondicionados por mês, e elas devem apresentar um histórico de recondicionamento de PCs nessas proporções para que possam participar do programa. Trata-se de um programa mundial, aberto aos principais recondicionadores OEM, bem como aos demais recondicionadores qualificados e com sede nos EUA ou no Canadá. Os três recondicionadores participantes são Redemtech, Techturn e Apto Solutions.
Às vezes, o licenciamento de novos softwares pode confundir vendedores e compradores, e o mercado de PCs recondicionados apresenta um novo nível de complexidade em relação ao que se pode e ao que não se pode fazer com uma cópia vencida do Windows. MAR acabou com essa complexidade para os recondicionadores. Ele fornece um conjunto de ferramentas de instalação, inclusive o RPK (Refurbisher Preinstallation Kit), que facilita a pré-instalação do Windows XP em uma base diversificada de PCs recondicionados. Todas as licenças vêm acompanhadas de um COA (Certificado de Autenticidade) da Microsoft. Caso um PC tenha sido recondicionado, ainda apresente seu COA e a empresa tenha a mídia de recuperação original ou a imagem de recuperação no disco rígido, uma nova licença do Windows não é necessária. No entanto, MAR foi projetado para aprimorar o processo caso não haja nenhuma mídia ou imagem de recuperação à disposição dos recondicionadores comerciais.
A reutilização dos computadores – por meio de doação, recondicionamento ou revenda – dá grande esperança em termos de maior acesso à tecnologia, especialmente por parte de pessoas excluídas digitalmente. Ele também pode ajudar a limitar a presença cada vez maior do setor de tecnologia no meio-ambiente. Na verdade, o mercado de PCs usados – conhecido como "mercado secundário de PCs" – já está se mostrando capaz na expansão da tecnologia em muitas economias em desenvolvimento.
O mercado dos PCs recondicionados está crescendo e as estimativas indicam que milhões de unidades podem não chegar aos aterros caso as empresas busquem alternativas. MAR não apenas desempenha um papel estratégico dentro da Microsoft, mas também auxilia – e muito – grandes empresas na implantação de uma solução em hardware de baixo custo capaz de oferecer grandes benefícios a terceiros. Com um foco cada vez maior nas questões ambientais que afetam o planeta, o descarte apropriado dos PCs nunca foi tão importante. Iniciativas como a do programa MAR se somarão na revitalização de um PC ultrapassado, permitindo que ele continue beneficiando outros que estejam à procura de tecnologias de baixo custo e se mantenha distante de aterros sanitários tóxicos. Com o simples auxílio no esclarecimento do licenciamento de software, o programa dá um grande passo no sentido de um PC recondicionado mais atrativo. É possível obter mais informações sobre o programa MAR em microsoft.com/oem/mar.

Neil Fawcett é escritor e editor de várias publicações no setor de TI há mais de 20 anos. Ele também apresenta eventos e já publicou 13 livros sobre assuntos relacionados à TI. Antes da carreira de escritor, Neil trabalhava no Vale do Silício como desenvolvedor de software e engenheiro de hardware.


 Segredos do Windows: Compartilhamento e compartilhamento semelhante
Segredos do Windows
Compartilhamento e compartilhamento semelhante
Raymond Chen

Você já se perguntou por que quando você desinstala um programa, o Windows® pergunta se ele deve excluir um arquivo que "pode impedir que outros aplicativos funcionem corretamente"? Em primeiro lugar, essa mensagem (apresentada na captura de tela) não provém do Windows, mas sim do desinstalador. A pergunta correta, portanto, é, na verdade, "Por que o desinstalador do aplicativo exibe essa caixa de diálogo"? Esse é um exemplo excelente de como fazer ao usuário uma pergunta que ele não pode responder. O que levou a essa triste ocorrência?
Para gerenciar contagens de referência para arquivos usados por mais de um aplicativo (como as bibliotecas de runtime MFC, usadas por vários programas não-relacionados), o instalador cria uma entrada sob a chave do Registro SharedDLLs. Essa entrada lista o arquivo e sua contagem de referência. Se já existe uma entrada para o arquivo, a contagem de referência será incrementada. E se a entrada ainda não existir, a contagem de referência será definida como um. Inversamente, quando o programa é desinstalado, a contagem de referência é decrementada e quando ela cai a 0, o arquivo é excluído porque não existem programas que o utilizam mais. Pelo menos essa era a teoria.
Should I delete it or not?
Should I delete it or not?
Um problema sério com esse modelo é que ele supõe que todos concordam em jogar de acordo com as regras. Mas a tentação de trapacear é enorme, uma vez que as conseqüências da trapaça normalmente não penalizam o trapaceiro.
Por exemplo, digamos que exista um programa que usa as bibliotecas de runtime MFC, cujo instalador apenas copia essas bibliotecas no diretório do sistema sem atualizar a contagem de referência. Em seguida, quando esse programa é desinstalado, ele meramente exclui as bibliotecas. Agora considere o que ocorre quando esse programa tenta coexistir com um programa que segue as regras. Aqui está a mudança básica de eventos:
  1. Instalar Programa Bom: as bibliotecas são instaladas e a contagem de referência é definida como 1.
  2. Instalar Programa Ruim: as bibliotecas são instaladas, mas a contagem de referência não é alterada.
  3. Desinstalar Programa Ruim: as bibliotecas são excluídas.
O resultado desses eventos é que o Programa Ruim pára de trabalhar porque as bibliotecas não existem mais.
Veja outro cenário:
  1. Instalar Programa Bom: as bibliotecas são instaladas e a contagem de referência é definida como 1.
  2. Instalar Programa Ruim: as bibliotecas são instaladas, mas a contagem de referência não é alterada.
  3. Desinstalar Programa Bom: a contagem de referência cai a zero e as bibliotecas são excluídas.
O resultado desse cenário é que o Programa Ruim pára de funcionar.
As pessoas que escreveram o Programa Ruim descobriram: "Bem, não podemos impedir o Programa Ruim de nos enganar, mas pelo menos podemos tentar impedir que nós mesmos enganemos o Programa Ruim". Portanto, quando estiverem prestes a excluir um arquivo, elas param e exibem uma mensagem de aviso que diz: "Nossa, nossa, nossa! Estou prestes a excluir um arquivo, tudo bem? Se existir um Programa Ruim que ainda o esteja usando, o Programa Ruim será enganado. Se você possuir um Programa Ruim, deverá clicar em Não excluir". Bem, as frases não são exatamente assim, mas você sabe de que caixa de diálogo estou falando. Mesmo o lendário Jeffrey Richter recomendou essa abordagem em um artigo de 1996 do Microsoft Systems Journal.
Infelizmente, fazendo isso, o usuário receberá uma pergunta sem chance alguma de responder corretamente.
Certamente, todos esses maníacos por controle que exigem do Windows a opção de sobrescrever tudo o que fizeram por último devem estar aplaudindo essa caixa de diálogo. Os programas desinstaladores do mundo todo estão oferecendo a você controle de arquivo por arquivo sobre o processo de desinstalação. Então cuidado com aquilo que você pede — você pode conseguir.

Raymond Chenpossui um site, The Old New Thing (A velha novidade), e escreveu um livro homônimo para tratar da história do Windows e da programação Win32. Ele reflete sobre a possibilidade de a fusão nuclear se tornar viável enquanto ele estiver vivo.