Quantcast
Channel: artigos TechNet
Viewing all 8688 articles
Browse latest View live

Solucionando Problemas : erro api-ms-win-crt-runtime-l1-1-0.dll no Windows 10

$
0
0
Revisão 1 postado em artigos TechNet por Luiz Henrique Lima Campos [MVP] em 31/10/2017 19:23:47
O erro pode aparecer ao tentar instalar vários programas deversos como adobe , java etc...




Para solucionar esse problema é bem simples:

Beixe e instale a atualização para o tempo de execução c da Microsoft, https://support.microsoft.com/en-us/help/2999226/update-for-universal-c-runtime-in-windows caso não consiga baixar automaticamente com o Windows update.

Finalizando faça a instalação do Update e o problema sera solucionado.

Tags: erro windows 10, erro api-ms-win-crt-runtime-l1-1-0.dll, api-ms-win-crt-runtime-l1-1-0.dll, erro windows 10 api-ms-win-crt-runtime-l1-1-0.dll, erro windows 10 c netframework

Solucionando Problemas : erro api-ms-win-crt-runtime-l1-1-0.dll no Windows 10

$
0
0
Revisão 2 postado em artigos TechNet por Luiz Henrique Lima Campos [MVP] em 31/10/2017 19:24:56
O erro pode aparecer ao tentar instalar vários programas deversos como adobe , java etc...




Para solucionar esse problema é bem simples:

Beixe e instale a atualização para o tempo de execução c da Microsoft, https://support.microsoft.com/en-us/help/2999226/update-for-universal-c-runtime-in-windows caso não consiga baixar automaticamente com o Windows update.

Finalizando faça a instalação do Update e o problema sera solucionado.

Tags: erro windows 10, erro api-ms-win-crt-runtime-l1-1-0.dll, api-ms-win-crt-runtime-l1-1-0.dll, erro windows 10 api-ms-win-crt-runtime-l1-1-0.dll, erro windows 10 c netframework, runtime error

Solucionando Problemas : erro api-ms-win-crt-runtime-l1-1-0.dll no Windows 10

$
0
0
Revisão Atual postado em artigos TechNet por Luiz Henrique Lima Campos [MVP] em 31/10/2017 19:26:14
O erro pode aparecer ao tentar instalar vários programas diversos como adobe , java etc...




Para solucionar esse problema é bem simples:

Beixe e instale a atualização para o tempo de execução c da Microsoft, https://support.microsoft.com/en-us/help/2999226/update-for-universal-c-runtime-in-windows caso não consiga baixar automaticamente com o Windows update.

Finalizando faça a instalação do Update e o problema sera solucionado.

Tags: api-ms-win-crt-runtime-l1-1-0.dll

Windows 10: Guia de Sobrevivência

$
0
0
Revisão Atual postado em artigos TechNet por Luiz Henrique Lima Campos [MVP] em 31/10/2017 19:31:24

Este "Guia de Sobrevivência" tem como objetivo reunir todos os materiais relacionados aoWindows 10. Sinta-se a vontade para adicionar conteúdo, links e informações relevantes ao assunto.

 

 


Livros

  • Em breve

 


Gerenciando

 


Otimizando

  • Em breve

 


Instalando e Configurando

 


Manutenção


Integração Segurança

 


Solucionando Problemas

 


Ferramentas

  • Em breve

 


Vídeos

 

 IMPORTANT WARNING

CAREFULLY CHECK THIS TECHNET WIKI GUIDELINE

http://aka.ms/wiki_video

Do : provide added value to the video

Do : add valuable, meaningful content in the article, related to the core content of the video. 

DO : add step by step instructions with detailed explanation

DO NOT use the Wiki to JUST REPUBLISH videos, without added value. 

DO NOT create an article with only video and/or 3rd party video hosting platform links

   

 


Blogs

 


Fóruns

 


Certificações

  • Até o momento não há certificações relacionadas à Windows 10, até por que a versão atual é Technical Preview.

 


Site Oficial

 


Glossário

 

Nota de Migração: Este Guia de Sobrevivência foi migrado do Portal Wiki em Inglês, o conteúdo original está disponível aqui, http://social.technet.microsoft.com/wiki/contents/articles/4747.guia-de-sobrevivencia-windows-8-pt-br.aspx onde você pode conferir a autoria e os comentários.

 










Tags: atualização windows 8 para windows 10

Passos de Troubleshooting para cenários de NO BOOT

$
0
0
Revisão Atual postado em artigos TechNet por Fernando H. Silva em 1/11/2017 10:50:53

A seguir vamos falar sobre metódos utilizados para tentar contornar casos onde o servidor com Windows Server não inicia (NO BOOT) seja problemas de tela azul durante Start-up, restart continuo,  erro durante aplicação de updates ou qualquer outro problema apresentado após o inicio do carregamento do sistema operacional.

Não existem garantias de que os procedimentos listados a seguir irão apresentar sucesso, isto varia muito de acordo com a causa do problema. Por esta razão, é extremamente importante ter backup atualizado de system state do servidor, possibilitando o disaster recovery quando necessário.

Segue os procedimentos:

 

1. Last Know Good Configuration

Falhas de sistema, quedas de energia, desligamento abrupto do Windows, entre outros problemas podem ocasionar corrupção de arquivos e falhas que impedem o servidor de ser iniciado com sucesso. Um procedimento que pode resolver este problema, é recorrer a Ultima Configuração Válida (LKGC).

Toda vez que seu Windows é iniciado com sucesso é realizado um backup das últimas configurações do sistema que funcionaram corretamente, desta forma, quando utilizamos o recruso last know good configuration, estas configurações são restauradas, podendo reestabelecer o boot do sistema. Os registros a seguir são restaurados nesta opção:

HKLM\System\CurrentControlSet\Control
HKLM\System\CurrentControlSet\Services

 

Para realizar este procedimento:

A-  Windows Server 2003, 2008 e 2008 R2:

Durante o inicio do carregamento do Windows pressione a tecla F8 para exibir as opções avançadas de inicialização.

Selecione a opção LAST KNOW GOOD CONFIGURATION:

NoBoot01

Mais informações:
http://windows.microsoft.com/pt-br/windows/using-last-known-good-configuration#1TC=windows-7
http://blogs.technet.com/b/askcore/archive/2011/08/05/last-known-good.aspx

 

B- Windows Server 2012, 2012 R2:

O Windows 8, 8.1, Windows Server 2012,e R2 tem um boot muito rápido, tão rápido que não é possível interromper o processo de inicialização pressionando F8.

Sendo assim, a forma mais simples de acessar o menu de boot no W2k12, é realizar um boot pelo CD, e selecionar a opção TROUBLESHOOTING,  e na sequência, Windows Startup settings: NoBoot02

NoBoot03

Após reiniciar as opções de boot serão exibidas, então selecione a opção LAST KNOW GOOD CONFIGURATION.

 

2. SAFE MODE

É possível tentar iniciar o servidor em modo de segurança, onde apenas os drivers e recursos necessários para o boot do sistema são carregados.

Se o Windows Iniciar em Safe mode, significa que o problema está sendo causado por algum componente instalado no Windows. Neste caso, é válido realizar um clean boot, de acordo com as instruções a seguir:

http://support.microsoft.com/kb/929135

 

3. BOOTREC /fixboot e FixMBR

Em alguns casos, problemas de boot são causados por falhas nos arquivos de boot, e é possível tentar corrigir o problema com os comandos FIX BOOT E FIXMBR:

WINDOWS SERVER 2008 R2, 2012 e 2012 R2:

Utilize um cd do WINDOWS para realizar acesso via prompt, selecione a partição do sistema operacional, e digite os seguintes comandos:

BOOTREC /FIXBOOT

BOOTREC /FIXMBR

 

4. SFC /SCANNOW

Realize boot via cd, e no prompt, digite o seguinte comando no volume que contem o SO:

sfc.exe /scannow /OffBootDir=(Unidade do SO C:\Windows) /OffWinDir=(unidade do SO, ex: C:\Windows”),

Este comando irá verificar falhas no sistema de arquivos do Windows, e corrigir o que for possível. O resultado deste comando será salvo no log CBS.LOG, presente em C:\windows\logs\CBS.

Mais informações: http://support.microsoft.com/kb/929833/pt-br

 

5. Dism Revert Pending Actions e PENDING XML – Para casos onde o servidor reinicia subtamente durante aplicação de updates

Em cenários onde o Windows falha ao aplicar atualizações, realize o boot pelo cd do windows, e execute a seguinte linha de comando (Válida paraversões posteriores a Windows Server 2008 R2):

A- dism.exe /image:C:\ /cleanup-image /revertpendingactions

Caso o problema seja persistente, e para versões anteriores a Windows Server 2008 R2:

Renomeie o artigo Pending.xml, presente em C:\WINDOWS\WINSXS\

 

6. REGBACK

Caso os procedimentos listados não tenham resolvido o problema, ainda é possível restaurar backup do registro feito pelo próprio Windows.

Para isto, no boot via cd, acesse o prompt de comando, acesse o volume do sistema operacional,abra o notepad.exe para facilitar a navegação e encontre o seguinte caminho:

c:\windows\system32\config\

 

Crie uma nova pasta, e copie os seguintes arquivos para esta nova pasta:

Default
Sam
Security
Software
System

Substitua estes arquivos da \config\ pelos arquivos presentes na \regback, e reinicie o servidor.

Lembre-se que é possível restaurar os arquvios originais substituindo pela cópia feita em nova pasta, se necessário.

 

Caso algum dos procedimentos listados tenha resovido seu problema, ou se você tiver algum outro procedimento para compartilhar conosco, sita-se a vontade para adicionar nos comentários.

Tags: has image

Windows Server: Backup GPOs

$
0
0
Revisão 2 postado em artigos TechNet por Ken Cenerelli em 27/10/2017 19:51:40

Neste artigo, ensino como criar backup de GPOs no Windows Server 2012 usando o console do GPMC.

Vale lembrar: Apesar dos procedimentos feitos aqui serem usando o GPMC do Windows Server 2012, o administrador de rede, poderá adaptá-lo usando a versão que está utilizando do Windows Server.

Para criar um backup de GPOs no Windows Server, faça:

1. Acesse o DC por um usuário que tenha privilégios administrativos. 

2. Abra o console do GPMC (Gerenciamento de Política de Grupo)

3. No console do GPMC, clique em Objetos de Politica de Grupo com o botão direito do mouse e, no menu de opções, selecione: “Fazer Backup de Tudo”… Conforme a figura abaixo.

1

3. Será aberto uma interface onde você irá selecionar o local em que será armazenado o backup das GPOs do domínio. Selecione o local e dê uma descrição. Feito isso, clique em Backup.

No exemplo da figura abaixo, estou gravando o backup das GPOs no diretório C:\BackupGPOs. 

3

Dica: Ao selecionar um local em que armazenará o backup das GPOs, selecione diferente do diretório em que o servidor esteja instalado. 

5. Será dado o processo de backup de GPOs do domínio, conforme a figura abaixo. Ao encerrar, será emitido uma mensagem de quantas políticas foram feitos o backup. Pronto. 

4 

6. Podemos verificar se foi feito ou não o backup das GPOs, acessando o diretório e a pasta em que definirmos anteriormente para armazenamento do backup das GPOs… Conforme a figura abaixo:

5

Tags: Windows Server, Group Policy, has image, group policy backup, BACKUP GPOS, BACKUP GPOS WINDOWS SERVER, BACKUP POLÍTICAS WINDOWS SERVER, CÓPIA DE SEGURANÇA GPOS, CRIAR BACKUP GPOS, CRIAR BACKUP GPOS WINDOWS SERVER, GPMC BACKUP GPOS, LIVRO GPOS, LIVRO GPOS WINDOWS SERVER, OBJETOS DE POLÍTICA DE GRUPO BACKUP

Windows Server: Backup GPOs

$
0
0
Revisão 3 postado em artigos TechNet por Diego Gouveia - MTAC em 3/11/2017 17:53:40

Neste artigo, ensino como criar backup de GPOs no Windows Server 2012 usando o console do GPMC.
Vale lembrar: Apesar dos procedimentos feitos aqui serem usando o GPMC do Windows Server 2012, o administrador de rede, poderá adaptá-lo usando a versão que está utilizando do Windows Server.

Para criar um backup de GPOs no Windows Server, faça:

1. Acesse o DC por um usuário que tenha privilégios administrativos. 

2. Abra o console do GPMC (Gerenciamento de Política de Grupo)

3. No console do GPMC, clique em Objetos de Politica de Grupo com o botão direito do mouse e, no menu de opções, selecione: “Fazer Backup de Tudo”… Conforme a figura abaixo.

1

3. Será aberto uma interface onde você irá selecionar o local em que será armazenado o backup das GPOs do domínio. Selecione o local e dê uma descrição. Feito isso, clique em Backup.

No exemplo da figura abaixo, estou gravando o backup das GPOs no diretório C:\BackupGPOs. 

3

Dica: Ao selecionar um local em que armazenará o backup das GPOs, selecione diferente do diretório em que o servidor esteja instalado. 

5. Será dado o processo de backup de GPOs do domínio, conforme a figura abaixo. Ao encerrar, será emitido uma mensagem de quantas políticas foram feitos o backup. Pronto. 

4 

6. Podemos verificar se foi feito ou não o backup das GPOs, acessando o diretório e a pasta em que definirmos anteriormente para armazenamento do backup das GPOs… Conforme a figura abaixo:

5

Tags: Windows Server, Group Policy, has image, group policy backup, BACKUP GPOS, BACKUP GPOS WINDOWS SERVER, BACKUP POLÍTICAS WINDOWS SERVER, CÓPIA DE SEGURANÇA GPOS, CRIAR BACKUP GPOS, CRIAR BACKUP GPOS WINDOWS SERVER, GPMC BACKUP GPOS, LIVRO GPOS, LIVRO GPOS WINDOWS SERVER, OBJETOS DE POLÍTICA DE GRUPO BACKUP

Windows PowerShell: Alterando nome do Servidor

$
0
0
Revisão 1 postado em artigos TechNet por Diego Gouveia - MTAC em 3/11/2017 18:20:33

Neste tópico, você aprenderá a alterar o nome de um servidor com o Windows Server 2012 instalado pelo Windows PowerShell. Contudo, o administrador de rede, poderá usar os mesmos passos adaptando para a versão que esteja usando do Windows Server.

Exemplo Prático: 

1.         Faça o logon com a conta de administrador ou equivalente.

2.         Clique em:  -> Ferramentas Administrativas. Aparecerá vários consoles. Procure pelo console que tem o nome Windows PowerShell. Clique com o botão direito no nome do console e, no menu de opções, selecione “Executar como administrador”, conforme a figura 1.1.



Figura 1.1 – Ferramentas Administrativas - Windows PowerShell.

 Será carregado o console host do Windows PowerShell com o perfil do usuário Administrador carregado, conforme a figura 1.2.

 


Figura 1.2 – Console Host - Windows PowerShell.

No console host do PowerShell, vamos criar uma variável chamada $sysinfo em que a mesma irá armazenar as informações do servidor. Obteremos essas informações por meio do cmdlet Get-WmiObject, que tem como finalidade obter instâncias de classes WMI ou informações sobre as classes disponíveis. A instâncias (ou informações) que obteremos por meio do cmdlet Get-WmiObject serão a do sistema (servidor) e, para isso, informaremos a classe chamada Win32_ComputerSystem. Vamos lá.

3.         No console host do Windows PowerShell, digite o comando $sysInfo = Get-WmiObject -Class Win32_ComputerSystem, conforme a figura 1.3 e dê um Enter no teclado.


Figura 1.3 – Console Host – Windows PowerShell.

Feito isso, a variável $sysInfo irá armazenar as informações do sistema que são obtidas por meio do cmdlet Get-WmiObject, anteriormente explicado. Feito esse armazenamento das informações do sistema, poderemos alterá-las.

Vamos agora, alterar o nome do servidor para um novo nome chamado ServerDC1, acessando as propriedades do sistema armazenadas na variável $sysInfo. Primeiro, digitaremos o nome da variável em que está armazenada as propriedades do sistema e logo após, alteraremos uma dessas propriedades – que no nosso exemplo, é a propriedade do nome do servidor. Usaremos para isso o. Rename, que fará a alteração do nome do servidor para um novo nome que informaremos dentro dos parênteses (), logo a seguir. Vamos a prática.

4.         Ainda no console host do PowerShell, digite: $sysInfo.Rename(“ServerDC1”) e dê um Enter no teclado. Aparecerá uma mensagem informando que o servidor precisa ser reiniciado para a nova configuração de nome entrar em vigor. Feito isso, digite o comando shutdown /r para forçar a reinicialização do sistema. Aparecerá uma mensagem informando que você escolheu sair, conforme a figura 1.4 abaixo.


Figura 1.4 – Reiniciando o servidor pelo comando shutdown /r.

5.         Clique em Fechar. Feito isso o servidor será reinicializado e configuração de nome entrará em vigor.

6.         Com o servidor reinicializado, podemos confirmar que o novo nome foi aplicado acessando as propriedades de sistema do servidor e procurando pelo campo Nome do Computador, conforme ilustrado na figura 1.5 abaixo.

 

Figura 2.8 – Informações do Sistema -  Windows Server. 

Figura 1.5 – Propriedades do Sistema - Windows Server
Tags: Windows PowerShell, Windows PowerShell $sysInfo = Get-WmiObject -Class Win32_ComputerSystem, $sysInfo = Get-WmiObject -Class Win32_ComputerSystem, -Class Win32_ComputerSystem, Alterando nome do servidor windows powershell, nome do servidor pelo windows powershell, windows powershell $sysInfo, $sysInfo, $sysInfo.Rename, alterando nome DC Windows PowerShell

Windows PowerShell: Alterando nome do Servidor

$
0
0
Revisão 2 postado em artigos TechNet por Diego Gouveia - MTAC em 3/11/2017 18:23:20

Neste tópico, você aprenderá a alterar o nome de um servidor com o Windows Server 2012 instalado pelo Windows PowerShell. Contudo, o administrador de rede, poderá usar os mesmos passos adaptando para a versão que esteja usando do Windows Server.

Exemplo Prático: 

1.         Faça o logon com a conta de administrador ou equivalente.

2.         Clique em:  -> Ferramentas Administrativas. Aparecerá vários consoles. Procure pelo console que tem o nome Windows PowerShell. Clique com o botão direito no nome do console e, no menu de opções, selecione “Executar como administrador”, conforme a figura 1.1.


Figura 1.1 – Ferramentas Administrativas - Windows PowerShell.

 Será carregado o console host do Windows PowerShell com o perfil do usuário Administrador carregado, conforme a figura 1.2.

 
Figura 1.2 – Console Host - Windows PowerShell.

No console host do PowerShell, vamos criar uma variável chamada $sysinfo em que a mesma irá armazenar as informações do servidor. Obteremos essas informações por meio do cmdlet Get-WmiObject, que tem como finalidade obter instâncias de classes WMI ou informações sobre as classes disponíveis. A instâncias (ou informações) que obteremos por meio do cmdlet Get-WmiObject serão a do sistema (servidor) e, para isso, informaremos a classe chamada Win32_ComputerSystem. Vamos lá.

3.         No console host do Windows PowerShell, digite o comando $sysInfo = Get-WmiObject -Class Win32_ComputerSystem, conforme a figura 1.3 e dê um Enter no teclado.


Figura 1.3 – Console Host – Windows PowerShell.

Feito isso, a variável $sysInfo irá armazenar as informações do sistema que são obtidas por meio do cmdlet Get-WmiObject, anteriormente explicado. Feito esse armazenamento das informações do sistema, poderemos alterá-las.

Vamos agora, alterar o nome do servidor para um novo nome chamado ServerDC1, acessando as propriedades do sistema armazenadas na variável $sysInfo. Primeiro, digitaremos o nome da variável em que está armazenada as propriedades do sistema e logo após, alteraremos uma dessas propriedades – que no nosso exemplo, é a propriedade do nome do servidor. Usaremos para isso o. Rename, que fará a alteração do nome do servidor para um novo nome que informaremos dentro dos parênteses (), logo a seguir. Vamos a prática.

4.         Ainda no console host do PowerShell, digite: $sysInfo.Rename(“ServerDC1”) e dê um Enter no teclado. Aparecerá uma mensagem informando que o servidor precisa ser reiniciado para a nova configuração de nome entrar em vigor. Feito isso, digite o comando shutdown /r para forçar a reinicialização do sistema. Aparecerá uma mensagem informando que você escolheu sair, conforme a figura 1.4 abaixo.


Figura 1.4 – Reiniciando o servidor pelo comando shutdown /r.

5.         Clique em Fechar. Feito isso o servidor será reinicializado e configuração de nome entrará em vigor.

6.         Com o servidor reinicializado, podemos confirmar que o novo nome foi aplicado acessando as propriedades de sistema do servidor e procurando pelo campo Nome do Computador, conforme ilustrado na figura 1.5 abaixo.


Figura 1.5 – Propriedades do Sistema - Windows Server
Tags: Windows PowerShell, Windows PowerShell $sysInfo = Get-WmiObject -Class Win32_ComputerSystem, $sysInfo = Get-WmiObject -Class Win32_ComputerSystem, -Class Win32_ComputerSystem, Alterando nome do servidor windows powershell, nome do servidor pelo windows powershell, windows powershell $sysInfo, $sysInfo, $sysInfo.Rename, alterando nome DC Windows PowerShell

Windows PowerShell: Alterando nome do Servidor

$
0
0
Revisão Atual postado em artigos TechNet por Waqas Sarwar(MVP) em 3/11/2017 22:47:15

Neste tópico, você aprenderá a alterar o nome de um servidor com o Windows Server 2012 instalado pelo Windows PowerShell. Contudo, o administrador de rede, poderá usar os mesmos passos adaptando para a versão que esteja usando do Windows Server.

Exemplo Prático: 

1.         Faça o logon com a conta de administrador ou equivalente.

2.         Clique em:  -> Ferramentas Administrativas. Aparecerá vários consoles. Procure pelo console que tem o nome Windows PowerShell. Clique com o botão direito no nome do console e, no menu de opções, selecione “Executar como administrador”, conforme a figura 1.1.


Figura 1.1 – Ferramentas Administrativas - Windows PowerShell.

 Será carregado o console host do Windows PowerShell com o perfil do usuário Administrador carregado, conforme a figura 1.2.

 
Figura 1.2 – Console Host - Windows PowerShell.

No console host do PowerShell, vamos criar uma variável chamada $sysinfo em que a mesma irá armazenar as informações do servidor. Obteremos essas informações por meio do cmdlet Get-WmiObject, que tem como finalidade obter instâncias de classes WMI ou informações sobre as classes disponíveis. A instâncias (ou informações) que obteremos por meio do cmdlet Get-WmiObject serão a do sistema (servidor) e, para isso, informaremos a classe chamada Win32_ComputerSystem. Vamos lá.

3.         No console host do Windows PowerShell, digite o comando $sysInfo = Get-WmiObject -Class Win32_ComputerSystem, conforme a figura 1.3 e dê um Enter no teclado.


Figura 1.3 – Console Host – Windows PowerShell.

Feito isso, a variável $sysInfo irá armazenar as informações do sistema que são obtidas por meio do cmdlet Get-WmiObject, anteriormente explicado. Feito esse armazenamento das informações do sistema, poderemos alterá-las.

Vamos agora, alterar o nome do servidor para um novo nome chamado ServerDC1, acessando as propriedades do sistema armazenadas na variável $sysInfo. Primeiro, digitaremos o nome da variável em que está armazenada as propriedades do sistema e logo após, alteraremos uma dessas propriedades – que no nosso exemplo, é a propriedade do nome do servidor. Usaremos para isso o. Rename, que fará a alteração do nome do servidor para um novo nome que informaremos dentro dos parênteses (), logo a seguir. Vamos a prática.

4.         Ainda no console host do PowerShell, digite: $sysInfo.Rename(“ServerDC1”) e dê um Enter no teclado. Aparecerá uma mensagem informando que o servidor precisa ser reiniciado para a nova configuração de nome entrar em vigor. Feito isso, digite o comando shutdown /r para forçar a reinicialização do sistema. Aparecerá uma mensagem informando que você escolheu sair, conforme a figura 1.4 abaixo.


Figura 1.4 – Reiniciando o servidor pelo comando shutdown /r.

5.         Clique em Fechar. Feito isso o servidor será reinicializado e configuração de nome entrará em vigor.

6.         Com o servidor reinicializado, podemos confirmar que o novo nome foi aplicado acessando as propriedades de sistema do servidor e procurando pelo campo Nome do Computador, conforme ilustrado na figura 1.5 abaixo.


Figura 1.5 – Propriedades do Sistema - Windows Server
Tags: $sysInfo

Troubleshooting AD - Parte 3 (Habilitar Lixeira do AD) - Teoria + 01 vídeo Prático ao VIVO.

$
0
0
Revisão Atual postado em artigos TechNet por FÁBIOFOL em 5/11/2017 18:19:41


Olá pessoal tudo bem!

Segue abaixo uma explicação bem legal sobre Habilitação de Lixeira do AD (Active Directory) e um mais um vídeo ao VIVO e completo.

Desde o Windows Server 2008 R2, o Active Directory (AD) recebeu novas funcionalidade no  AD DS, que é a habilitação da lixeira do AD. Onde sem dúvida uma feature bem interessante e importante dentro da estrutura, assim como uma carta na mão do Administrador de Redes.

[Importante1] No Windows Server 2008 R2 o processo de Habilitação desse recurso não era trivial de ser habilitada e de ser gerenciada.

Habilitar: Era via linha de comando com Enable-ADOptionalFeature
Gerenciar: P
ara restaurar era também um longo passo complicado, dependia de software de terceiros ou (Como restaurar os objetos do AD).

Já no Windows Server 2012 pra frente esse processo é bem de Habilitação e gerenciamento é bem mais tranquilo.

[Importante2] Alguns pontos sobre a Lixeira no Windows Server 2012 R2:

1 - O nível da floresta para habilitarmos a lixeira tem que ser no mínimo Windows Server 2008 R2;
2 - Por padrão a funcionalidade é desabilitada, e uma vez feito isso não podemos mais voltar, ou seja, o processo é irreversível;
3 - Por padrão no Windows Server 2012 R2 o tempo que um objeto fica na lixeira é 180 dias


Link do vídeo ao VIVO:

https://www.youtube.com/watch?v=WymCAPQWDkM

Abraços FOL!
Tags: Ad Troubleshooting

Instalando Azure Active Directory Domain Services (New Portal)

$
0
0
Revisão Atual postado em artigos TechNet por Vinicius Mozart em 6/11/2017 5:26:27

Nesse artigo vamos falar sobre um assunto bem interessante e que gera muitas dúvidas entre administradores ITPRO. Sempre que pensamos em Microsoft Azure, tentamos imaginar nossa estrutura local de Active Directory integrada com o Azure e na maioria dos casos, efetuamos a opção de manter um ambiente híbrido conectando o nosso Active Directory local no Microsoft Azure. Hoje os serviços do Active Directory dentro do Microsoft Azure vem se aperfeiçoando e se integrando melhor com os serviços, e de um modo ainda mais parecido com o nosso Active Directory local.

Vamos conhecer abaixo como efetuar a instalação do Active Directory Domain Services no Microsoft Azure e ingressar estações ou servidores nesse domínio. O primeiro passo é acessar o seu portal Microsoft Azure e procure como "Azure Domain" na pesquisa, e clique em"Create AD Azure Domain Services" como mostramos na imagem abaixo:

Insira o nome do seu domínio, escolha a subscription que deseja instalar o Active Directory e escolha o Resource Group desejado. Se você não possuir um Resource Group criado, crie um novo para organizar melhor os seus serviços no Microsoft Azure.

Essa etapa é muito importante para a continuidade do processo. Você deve escolher o seu grupo de servidores ou serviços que deseja utilizar o seu Active Directory Domain Services. Efetue as configurações desejadas e clique em"OK" para continuar o processo de instalação:

Confira as configurações e clique em "OK":

O processo de deploy pode demorar alguns minutos e você poderá acompanhar até a finalização do processo. Veja a imagem abaixo do deploy em progresso de instalação:

Muitos administradores preferem administrar através do Powershell, portanto, vamos mostrar como se conectar o Azure AD através dele. Abra o Windows Azure Powershell com elevação e instale o módulo do Azure AD com o comando:

install-module azuread

Digite [A] "Sim para todos" e aperta"Enter":

Aguarde o processo de instalação. Esse processo pode demorar apenas alguns segundos:



Para quem deseja se aprofundar no gerenciamento do Azure AD via Powershell, acesse o link de apoio abaixo:

https://docs.microsoft.com/en-us/powershell/azure/active-directory/overview?view=azureadps-2.0

Continuando com o processo, quando geramos o nosso Azure Active Directory, dois DNS são gerados com o mesmo range de IP da nossa rede, que escolhemos para a nossa rede local. Em nosso exemplo recebemos os seguintes IPs:

  • 10.0.0.6
  • 10.0.0.7

Veja que ao efetuarmos o ping -a conseguimos visualizar os "Containers" que possuem o nosso serviço de Active Directory, e que será o responsável pelas resoluções de nomes internas e externas do meu Azure AD.


Para ingressarmos uma estação ou servidor em nosso novo domínio, devemos seguir a mesma regra antiga de apontar o servidor de DNS principal para o nosso controlador de domínio.

Atenção: Se você estiver fazendo esse procedimento com uma máquina virtual, tome muito cuidado ao alterar o DNS, pois devemos sempre manter um DNS externo para não perdermos acesso a nossa máquina virtual no Azure. Se você colocar o DNS apenas local, não será possível conectar ao servidor através do RDS por um link externo e sim apenas interno no Azure.

Insira os DNS e clique em "OK", como mostramos na imagem abaixo:

Dentro do nosso portal, veja que já possuímos um usuário criado dentro do nosso domínio Azure Active Directory. Podemos a qualquer momento utilizar o gerenciamento das contas, permissões e senhas dentro do novo portal do Microsoft Azure. Redefina a senha do usuário se for necessário, veja como na imagem abaixo:

Vamos utilizar essa conta para ingressar um de nossos servidores apenas como"membro de domínio", assim testamos o nosso DNS e o Active Directory que criamos no passo a passo acima:

Prontinho, você já está com o seu domínio Active Directory funcionando e já pode ingressar estações, servidores e qualquer outra aplicação dentro do Microsoft Azure para o seu novo Active Directory Domain Services.

Uma opção muito bacana, é que conseguimos convidar pessoas que estão fora da nossa organização para acessar os produtos domyapps.microsoft.com que você configurar.

Nós da área de ITPRO, estamos ansiosos para encontrarmos ainda mais integrações do Active Directory Domain Services com o Microsoft Azure e seus produtos internos. Estamos vendo um grande progresso durante os últimos meses a os cenários já estão sendo montados para entregarmos aos nossos clientes as melhores e mais práticas soluções. Esperamos que tenham gostado dessa visão geral do Active Directory no Azure e que ajude nas futuras migrações para os serviços online da Microsoft.

Tags: azure

Azure CLI - Ligando, desligando e desalocando VM Azure

$
0
0
Revisão Atual postado em artigos TechNet por FabioP_Silva em 6/11/2017 17:24:45

Olá pessoal, quem tem familiaridade com comandos Linux, O Azure CLI proporciona você armazenar e centralizar seus scripts e agendar via CRONTAB.

É bem simples mas muito funcional. Sabemos que o Poweshell é poderoso e utilizar o AzureCLI facilita mais ainda outra maneira de usar e automatizar ambientes.

Um dos comandos que irei realizar é o de desligamento, ligamento e desalocar os recursos.

O comando é bem simples

az vm start – ele liga a maquina virtual
az vm stop – ele desliga a maquina virtual mas não desaloca os recursos
az vm deallocate – ele desliga a maquina e desaloca os recursos da maquina

Então vamos lá.

O ambiente temos 3 maquinas, uma Windows server01 ligada no Grupo001, A linux no Grupo002 desligada, e uma Marketplace Alfresco no grupo Rgalfresco ligada.

Os comandos são simples.

az vm stop -g Grupo001 -n server01, iremos desligar.

az vm start -g Grupo002 -n Server02, iremos ligar.

az vm deallocate -g Grupo002 -n Server02, iremos desalocar a mesma maquina 002 depois de ligar novamente.

Veja o vídeo Abaixo de demonstração

Para agendar o horário para ligar, desligar ou desalocar a maquina use o CRONTAB.

Vamos criar o script bem simples para o cron executar.

vim script_ligar_vm_azure.sh

De o comando chmod a+x script_ligar_vm_azure.sh para ter permissão de execução.

O mesmo você irá fazer para os outros scripts para execução.

Como usar o cron

O primeiro passo é abrir o crontab. Para isso, você pode usar editores de textos como vi, vim, emacs ou nano. Também é possível digitar o comando crontab -e para editar o arquivo exclusivo de seu usuário. Neste caso, a edição é feita como se você estivesse usando o vi.

O crontab tem o seguinte formato:

[minutos] [horas] [dias do mês] [mês] [dias da semana] [usuário] [comando]
O preenchimento de cada campo é feito da seguinte maneira:

– Minutos: informe números de 0 a 59;
– Horas: informe números de 0 a 23;
– Dias do mês: informe números de 0 a 31;
– Mês: informe números de 1 a 12;
– Dias da semana: informe números de 0 a 7;
– Usuário: é o usuário que vai executar o comando (não é necessário especificá-lo se o arquivo do próprio usuário for usado);
– Comando: a tarefa que deve ser executada.

Repare que a ordem desses valores indica o nome correspondente do campo. Por exemplo, no campo mês, 1 a 12 quer dizer de “janeiro a dezembro”. No caso de dias da semana, 0 a 6 quer dizer de “domingo a sábado”. Note que o número 7 também pode ser usado. Neste caso, assim como o número 0, o 7 equivale ao dia de “domingo”.

No lugar desses valores, você pode informar * (asterisco) para especificar uma execução constante. Por exemplo, se o campo dias do mês conter *, o comando relacionado será executado todos os dias.

Você também pode informar intervalos no preenchimento, separando os números de início e fim através de – (hífen). Por exemplo, se no campo horas for informando 2-5, o comando relacionado será executado às 2, 3, 4 e 5 horas. E se o comando tiver que ser executado às 2 horas, entre 15 e 18 horas e às 22 horas? Basta informar 2,15-18,22. Nestes casos, você separa os parâmetros por vírgula.

Vamos ao exemplo:

De o comando crontab -e


Edite para o editor que você goste mais. O meu é o VIM.


Os scripts estão no diretório home pois você não pode executar como root.


Pronto, agendei para 22:30 executar o script de ligamento da maquina.

Lembrando que a máquina virtual já tem o agendamento para desligamento em modo gráfico.

Temos o Automation que você pode utilizar também como ponto central de scripts.

Mas o Azure CLI com o shell também é uma ótima alternativa e familiaridade para quem conhece linux.

Espero que tenham gostado.

Tags: azure

Troubleshooting AD - Parte 3 (Habilitar Lixeira do AD) - Teoria + 01 vídeo Prático ao VIVO.

$
0
0
Revisão 1 postado em artigos TechNet por FÁBIOFOL em 5/11/2017 18:19:41


Olá pessoal tudo bem!

Segue abaixo uma explicação bem legal sobre Habilitação de Lixeira do AD (Active Directory) e um mais um vídeo ao VIVO e completo.

Desde o Windows Server 2008 R2, o Active Directory (AD) recebeu novas funcionalidade no  AD DS, que é a habilitação da lixeira do AD. Onde sem dúvida uma feature bem interessante e importante dentro da estrutura, assim como uma carta na mão do Administrador de Redes.

[Importante1] No Windows Server 2008 R2 o processo de Habilitação desse recurso não era trivial de ser habilitada e de ser gerenciada.

Habilitar: Era via linha de comando com Enable-ADOptionalFeature
Gerenciar: P
ara restaurar era também um longo passo complicado, dependia de software de terceiros ou (Como restaurar os objetos do AD).

Já no Windows Server 2012 pra frente esse processo é bem de Habilitação e gerenciamento é bem mais tranquilo.

[Importante2] Alguns pontos sobre a Lixeira no Windows Server 2012 R2:

1 - O nível da floresta para habilitarmos a lixeira tem que ser no mínimo Windows Server 2008 R2;
2 - Por padrão a funcionalidade é desabilitada, e uma vez feito isso não podemos mais voltar, ou seja, o processo é irreversível;
3 - Por padrão no Windows Server 2012 R2 o tempo que um objeto fica na lixeira é 180 dias


Link do vídeo ao VIVO:

https://www.youtube.com/watch?v=WymCAPQWDkM

Abraços FOL!
Tags: Ad Troubleshooting

Azure CLI - Ligando, desligando e desalocando VM Azure

$
0
0
Revisão 1 postado em artigos TechNet por FabioP_Silva em 6/11/2017 17:24:45

Olá pessoal, quem tem familiaridade com comandos Linux, O Azure CLI proporciona você armazenar e centralizar seus scripts e agendar via CRONTAB.

É bem simples mas muito funcional. Sabemos que o Poweshell é poderoso e utilizar o AzureCLI facilita mais ainda outra maneira de usar e automatizar ambientes.

Um dos comandos que irei realizar é o de desligamento, ligamento e desalocar os recursos.

O comando é bem simples

az vm start – ele liga a maquina virtual
az vm stop – ele desliga a maquina virtual mas não desaloca os recursos
az vm deallocate – ele desliga a maquina e desaloca os recursos da maquina

Então vamos lá.

O ambiente temos 3 maquinas, uma Windows server01 ligada no Grupo001, A linux no Grupo002 desligada, e uma Marketplace Alfresco no grupo Rgalfresco ligada.

Os comandos são simples.

az vm stop -g Grupo001 -n server01, iremos desligar.

az vm start -g Grupo002 -n Server02, iremos ligar.

az vm deallocate -g Grupo002 -n Server02, iremos desalocar a mesma maquina 002 depois de ligar novamente.

Veja o vídeo Abaixo de demonstração

Para agendar o horário para ligar, desligar ou desalocar a maquina use o CRONTAB.

Vamos criar o script bem simples para o cron executar.

vim script_ligar_vm_azure.sh

De o comando chmod a+x script_ligar_vm_azure.sh para ter permissão de execução.

O mesmo você irá fazer para os outros scripts para execução.

Como usar o cron

O primeiro passo é abrir o crontab. Para isso, você pode usar editores de textos como vi, vim, emacs ou nano. Também é possível digitar o comando crontab -e para editar o arquivo exclusivo de seu usuário. Neste caso, a edição é feita como se você estivesse usando o vi.

O crontab tem o seguinte formato:

[minutos] [horas] [dias do mês] [mês] [dias da semana] [usuário] [comando]
O preenchimento de cada campo é feito da seguinte maneira:

– Minutos: informe números de 0 a 59;
– Horas: informe números de 0 a 23;
– Dias do mês: informe números de 0 a 31;
– Mês: informe números de 1 a 12;
– Dias da semana: informe números de 0 a 7;
– Usuário: é o usuário que vai executar o comando (não é necessário especificá-lo se o arquivo do próprio usuário for usado);
– Comando: a tarefa que deve ser executada.

Repare que a ordem desses valores indica o nome correspondente do campo. Por exemplo, no campo mês, 1 a 12 quer dizer de “janeiro a dezembro”. No caso de dias da semana, 0 a 6 quer dizer de “domingo a sábado”. Note que o número 7 também pode ser usado. Neste caso, assim como o número 0, o 7 equivale ao dia de “domingo”.

No lugar desses valores, você pode informar * (asterisco) para especificar uma execução constante. Por exemplo, se o campo dias do mês conter *, o comando relacionado será executado todos os dias.

Você também pode informar intervalos no preenchimento, separando os números de início e fim através de – (hífen). Por exemplo, se no campo horas for informando 2-5, o comando relacionado será executado às 2, 3, 4 e 5 horas. E se o comando tiver que ser executado às 2 horas, entre 15 e 18 horas e às 22 horas? Basta informar 2,15-18,22. Nestes casos, você separa os parâmetros por vírgula.

Vamos ao exemplo:

De o comando crontab -e


Edite para o editor que você goste mais. O meu é o VIM.


Os scripts estão no diretório home pois você não pode executar como root.


Pronto, agendei para 22:30 executar o script de ligamento da maquina.

Lembrando que a máquina virtual já tem o agendamento para desligamento em modo gráfico.

Temos o Automation que você pode utilizar também como ponto central de scripts.

Mas o Azure CLI com o shell também é uma ótima alternativa e familiaridade para quem conhece linux.

Espero que tenham gostado.

Tags: Linux, azure, AzureCLI

Como usar o DbContextPool no Asp.Net Core 2.0

$
0
0
Revisão 1 postado em artigos TechNet por Rafael Almeida (ralmsdeveloper) em 14/11/2017 17:44:10


DbContextPool 
esse novo recurso foi disponibilizado na versão do Asp.Net Core 2.0.

Esta API oferece suporte à infraestrutura Entity Framework Core.

A ideia principal é permitir a reutilização de instâncias do DbContext em um pool, que para muitos casos, iremos ter um aumento significativo de desempenho ao criar uma nova instância. Sem ter a necessidade de criar novamente uma nova instancia do objeto em memória. 

Vamos criar um pequeno projeto pra testar essa nova API e entender melhor.




Vamos adicionar o pacote do Microsoft.EntityFrameworkCore.SqlServer 2.0.1  
para ser usado em nosso exemplo.





Substitua o conteúdo do seu Program.cs pelo conteúdo abaixo:


using System;
using System.Linq;
using System.Threading;
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

namespace ExemploDbContextPooling
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<BlogContext>(
                c => c.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=TechWiki;Integrated Security=True;"));
        }
    }

    public class Program
    {
        private const int Threads = 50;
        private const int Segundos = 8;

        private static long _requisicoesProcessadas;

        private static void Main()
        {
            var serviceCollection = new ServiceCollection();
            new Startup().ConfigureServices(serviceCollection);
            var serviceProvider = serviceCollection.BuildServiceProvider();

            InicializarBanco(serviceProvider);

            var stopWatch = new Stopwatch();

            Resultados(TimeSpan.FromSeconds(Segundos), stopWatch);

            Task.WhenAll(
                Enumerable
                    .Range(0, Threads)
                    .Select(_ => SimularRequisicaosAsync(serviceProvider, stopWatch)));

            Console.ReadKey();
        }

        private static void InicializarBanco(IServiceProvider serviceProvider)
        {
            using (var serviceScope = serviceProvider.CreateScope())
            {
                var context = serviceScope.ServiceProvider.GetService<BlogContext>();

                if (context.Database.EnsureCreated())
                {
                    context.Blogs.Add(new Blog { Author = "Rafael Almeida", Url = "https://blog.ralms.net/" });
                    context.Blogs.Add(new Blog { Author = "Microsoft", Url = "https://blogs.msdn.microsoft.com/" });
                    context.Blogs.Add(new Blog { Author = "Asp Net Core", Url = "https://microsoft.com/net" });
                    context.SaveChanges();
                }
            }
        }

        private static async Task SimularRequisicaosAsync(IServiceProvider serviceProvider, Stopwatch stopSatch)
        {
            while (stopSatch.IsRunning)
            {
                using (var serviceScope = serviceProvider.CreateScope())
                {
                    await new BlogController(serviceScope.ServiceProvider.GetService<BlogContext>()).ActionAsync();
                }

                Interlocked.Increment(ref _requisicoesProcessadas);
            }
        }

        private static async void Resultados(TimeSpan duracao, Stopwatch stopWatch)
        {
            var ultimaInstancia = 0L;
            var ultimaRequisicao = 0L;
            var ultimoTempo = TimeSpan.Zero;

            stopWatch.Start();

            while (stopWatch.Elapsed < duracao)
            {
                await Task.Delay(TimeSpan.FromSeconds(1));

                var contadorInstancia = BlogContext.ContadorInstancia;
                var contadorRequisicao = _requisicoesProcessadas;
                var tempoCorrido = stopWatch.Elapsed;
                var tempoAtual = tempoCorrido - ultimoTempo;
                var requisicoes = contadorRequisicao - ultimaRequisicao;

                Console.WriteLine(
                    $"{DateTime.Now:HH:mm:ss.fff} - "
                    + $"Criação do DbContext/Segundo: {contadorInstancia - ultimaInstancia} | "
                    + $"Requisição/Segundo: {Math.Round(requisicoes / tempoAtual.TotalSeconds)}");

                ultimaInstancia = contadorInstancia;
                ultimaRequisicao = contadorRequisicao;
                ultimoTempo = tempoCorrido;
            }

            Console.WriteLine();
            Console.WriteLine($"Total de Instancias Criadas......: {BlogContext.ContadorInstancia}");
            Console.WriteLine(
                $"Média de Requisições por Segundos:     {Math.Round(_requisicoesProcessadas / stopWatch.Elapsed.TotalSeconds)}");

            stopWatch.Stop();
        }

    }

    public class Blog
    {
        public int Id { get; set; }
        public string Author { get; set; }
        public string Url { get; set; }
    }

    public class BlogContext : DbContext
    {
        public static long ContadorInstancia;

        public BlogContext(DbContextOptions options)
            : base(options)
        {
            Interlocked.Increment(ref ContadorInstancia);
        }

        public DbSet<Blog> Blogs { get; set; }
    }

    public class BlogController
    {
        private readonly BlogContext _contextBlog;

        public BlogController(BlogContext context)
        {
            _contextBlog = context;
        }

        public async Task ActionAsync()
        {
            await _contextBlog.Blogs.FirstAsync();
        }
    }
}

Ao executar nosso projeto teremos algo parecido com este, é óbvio que a cada execução poderemos ter valores diferentes, mais o foco aqui será mostrar a diferença entre usar o AddDbContext e o AddDbContextPool.

Em meu teste inicial eu obtive os seguinte resultado.



Se observarmos direito, ele criou milhares de instancias, isso pode afetar a performance de nossa aplicação.
agora iremos trocar apenas a API AddDbContext Para AddDbContextPool. E vamos rodar novamente a aplicação.

Observe agora o número significativo de instancias que foram reduzidas para apenas 50.


Pessoal por hoje é só, nosso intuito aqui foi mostrar como um todo .Net Core está evoluindo.
Cada dia que passa a ferramenta fica fantástica.
Tags: .net core, ASP.NET Core, Asp.net core 2.0, EntityFrameworkCore

Como usar o DbContextPool no Asp.Net Core 2.0

$
0
0
Revisão 2 postado em artigos TechNet por Rafael Almeida (ralmsdeveloper) em 14/11/2017 17:49:23


DbContextPool 
esse novo recurso foi disponibilizado na versão do Asp.Net Core 2.0.

Esta API oferece suporte à infraestrutura Entity Framework Core.

A ideia principal é permitir a reutilização de instâncias do DbContext em um pool, que para muitos casos, iremos ter um aumento significativo de desempenho ao criar uma nova instância. Sem ter a necessidade de criar novamente uma nova instancia do objeto em memória. 

Vamos criar um pequeno projeto pra testar essa nova API e entender melhor.




Vamos adicionar o pacote do Microsoft.EntityFrameworkCore.SqlServer 2.0.1  
para ser usado em nosso exemplo.





Substitua o conteúdo do seu Program.cs pelo conteúdo abaixo:


using System;
using System.Linq;
using System.Threading;
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

namespace ExemploDbContextPooling
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<BlogContext>(
                c => c.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=TechWiki;Integrated Security=True;"));
        }
    }

    public class Program
    {
        private const int Threads = 50;
        private const int Segundos = 8;

        private static long _requisicoesProcessadas;

        private static void Main()
        {
            var serviceCollection = new ServiceCollection();
            new Startup().ConfigureServices(serviceCollection);
            var serviceProvider = serviceCollection.BuildServiceProvider();

            InicializarBanco(serviceProvider);

            var stopWatch = new Stopwatch();

            Resultados(TimeSpan.FromSeconds(Segundos), stopWatch);

            Task.WhenAll(
                Enumerable
                    .Range(0, Threads)
                    .Select(_ => SimularRequisicaosAsync(serviceProvider, stopWatch)));

            Console.ReadKey();
        }

        private static void InicializarBanco(IServiceProvider serviceProvider)
        {
            using (var serviceScope = serviceProvider.CreateScope())
            {
                var context = serviceScope.ServiceProvider.GetService<BlogContext>();

                if (context.Database.EnsureCreated())
                {
                    context.Blogs.Add(new Blog { Author = "Rafael Almeida", Url = "https://blog.ralms.net/" });
                    context.Blogs.Add(new Blog { Author = "Microsoft", Url = "https://blogs.msdn.microsoft.com/" });
                    context.Blogs.Add(new Blog { Author = "Asp Net Core", Url = "https://microsoft.com/net" });
                    context.SaveChanges();
                }
            }
        }

        private static async Task SimularRequisicaosAsync(IServiceProvider serviceProvider, Stopwatch stopSatch)
        {
            while (stopSatch.IsRunning)
            {
                using (var serviceScope = serviceProvider.CreateScope())
                {
                    await new BlogController(serviceScope.ServiceProvider.GetService<BlogContext>()).ActionAsync();
                }

                Interlocked.Increment(ref _requisicoesProcessadas);
            }
        }

        private static async void Resultados(TimeSpan duracao, Stopwatch stopWatch)
        {
            var ultimaInstancia = 0L;
            var ultimaRequisicao = 0L;
            var ultimoTempo = TimeSpan.Zero;

            stopWatch.Start();

            while (stopWatch.Elapsed < duracao)
            {
                await Task.Delay(TimeSpan.FromSeconds(1));

                var contadorInstancia = BlogContext.ContadorInstancia;
                var contadorRequisicao = _requisicoesProcessadas;
                var tempoCorrido = stopWatch.Elapsed;
                var tempoAtual = tempoCorrido - ultimoTempo;
                var requisicoes = contadorRequisicao - ultimaRequisicao;

                Console.WriteLine(
                    $"{DateTime.Now:HH:mm:ss.fff} - "
                    + $"Criação do DbContext/Segundo: {contadorInstancia - ultimaInstancia} | "
                    + $"Requisição/Segundo: {Math.Round(requisicoes / tempoAtual.TotalSeconds)}");

                ultimaInstancia = contadorInstancia;
                ultimaRequisicao = contadorRequisicao;
                ultimoTempo = tempoCorrido;
            }

            Console.WriteLine();
            Console.WriteLine($"Total de Instancias Criadas......: {BlogContext.ContadorInstancia}");
            Console.WriteLine(
                $"Média de Requisições por Segundos:     {Math.Round(_requisicoesProcessadas / stopWatch.Elapsed.TotalSeconds)}");

            stopWatch.Stop();
        }

    }

    public class Blog
    {
        public int Id { get; set; }
        public string Author { get; set; }
        public string Url { get; set; }
    }

    public class BlogContext : DbContext
    {
        public static long ContadorInstancia;

        public BlogContext(DbContextOptions options)
            : base(options)
        {
            Interlocked.Increment(ref ContadorInstancia);
        }

        public DbSet<Blog> Blogs { get; set; }
    }

    public class BlogController
    {
        private readonly BlogContext _contextBlog;

        public BlogController(BlogContext context)
        {
            _contextBlog = context;
        }

        public async Task ActionAsync()
        {
            await _contextBlog.Blogs.FirstAsync();
        }
    }
}


Ao executar nosso projeto teremos algo parecido com este, é óbvio que a cada execução poderemos ter valores diferentes, mais o foco aqui será mostrar a diferença entre usar o AddDbContext e o AddDbContextPool.

Em meu teste inicial eu obtive os seguinte resultado.



Se observarmos direito, ele criou milhares de instancias, isso pode afetar a performance de nossa aplicação.
agora iremos trocar apenas a API AddDbContext Para AddDbContextPool. E vamos rodar novamente a aplicação.

Observe agora o número significativo de instancias que foram reduzidas para apenas 50.


Pessoal por hoje é só, nosso intuito aqui foi mostrar como um todo .Net Core está evoluindo.
Cada dia que passa a ferramenta fica fantástica.
Tags: .net core, ASP.NET Core, Asp.net core 2.0, EntityFrameworkCore

Como usar o DbContextPool no Asp.Net Core 2.0

$
0
0
Revisão Atual postado em artigos TechNet por Rafael Almeida (ralmsdeveloper) em 14/11/2017 17:51:21


DbContextPool 
esse novo recurso foi disponibilizado na versão do Asp.Net Core 2.0.

Esta API oferece suporte à infraestrutura Entity Framework Core.

A ideia principal é permitir a reutilização de instâncias do DbContext em um pool, que para muitos casos, iremos ter um aumento significativo de desempenho ao criar uma nova instância. Sem ter a necessidade de criar novamente uma nova instancia do objeto em memória. 

Vamos criar um pequeno projeto pra testar essa nova API e entender melhor.




Vamos adicionar o pacote do Microsoft.EntityFrameworkCore.SqlServer 2.0.1  
para ser usado em nosso exemplo.





Substitua o conteúdo do seu Program.cs pelo conteúdo abaixo:


using System;
using System.Linq;
using System.Threading;
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

namespace ExemploDbContextPooling
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<BlogContext>(
                c => c.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=TechWiki;Integrated Security=True;"));
        }
    }

    public class Program
    {
        private const int Threads = 50;
        private const int Segundos = 8;

        private static long _requisicoesProcessadas;

        private static void Main()
        {
            var serviceCollection = new ServiceCollection();
            new Startup().ConfigureServices(serviceCollection);
            var serviceProvider = serviceCollection.BuildServiceProvider();

            InicializarBanco(serviceProvider);

            var stopWatch = new Stopwatch();

            Resultados(TimeSpan.FromSeconds(Segundos), stopWatch);

            Task.WhenAll(
                Enumerable
                    .Range(0, Threads)
                    .Select(_ => SimularRequisicaosAsync(serviceProvider, stopWatch)));

            Console.ReadKey();
        }

        private static void InicializarBanco(IServiceProvider serviceProvider)
        {
            using (var serviceScope = serviceProvider.CreateScope())
            {
                var context = serviceScope.ServiceProvider.GetService<BlogContext>();

                if (context.Database.EnsureCreated())
                {
                    context.Blogs.Add(new Blog { Author = "Rafael Almeida", Url = "https://blog.ralms.net/" });
                    context.Blogs.Add(new Blog { Author = "Microsoft", Url = "https://blogs.msdn.microsoft.com/" });
                    context.Blogs.Add(new Blog { Author = "Asp Net Core", Url = "https://microsoft.com/net" });
                    context.SaveChanges();
                }
            }
        }

        private static async Task SimularRequisicaosAsync(IServiceProvider serviceProvider, Stopwatch stopSatch)
        {
            while (stopSatch.IsRunning)
            {
                using (var serviceScope = serviceProvider.CreateScope())
                {
                    await new BlogController(serviceScope.ServiceProvider.GetService<BlogContext>()).ActionAsync();
                }

                Interlocked.Increment(ref _requisicoesProcessadas);
            }
        }

        private static async void Resultados(TimeSpan duracao, Stopwatch stopWatch)
        {
            var ultimaInstancia = 0L;
            var ultimaRequisicao = 0L;
            var ultimoTempo = TimeSpan.Zero;

            stopWatch.Start();

            while (stopWatch.Elapsed < duracao)
            {
                await Task.Delay(TimeSpan.FromSeconds(1));

                var contadorInstancia = BlogContext.ContadorInstancia;
                var contadorRequisicao = _requisicoesProcessadas;
                var tempoCorrido = stopWatch.Elapsed;
                var tempoAtual = tempoCorrido - ultimoTempo;
                var requisicoes = contadorRequisicao - ultimaRequisicao;

                Console.WriteLine(
                    $"{DateTime.Now:HH:mm:ss.fff} - "
                    + $"Criação do DbContext/Segundo: {contadorInstancia - ultimaInstancia} | "
                    + $"Requisição/Segundo: {Math.Round(requisicoes / tempoAtual.TotalSeconds)}");

                ultimaInstancia = contadorInstancia;
                ultimaRequisicao = contadorRequisicao;
                ultimoTempo = tempoCorrido;
            }

            Console.WriteLine();
            Console.WriteLine($"Total de Instancias Criadas......: {BlogContext.ContadorInstancia}");
            Console.WriteLine(
                $"Média de Requisições por Segundos:     {Math.Round(_requisicoesProcessadas / stopWatch.Elapsed.TotalSeconds)}");

            stopWatch.Stop();
        }

    }

    public class Blog
    {
        public int Id { get; set; }
        public string Author { get; set; }
        public string Url { get; set; }
    }

    public class BlogContext : DbContext
    {
        public static long ContadorInstancia;

        public BlogContext(DbContextOptions options)
            : base(options)
        {
            Interlocked.Increment(ref ContadorInstancia);
        }

        public DbSet<Blog> Blogs { get; set; }
    }

    public class BlogController
    {
        private readonly BlogContext _contextBlog;

        public BlogController(BlogContext context)
        {
            _contextBlog = context;
        }

        public async Task ActionAsync()
        {
            await _contextBlog.Blogs.FirstAsync();
        }
    }
}


Ao executar nosso projeto teremos algo parecido com este, é óbvio que a cada execução poderemos ter valores diferentes, mais o foco aqui será mostrar a diferença entre usar o AddDbContext e o AddDbContextPool.

Em meu teste inicial eu obtive o seguinte resultado.



Se observarmos direito, ele criou milhares de instancias, isso pode afetar a performance de nossa aplicação.
agora iremos trocar apenas a API AddDbContext Para AddDbContextPool. E vamos rodar novamente a aplicação.

Observe agora o número significativo de instancias que foram reduzidas para apenas50.



Pessoal por hoje é só, nosso intuito aqui foi mostrar como um todo .Net Core está evoluindo.
Cada dia que passa a ferramenta fica fantástica.
Tags: .net core

Troubleshooting Storage RAID's - Parte 1 - Teoria + 01 vídeo Prático ao VIVO.

$
0
0
Revisão 1 postado em artigos TechNet por FÁBIOFOL em 15/11/2017 8:44:43


Olá pessoal tudo bem!

Segue abaixo uma explicação bem legal sobre RAID e um mais um vídeo ao VIVO e completo de configuração.

No início foi denominado de "Redundant Array of Inexpensive Drives" (Conjunto Redundante de Discos Econômicos). Mas com o tempo, identificaram uma forma de dissociar o conceito de "discos baratos", no qual virou "Redundant Array of Independent Disks"(Conjunto Redundante de Discos Independentes).

RAID é uma forma de criar um subsistema de armazenamento composto por vários discos individuais. com a finalidade de ganhar segurança -- por meio da redundância de dados -- e desempenho.

O RAID oferece segurança e confiabilidade por meio da adição de redundância. Se um disco falhar, o outro continua funcionando normalmente e para o usuário é transparente.  O administrador é avisado pelo sistema e substitui o disco que falhou.

[IMPORTANTE] RAID não protege contra falhas de energia ou erros de operação ou contra a falha simultânea dos dois discos.
Por este motivo, mesmo usando-se o RAID não se dispensa a tradicional backup.

Arquiteturas:

Implementação via software

Na implementação via software, o sistema operacional gerencia o RAID através da controladora de discos, sem a necessidade de um controlador de RAIDs, tornando-a mais barata.

Nesse tipo de implementação, todo o processamento necessário para o gerenciamento do RAID é feito pela CPU. Toda movimentação de dados (leitura e escrita) é feita por uma camada de software que faz a abstração entre a operação lógica (RAID) e os discos físicos, e é controlada pelo sistema operacional.

Vale lembrar que nesse tipo de implementação estamos na camada 7 da OSI, onde a performance é bem menor que a implementação por Hardware, além de outras features e a possibilidade de trabalhar com Hot Spare, Hot Swapping.

Implementação via hardware

Controladoras RAID em hardware são necessárias.

O BIOS - Basic Input/Output System - pode iniciar (dar boot) por ela, e uma integração maior com o driver de dispositivo pode oferecer um melhor tratamento de erros.

Uma implementação de RAID em hardware requer pelo menos uma controladora especialmente dedicada para isso. A controladora gerencia os drives e faz os cálculos de paridade necessários pelo nível de RAID escolhido.

A maioria das implementações em hardware proveem cache de leitura e escrita, o que (dependendo da carga de I/O) melhora a performance. Na maioria dos casos, o cache de escrita é não-volátil (protegido por bateria), e portanto, escritas pendentes não são perdidas no caso de uma falha no suprimento de energia.

Implementações em hardware promovem performance garantida, não sobrecarregam o processador e podem suportar vários sistemas operacionais, já que a controladora apresentará ao sistema operacional um disco simples.

A maioria das implementações em hardware também suporta o "hot-swapping", permitindo que discos com falha sejam substituídos enquanto o sistema está sendo executado.

Níveis de RAID


RAID 0 (Striping)

No striping, ou distribuição, os dados são subdivididos em segmentos consecutivos,  ou seja, são escritos sequencialmente através de cada um dos discos de um array, ou conjunto. Cada segmento tem um tamanho definido em blocos. 

Vantagens:

  • Acesso rápido aos dados;
  • Custo baixo;

Desvantagens:

  • Caso algum disco falhe, perder-se todos os dados e não tem como recuperar;
  • Não tem espelhamento;
  • Não é usada paridade;

RAID 1 (Mirroring)



RAID-1
 é o nível de RAID que implementa o espelhamento de disco, também conhecido como mirror.

Para esta implementação são necessários dois discos ou mais. O funcionamento deste nível é simples: todos os dados são gravados em discos diferentes; se um disco falhar ou for removido, os dados preservados no outro disco permitem a não descontinuidade da operação do sistema.

Vantagens:

  • Caso algum setor de um dos discos venha a falhar, basta recuperar o setor defeituoso copiando os arquivos contidos do segundo disco;
  • Segurança nos dados (com relação a possíveis defeitos que possam ocorrer no HD);

Desvantagens:

  • Custo relativamente mais alto se comparado ao RAID 0;
  • Ocorre aumento no tempo de escrita;
  • Tem espelhamento;
  • Não é usada paridade;

RAID 5 (Distributed parity)











O RAID 5 Usa paridade para os dados do array são distribuídas ao longo de todos os discos do array, ao invés de serem armazenadas num disco dedicado, oferecendo assim mais desempenho e simultaneamente, tolerância a falhas.

Para aumentar o desempenho de leitura de um array RAID 5, o tamanho de cada segmento em que os dados são divididos pode ser optimizado para o array que estiver a ser utilizado. 

Exemplo:
Ao usar 10 HDs de 20 GB cada um, em RAID 5, em um total de 200 GB de dados, teremos 20 GB de paridade (capacidade de 1 HD) e 180 GB disponíveis.

Vantagens:

  • Leitura bem mais rápida (porém escrita não tão rápida);

Desvantagem:

  • Sistema complexo de controle dos discos e configuração;

RAID aninhados (Híbridos)

RAID 01 (RAID 0+1)
Uma configuração de RAID 01 aninhada

No RAID 0+1, se um dos discos vier a falhar, o sistema vira um RAID 0.

O RAID 0+1 é uma combinação dos níveis 0 (Striping) e 1 (Mirroring), onde os dados são divididos entre os discos para melhorar o rendimento.

Assim, é possível utilizar o bom rendimento do nível 0 com a redundância do nível 1, dai o nome aninhamento.

[IMPORTANTE]

No entanto, é necessário pelo menos 4 discos, e em quantidade par, para montar um RAID desse tipo. Tais características fazem do RAID 0+1 o mais rápido e seguro, porém o mais caro de ser implantado.

[IMPORTANTE]
Se os dois discos que possuam a sequência A1,A3,A5,A7 falharem ao mesmo tempo, haverá perda de dados. Se apenas uma das controladoras falhar, o sistema continua funcionando, mas sem o ganho de velocidade nem tolerância a outra falha.

Vantagens:

  • Segurança contra perda de dados;
  • Pode falhar 1 dos HDs, ou os dois HDs do mesmo, porém deixando de ser RAID 0+1;

Desvantagens:

  • Maior Custo;

RAID 10 (RAID 1+0)













O RAID 10 também é outra combinação dos níveis 0 (Striping) e 1 (Mirroring).

Cada par será espelhado (RAID 1), garantindo redundância, e os pares serão distribuídos (RAID 0), melhorando desempenho.

[IMPORTANTE]
Assim como o RAID 0+1, o RAID 10 exige ao menos 4 discos rígidos, e em quantidade par. Até metade dos discos pode falhar simultaneamente, sem colocar o conjunto a perder, desde que não falhem os dois discos de um espelho qualquer.

Vantagens:
- Segurança contra perda de dados;
- Pode falhar um ou dois dos HDs ao mesmo tempo, dependendo de qual o ambiente continua operacional;

Desvantagens:
- Alto custo de hardware;

Segue abaixo um vídeo completo de configuração ao VIVO:

(Please visit the site to view this video)

Abraços FOL!

Tags: Storage Raid Troubleshooting

Troubleshooting Storage RAID's - Parte 1 - Teoria + 01 vídeo Prático ao VIVO.

$
0
0
Revisão Atual postado em artigos TechNet por Burak Uğur em 15/11/2017 10:04:07


Olá pessoal tudo bem!

Segue abaixo uma explicação bem legal sobre RAID e um mais um vídeo ao VIVO e completo de configuração.

No início foi denominado de "Redundant Array of Inexpensive Drives" (Conjunto Redundante de Discos Econômicos). Mas com o tempo, identificaram uma forma de dissociar o conceito de "discos baratos", no qual virou "Redundant Array of Independent Disks"(Conjunto Redundante de Discos Independentes).

RAID é uma forma de criar um subsistema de armazenamento composto por vários discos individuais. com a finalidade de ganhar segurança -- por meio da redundância de dados -- e desempenho.

O RAID oferece segurança e confiabilidade por meio da adição de redundância. Se um disco falhar, o outro continua funcionando normalmente e para o usuário é transparente.  O administrador é avisado pelo sistema e substitui o disco que falhou.

[IMPORTANTE] RAID não protege contra falhas de energia ou erros de operação ou contra a falha simultânea dos dois discos.
Por este motivo, mesmo usando-se o RAID não se dispensa a tradicional backup.

Arquiteturas:

Implementação via software

Na implementação via software, o sistema operacional gerencia o RAID através da controladora de discos, sem a necessidade de um controlador de RAIDs, tornando-a mais barata.

Nesse tipo de implementação, todo o processamento necessário para o gerenciamento do RAID é feito pela CPU. Toda movimentação de dados (leitura e escrita) é feita por uma camada de software que faz a abstração entre a operação lógica (RAID) e os discos físicos, e é controlada pelo sistema operacional.

Vale lembrar que nesse tipo de implementação estamos na camada 7 da OSI, onde a performance é bem menor que a implementação por Hardware, além de outras features e a possibilidade de trabalhar com Hot Spare, Hot Swapping.

Implementação via hardware

Controladoras RAID em hardware são necessárias.

O BIOS - Basic Input/Output System - pode iniciar (dar boot) por ela, e uma integração maior com o driver de dispositivo pode oferecer um melhor tratamento de erros.

Uma implementação de RAID em hardware requer pelo menos uma controladora especialmente dedicada para isso. A controladora gerencia os drives e faz os cálculos de paridade necessários pelo nível de RAID escolhido.

A maioria das implementações em hardware proveem cache de leitura e escrita, o que (dependendo da carga de I/O) melhora a performance. Na maioria dos casos, o cache de escrita é não-volátil (protegido por bateria), e portanto, escritas pendentes não são perdidas no caso de uma falha no suprimento de energia.

Implementações em hardware promovem performance garantida, não sobrecarregam o processador e podem suportar vários sistemas operacionais, já que a controladora apresentará ao sistema operacional um disco simples.

A maioria das implementações em hardware também suporta o "hot-swapping", permitindo que discos com falha sejam substituídos enquanto o sistema está sendo executado.

Níveis de RAID


RAID 0 (Striping)

No striping, ou distribuição, os dados são subdivididos em segmentos consecutivos,  ou seja, são escritos sequencialmente através de cada um dos discos de um array, ou conjunto. Cada segmento tem um tamanho definido em blocos. 

Vantagens:

  • Acesso rápido aos dados;
  • Custo baixo;

Desvantagens:

  • Caso algum disco falhe, perder-se todos os dados e não tem como recuperar;
  • Não tem espelhamento;
  • Não é usada paridade;

RAID 1 (Mirroring)



RAID-1
 é o nível de RAID que implementa o espelhamento de disco, também conhecido como mirror.

Para esta implementação são necessários dois discos ou mais. O funcionamento deste nível é simples: todos os dados são gravados em discos diferentes; se um disco falhar ou for removido, os dados preservados no outro disco permitem a não descontinuidade da operação do sistema.

Vantagens:

  • Caso algum setor de um dos discos venha a falhar, basta recuperar o setor defeituoso copiando os arquivos contidos do segundo disco;
  • Segurança nos dados (com relação a possíveis defeitos que possam ocorrer no HD);

Desvantagens:

  • Custo relativamente mais alto se comparado ao RAID 0;
  • Ocorre aumento no tempo de escrita;
  • Tem espelhamento;
  • Não é usada paridade;

RAID 5 (Distributed parity)











O RAID 5 Usa paridade para os dados do array são distribuídas ao longo de todos os discos do array, ao invés de serem armazenadas num disco dedicado, oferecendo assim mais desempenho e simultaneamente, tolerância a falhas.

Para aumentar o desempenho de leitura de um array RAID 5, o tamanho de cada segmento em que os dados são divididos pode ser optimizado para o array que estiver a ser utilizado. 

Exemplo:
Ao usar 10 HDs de 20 GB cada um, em RAID 5, em um total de 200 GB de dados, teremos 20 GB de paridade (capacidade de 1 HD) e 180 GB disponíveis.

Vantagens:

  • Leitura bem mais rápida (porém escrita não tão rápida);

Desvantagem:

  • Sistema complexo de controle dos discos e configuração;

RAID aninhados (Híbridos)

RAID 01 (RAID 0+1)
Uma configuração de RAID 01 aninhada

No RAID 0+1, se um dos discos vier a falhar, o sistema vira um RAID 0.

O RAID 0+1 é uma combinação dos níveis 0 (Striping) e 1 (Mirroring), onde os dados são divididos entre os discos para melhorar o rendimento.

Assim, é possível utilizar o bom rendimento do nível 0 com a redundância do nível 1, dai o nome aninhamento.

[IMPORTANTE]

No entanto, é necessário pelo menos 4 discos, e em quantidade par, para montar um RAID desse tipo. Tais características fazem do RAID 0+1 o mais rápido e seguro, porém o mais caro de ser implantado.

[IMPORTANTE]
Se os dois discos que possuam a sequência A1,A3,A5,A7 falharem ao mesmo tempo, haverá perda de dados. Se apenas uma das controladoras falhar, o sistema continua funcionando, mas sem o ganho de velocidade nem tolerância a outra falha.

Vantagens:

  • Segurança contra perda de dados;
  • Pode falhar 1 dos HDs, ou os dois HDs do mesmo, porém deixando de ser RAID 0+1;

Desvantagens:

  • Maior Custo;

RAID 10 (RAID 1+0)













O RAID 10 também é outra combinação dos níveis 0 (Striping) e 1 (Mirroring).

Cada par será espelhado (RAID 1), garantindo redundância, e os pares serão distribuídos (RAID 0), melhorando desempenho.

[IMPORTANTE]
Assim como o RAID 0+1, o RAID 10 exige ao menos 4 discos rígidos, e em quantidade par. Até metade dos discos pode falhar simultaneamente, sem colocar o conjunto a perder, desde que não falhem os dois discos de um espelho qualquer.

Vantagens:
- Segurança contra perda de dados;
- Pode falhar um ou dois dos HDs ao mesmo tempo, dependendo de qual o ambiente continua operacional;

Desvantagens:
- Alto custo de hardware;

Segue abaixo um vídeo completo de configuração ao VIVO:

(Please visit the site to view this video)

Abraços FOL!

Tags: has image
Viewing all 8688 articles
Browse latest View live


Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>