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" > 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 > 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>