Agosto de 2008


1 Objetivo

Desenvolvi a ferramenta VS2008SolutionDowngrader com o propósito de converter soluções criadas no Visual Studio 2008 para o Visual Studio 2005. É importante mencionar que a ferramenta foi desenvolvida com o intuito de migrar apenas soluções com projetos C#.

Um backup dos arquivos .sln e .csproj. é realizado antes que o processo de conversão seja executado, isso garante que você não perca a versão original dos seus arquivos em caso de uma falha na ferramenta.

2 Demonstração

Abaixo você pode acompanhar uma demonstração de conversão da solução VS2008CSharpSolution, criada noVisual Studio Team System 2008, contendo 5 projetos do tipo: Class Library, Console Application, ASP.NET web site, Windows Application e Windows Service:

Solução criada no Visual Studio Team System 2008:

Solução criada no Visual Studio Team System 2008

Executando a ferramenta de conversão:

Executando a ferramenta

Resultado da execução:

Output 1
Output 2

Abrindo a solução no Visual Studio Team System 2005:

Output 2

3 Instalador

O instalador está disponível no endereço http://www.orchestratechnology.com.br/blog/ferramentas/VS2008SolutionDowngraderSetup.zip .

4 Código-fonte

Você pode baixar o código-fonte desta ferramenta no endereço http://www.orchestratechnology.com.br/blog/ferramentas/VS2008SolutionDowngrader.zip .

1 Introdução

No SQL Server é possível criarmos dois tipos de arquivos de dados, o primário e o secundário, sendo o primeiro tipo mandatório. De acordo com a documentação é possível criarmos 32.766 arquivos secundários.

Uma boa prática é deixar o arquivo de dados primário para o catálogo do banco de dados e armazenar os dados e objetos, tais como, tabelas, procedimentos armazenados, visões, funções, etc., em arquivos secundários. Desta forma, podemos reduzir a contenção no acesso aos dados.

Grupos de arquivo são estruturas lógicas de agrupamento de arquivos que podem ser gerenciados como uma unidade. Assumindo a recomendação apresentada no parágrafo anterior como premissa, por conseqüência é uma boa prática definir o arquivo de grupo do arquivo secundário como padrão, pois nele serão armazenados os dados e os objetos do banco de dados.

Veja o exemplo abaixo:

--CRIA O BANCO DE DADOS
PRINT 'Criando o banco de dados OrchestraTechnologyBlog...'
CREATE DATABASE OrchestraTechnologyBlog
ON
	PRIMARY
	(
		NAME='OrchestraTechnologyBlog',
		FILENAME='C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDataOrchestraTechnologyBlogCatalog.mdf',
		SIZE=100MB,
		MAXSIZE=300MB,
		FILEGROWTH=50MB
	),
	FILEGROUP OrchestraTechnologyBlogFG1
	(
		NAME='OrchestraTechnologyBlogData1',
		FILENAME='C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDataOrchestraTechnologyBlogData1.ndf',
		SIZE=500MB,
		MAXSIZE=UNLIMITED,
		FILEGROWTH=500MB
	)
	LOG ON
	(
		NAME='OrchestraTechnologyBlogLog',
		FILENAME='C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDataOrchestraTechnologyBlogLog.ldf',
		SIZE=250MB,
		MAXSIZE=1GB,
		FILEGROWTH=15%
	)
GO
PRINT '>> Procesimento finalizado'

--DEFINE O FILEGROUP DE DADOS E OBJETOS DE BANCO COMO DEFAULT
PRINT 'Definindo o FILEGROUP OrchestraTechnologyBlogFG1 como padrao...'
ALTER DATABASE
	OrchestraTechnologyBlog
MODIFY FILEGROUP
	OrchestraTechnologyBlogFG1 DEFAULT
GO
PRINT '>> Procedimento finalizado'

2 Pontos de atenção

• Caso a propriedade o SIZE não seja especificada com um valor para arquivos do tipo secundários ou para o arquivo de log, os mesmos serão criados com o tamanho de 1MB.

• O valor máximo que pode ser definido na propriedade MAXSIZE para arquivos do tipo primário é de 16TB e para arquivos de log de 2TB. É possível definir esta propriedade como UNLIMITED para que o tamanho do arquivo cresça até que o espaço em disco acabe.

• O número 0 no FILEGROWTH serve para indicar que o arquivo não cresça automaticamente quando for necessário.

3 Boas práticas

• A recomendação da Microsoft para as extensões dos arquivos primário, secundário e de log é: .mdf para o arquivo primário, .ndf para arquivos secundários e .ldf para arquivo de log.

• Baseado no plano de crescimento do banco de dados crie os arquivos com o maior tamanho possível para evitar a fragmentação, que por sua vez, exerce pressão no processo de I/O.

• Caso opte por utilizar o UNLIMITED no MAXSIZE, é vital ter um mecanismo para monitorar o espaço em disco que envie alertas quando o mesmo estiver acabando, como por exemplo, o SCOM 2007.

O exemplo abaixo é um código que compila sem problema algum, porém, durante a sua execução lança a exceção System.ArrayTypeMismatchException na linha em que o inteiro 1 é atribuído a posição 0 do array b.

using System;

namespace CompilerTypeCheck
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string[] a = new string[3];
                object[] b = a;
                b[0] = 1;
            }
            catch (System.ArrayTypeMismatchException atmex)
            {
                System.Console.WriteLine("An error occured while executing this program. Error details: " + atmex.StackTrace);
            }

            System.Console.WriteLine("Press  to exit…”);
            System.Console.ReadLine();
        }
    }
}