Trabalhar com banco de dados em grandes empresas quase sempre envolve utilizar o SQL Server em conjunto com storages e drives de rede.

Idealmente, ambientes de teste e produção devem ser equivalentes, a fim de facilitar testes. Entretanto… devido aos custos, é comum que ambientes de desenvolvimento e testes não possuam tecnologias mais caras, por exemplo storages.

Em meio a essa contradição, nós, técnicos de alta qualidade, que ganhamos como diretores, precisamos achar formas de validar nos ambientes de testes atualizações que de alguma forma dependam dos storages e drives de rede que existirão apenas em produção… E agora?

No vídeo de hoje, veremos como testar drives de storage ou rede no SQL – quando você NÃO possui drives de storage ou rede no seu ambiente de testes:

SUBST

Como vimos no vídeo, o comando MSDOS SUBST serve para associarmos unidades do Windows (ou “letras do windows”), por exemplo “M:”, a pastas locais do nosso sistema operacional, exemplo: M: passa a representar c:\tmp\drive_m.

Tal como no MSDOS, o SUBST também funciona no SQL, permitindo simular fácil e rapidamente recursos de produção que estejam mapeados para unidades do Windows, os quais NÃO existam no seu ambiente de testes.

O único incomodo aqui talvez seja a liberação da “xp_cmdshell”, pois em alguns casos já tive dificuldade de negociar isso com as áreas de segurança de empresas maiores…

NET USE

Enquanto o SUBST permite mapearmos “letras do Windows” para diretórios locais, o NET USE permite mapearmos “letras do Windows” pasta drives de rede, assim como no MSDOS. A execução do NET USE também depende da “xp_cmdshell”.

Disco VHD

Caso as alternativas mais rápidas (SUBST e NET USE) não sejam possíveis para você, por exemplo porque não autorizaram a utilização da “xp_cmdshell”, podemos simular drives de rede e storages usando discos virtuais do Windows.

Como vimos no vídeo, o processo consiste em criar um arquivo VHD ou VHDX, que será “mapeado” para uma determinada letra do seu Windows.

A principal vantagem dessa estratégia é a independência da “xp_cmdshell”, a principal desvantagem é o consumo de espaço em disco, pois você precisará criar o arquivo e alocar os dados de teste dentro dele.

Conclusão

Técnicos que ganham como diretores precisam sempre ter muitas cartas na manga, especialmente quando se trata de assegurar a qualidade.

A indisponibilidade de certo recurso de hardware ou software NÃO pode ser motivo para deixarmos de validar nossas entregas, e hoje vimos que essa regra se aplica até mesmo a testar drives de storage ou rede no SQL.

Abraço do seu amigo Josué

Script da aula

</pre>
------------------------------------------------------------------
-- Como testar storage ou drives de rede quando você não os tem!
------------------------------------------------------------------

--------------------------------------------------
-- Alternativa #1: SUBST
--------------------------------------------------
-- #1: Requisito ativar xp_cmdshell
use master
go
execute sys.sp_configure 'show advanced options', 1;
go
reconfigure;
go
execute sys.sp_configure 'xp_cmdshell', 1;
go
reconfigure;
go

-- #2: Executar o SUBST no contexto do serviço do SQL
execute sys.xp_cmdshell 'subst m: c:\tmp'
go

-- Teste: Listar arquivos do "drive M"
execute sys.xp_cmdshell 'dir m:'
go

-- Teste: Criar um banco no "drive M"
drop database if exists curso
go
create database [curso] on
primary (name = 'curso', filename = 'm:\curso.mdf')
log on (name = 'curso_lg1', filename = 'm:\curso_lg1.ldf')
go

-- Teste: Conferir onde estão os arquivos físicos do banco (logicamente estão no "m", fisicamente no "C")
select name, physical_name from sys.master_files where database_id = db_id ('curso')
go

-- Cleanup: Excluir banco e desmontar unidade
drop database if exists curso
go
execute sys.xp_cmdshell 'subst m: /D'
go

--------------------------------------------------
-- Alternativa #2: NET USE
--------------------------------------------------
-- #1: Requisito ativar xp_cmdshell, como fizemos acima

-- #2: Executar o "NET USE" no contexto do serviço do SQL:
execute sys.xp_cmdshell 'net use x: \\192.168.169.133\users'
go

-- Teste: Listar arquivos do "drive X"
execute sys.xp_cmdshell 'dir x:'
go

-- Cleanup: Desmontar unidade
execute sys.xp_cmdshell 'net use x: /delete'
go

--------------------------------------------------
-- Alternativa #3: VHD
--------------------------------------------------
-- Opção #1: Via Console
/*
Abrir o console "Computer Management": %windir%\system32\compmgmt.msc
Botão direito em "Storage\Disk Management" &gt; Create VHD. Informe:
Local físico do arquivo virtual, exemplo: c:\tmp\drive-l.vhd
Tipo do disco virtual (VHD ou VHDX), exemplo: VHD
Tipo de disco, exemplo: Dinamico
"Fixo" aloca todo o espaço de uma só vez. Melhor para a performance, pior para consumo de espaço.
"Dinamico" aloca o disco a medida que você usa. Melhor para economizar espaço, pior para performance.
Após criado, inicialize o disco e formate em NTFS. O disco estará imediatamente disponível para o SQL.

-- Teste:
execute sys.xp_fixeddrives
go

-- Opção #2: Via DISKPART (Execute o CMD como ADM. 1050624 deixa o volume com exato 1TB livre ao invés de 0.99 que é o padrão devido ao overflow da partição)
-- #1: Salve o script diskpart: c:\tmp\dp.txt
create vdisk file="c:\tmp\drive-p.vhd" type=expandable maximum=1048264"
select vdisk file="c:\tmp\drive-p.vhd"
attach vdisk
convert gpt
create partition primary
format FS=NTFS LABEL="StorageSimulado" QUICK
assign letter="p"
exit

-- #2: Execute o script diskpart:
diskpart /s c:\tmp\dp.txt

-- Cleanup: Excluir VHDs
-- #1: Desconectar o disco:
Gerenciador do Computador: Botão direito &gt; Detach VHD
DiskPart:
select vdisk file="c:\tmp\drive-p.vhd"
detach vdisk
exit

-- #2: Excluir o arquivo do windows

*/

--------------------------------------------------
-- DICA: MAPEAMENTO PERMANENTE
--------------------------------------------------
/*
-- Drive de rede: O Comando abaixo, que mapeia o drive permanentemente para "usuários do console", NÃO funciona para a conta de serviço:
net use m: \\localhost\c$ /persistent:yes

-- Subst: A cada restart o subst é perdido. Você pode torna-lo permanente e igual para todos os usuários incluindo a entrada de registro a seguir (Necessita restart após configuração):
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices" /v "M:" /t REG_SZ /d "\??\C:\\"

-- IMPORTANTE: As soluções aqui apresentadas são para fins de testes, NÃO PRODUÇÃO! :)

*/
<pre>

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *