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>