quarta-feira, 23 de agosto de 2017

Oreo, Marshmallow, KitKat: entenda a origem dos nomes de cada edição do Android


O Google confirmou nesta semana que a mais nova versão do seu sistema operacional móvel, a 8.0, se chama Android Oreo
Afinal, por que Oreo? A marca norte-americana de biscoitos recheados (ou bolachas recheadas, se você estiver em São Paulo) virou o nome desta edição do Android graças a um acordo de "co-branding", como explicou Justin Parnell, diretor de marca global da Oreo, ao site Ad Age.
Segundo o executivo, o acordo permite que Google e Oreo tirem proveito do nome do novo Android em termos de publicidade. Sendo assim, nem a Oreo precisou pagar para colocar seu nome noAndorid 8.0 e nem o Google teve que pagar para pegar a marca Oreo "emprestada".

Para a Oreo, o benefício é claro: publicidade no sistema operacional mais usado no mundo.

Mas e o Google, o que ganha com isso? O uso da marca Oreo tem a ver com uma tradição que a empresa mantém desde 2009, quando foi lançado o Android 1.5 Cupcake. Cada versão do sistema operacional segue uma letra do alfabeto: as duas primeiras, 1.0 e 1.1, seriam, respectivamente, A e B. Já a terceira versão, que seria o Android C, ganhou o nome de Cupcake.

Em seguida veio o Android D (Donut), o Android E (Eclair) e assim por diante, seguindo cada letra do alfabeto até chegar a Android O (Oreo). Mas de onde vêm esses nomes, como Donut e Eclair? São sobremesas populares nos EUA, assim como o pacote de biscoitos Oreo, o Marshamallow do Android M e o pirulito do Android L (Lollipop).

Até o Android 4.3, que se chamava Jelly Bean (balinha de goma), os nomes de cada edição foram simples guloseimas. Quando chegamos ao Android K, em 2013, pela primeira vez o Google realizou um acordo de co-branding, aproveitando a marca KitKat para o Android 4.4, em um negócio semelhante ao que a empresa fechou com a Oreo neste ano.

É por isso que, na ocasião do lançamento do Android 7.0, no ano passado, que deveria ter um nome começando com a letra N, tantas pessoas apostaram que a edição se chamaria Android Nutella, aproveitando mais uma marca conhecida pelas sobremesas. Mas não foi o que aconteceu, com a chegada do nogado (do latim vulgar nucatu, de nux, "noz"), nugá (do francês Nougat) ou Torrone, como o doce é mais conhecido em algumas regiões no Brasil.

É também por esse motivo que o Android O, oficializado nesta semana, já trazia a expectativa de ser chamado de Android Oreo. O Google nunca explicou o motivo de usar nomes de sobremesas em ordem alfabética, se limitando a dizer apenas que se trata de uma brincadeira interna criada pelos engenheiros do software.

Mas, de qualquer forma, seguindo esse padrão - que, até hoje, não mudou - fica fácil para os fãs do Android tentarem adivinhar qual será o nome da próxima edição do sistema, que só chega no ano que vem. Será Android P, mas qual sobremesa será a homenageada? Resta aos usuários que façam suas apostas.

Good Luck 

Ficam algumas dicas from desserts (sobremesas): Wikipedia, the free encyclopedia ..

terça-feira, 22 de agosto de 2017

SQL SERVER - 3 Usos diferentes de DBCC SQLPERF

Você já se perguntou o que DBCC SQLPERF faz no SQL Server?
Bem, muitas vezes pensei sobre isso e aqui é a resposta mais simples para o mesmo.

Método 1: exibe o LogSpace

Este método exibe o tamanho atual do log de transações e a porcentagem de espaço de log usado para o banco de dados. Aqui está um exemplo simples do código.
1
2
DBCC SQLPERF(LOGSPACE);
GO

Método 2: Redefinir as estatísticas de espera

As estatísticas de espera são um elemento muito importante do SQL Server. No entanto, se você quiser redefinir as estatísticas de espera sem reiniciar o SQL Server, você pode usar a seguinte sintaxe.
1
DBCC SQLPERF("sys.dm_os_wait_stats",CLEAR);

Método 3: Repor as estatísticas do bloqueio

Todo mundo já ouviu falar sobre Locks, mas nem todo mundo sabe disso. Os locks são mecanismos internos do SQL e são usadas para fornecer consistência de memória, enquanto os bloqueios são usados ​​pelo SQL Server para fornecer consistência transacional lógica.
O SQL Server grava internamente todos os detalhes sobre as estatísticas do lock.  Se você deseja redefinir o valor do lock, você pode executar o seguinte script.
1
DBCC SQLPERF("sys.dm_os_latch_stats",CLEAR);
Ele irá redefinir todos os valores para travas sem reiniciar o SQL Server.
Bem, é isso. Os itens acima mencionados são três cenários de uso primário para DBCC SQLPERF. Eu suponho que, no futuro, eles apresentarão mais alguns exemplos.
Referências:  Pinal Dave

quarta-feira, 16 de agosto de 2017

Gerenciamento De Backup' s MongoDB (NoSQL) ?

Como gerenciar backups's no MongoDB (NoSQL) ?


Saiba o que é, conheça em:







Um blefe ao titulo gerenciamento, pois atualmente nosso management Robomongo 1.0 rs 
ainda não possui nenhuma feature de gerenciamentos de backups, como os outros SGBD's convencionais de mercado relacional;

Mas podemos contornar estas situações, implementamos uma rotina, simplificada porem "arcaica"  
De gerenciar a execução dos backups automático; de gerações através do Dump dos arquivos,
controlado pelo agendador de tarefas do Windows (Task Schedule).

Dump é um utilitário para criar uma exportação binária do conteúdo de um banco de dados.
Pode exportar dados de qualquer um "mongo dou' "mongos instâncias". 
Podendo incorporar uma estratégia de backup com "mongorestorebackups" parciais com base em uma consulta,
sincronização de produção para ambientes de preparação ou desenvolvimento ou alteração do mecanismo de
armazenamento de um autônomo. 

1) Crie um arquivo de extensão .bat para que possa ser executado,
pelo agendador de tarefas. Inclua a instrução para Dump, dentro
do arquivo e salve.

mongodump -h <ip>:<port_number> -d <db_name> -u <User> -p <Password> -o /home/mongodump/
















* Nota no arquivo imagem (Robocopy) aproveitamos o mesmo processo,
para copiar o arquivo para nosso servidor de redundancias.


2) Configure uma tarefa para executar aplicativos, selecione pelo
arquivo .bat configurado; São necessarios permissoes a niveis administrador para execução das atividades. 

Configure a tarefa de acordo com seu ambiente!

nota: fundamental os argumento opcionais, nao sao opcionais,
ao menos nunca foi possivel execuçao sem preenchimentos, configure-os;



























Deste modo estamos configurados as rotinas para backups;
ajustes horarios e melhores configuraçoes de acordo com seu ambiente.

Espero possa ajudar seu cotidiano;

domingo, 6 de agosto de 2017

CDC – Change Data Capture SQL Server

CDC - Change data capture é uma features responsável por monitorar e capturar todas as operações DML (insert - update - delete) em uma ou mais tabelas de dados. Diferentemente do CT - Change tracking comum (Triggers - SQL Profile e entre outros) com o Change Data temos a possibilidade de registrar e armazenar todas as alterações de dados. O que custa a um overhead maior do que o que o CT tradicional em relação a necessidade de armazenar os dados modificados.

Os dados capturados são registrados em uma tabela SQL Server, o que facilita as consultas e estudos de analise dos mesmos. E sim, é uma solução muito mais elegante e eficiente do que utilizar Triggers sobre as tabelas.

Como realmente funciona :



















O SQL Server Change Data Capture, monitor e captura as alterações diretamente do arquivo de log da database ldf. Ou seja, os processos DML que ocorrem na database não são condicionados ao CDC, como por exemplo seriam no caso de triggers.

É importante ressaltar a diferença de metodologia do Change Data Capture para o Change Tracking. O CDC é assíncrono e captura as informações do log. Já o CT é um processo leve, porém síncrono (pois as informações das operações são armazenadas no momento da operação). Observe também que o CDC é uma feature Enterprise e o CT não é (geralmente disponível  ambientes mais robustos de alta disponibilidade).

Determinado momento apos leitura do log as respectivas informações modificadas são registradas nas tabelas de modificações (que podem crescer rapidamente, de acordo com a alteração dos dados na tabela com o tracking ativo).
O CDC fornece funções que operam sobre estas tabelas para retornar os valores em um formato filtrado para atender em geral aos processos de ETL. Estes processos por sua vez se beneficiam muito pois não precisam comparar os dados da tabela com os dados de um DW por exemplo para determinar se houve mudança ou não. Isso pode baixar consideravelmente o tempo de carga nos seus pacotes de ETL.

Maiores informações ( ): http://msdn.microsoft.com/en-us/library/cc645937.aspx

Como configurar:

Para utilizar o CDC é necessário habilitá-lo para a database através da stored procedure: sys.sp_cdc_enable_db. E na sequência habilitar nas tabelas desejadas com sys.sp_cdc_enable_table.

Imagine que temos uma database chamada MonitorarCDC e que gostaríamos de monitorar algumas de suas tabelas. A começar com a tabela chamada Empregados. Primeiramente habilitamos o CDC na database MonitorarCDC:

USE MonitorarCDC
GO

EXECUTE sys.sp_cdc_enable_db

Se atente que o nome da databe não é passada como parâmetro, é utilizado o contexto atual.
Perceba também que isso irá criar na sua database um schema chamado cdc, bem como algumas tabelas de sistema para gerenciar seu CDC.














Perceba também que isso irá A função de cada uma destas tabelas você pode ver abaixo:

cdc.captured_columns – Retorna a lista de colunas capturadas.
cdc.change_tables – Armazena a lista de todas as tabelas habilitadas para captura.
cdc.ddl_history – Contém toda a modificação de estrutura (DDL) desde que a captura foi habilitada.
cdc.index_columns – Contém os índices associados às tabelas capturadas.
cdc.lsn_time_mapping – Esta tabela mapeia o número LSN e o tempo.

Neste exemplos iremos habilitar o CDC para a tabela Empregados. O exemplo não cobre, mas existem outros parâmetros na procedure sp_cdc_enable_table, como por exemplo a possibilidade de especificar o monitoramento de apenas algumas colunas. Para maiores informações desta procedure segue a documentação: http://technet.microsoft.com/en-us/library/bb522475(v=sql.120).aspx

EXEC sys.sp_cdc_enable_table 
@source_schema = N'dbo', 
@source_name   = N'Empregados', 
@role_name     = NULL 
GO

Job 'cdc.MonitorarCDC_capture' started successfully.
Job 'cdc.MonitorarCDC_cleanup' started successfully.


O CDC, como vimos, é assíncrono e (caso não tenha replicação) irá utilizar jobs para fazer a leitura do log de transações, cuja principal função é a execução das
procedures sys.sp_MScdc_capture_jobsys.sp_MScdc_cleanup_job



* Obs: 
Quando há a replicação para não haver competição entre o capture e o transactional logreader da replicação, ambos passam a utilizar o transactional logreader.

Além destes jobs no SQL Agent, há a criação de uma tabela de sistema com o nome e estrutura semelhantes a original, com o seguinte padrão de nomenclatura cdc.<schema>_<nome_da_tabela>_CT. No meu caso: cdc.dbo_Empregados_CT

















A estrutura da tabela é semelhante, porém com 5 colunas a mais. Veja na imagem abaixo:


__$start_lsn: LSN associado com o commit da transação de mudança. Todas as mudanças feitas em uma mesma transação compartilham o mesmo valor de __$start_lsn. Se houve deleção de 10 linhas, as 10 linhas possuirão o mesmo valor.

__$end_lsn: Para propósitos informacionais apenas. Não suportado e a compatibilidade futura não é garantida (atualmente insere o valor NULL para todos os valores).

__$seqval: Valor usado para ordenar as operações dentro de uma transação.

__$operation: Identifica a operação (DML) realizada. 1 – DELETE, 2 – INSERT, 3 - UPDATE (valores antigos), 4 – UPDATE (novos valores).

__$update_mask: Mostra os valores alterados no update (1 para as posições alteradas). No caso de DELETE e INSERT onde todas as colunas são afetadas, virá uma máscara com 1’s em todas as posições.

Maiores informações ( ): http://msdn.microsoft.com/en-us/library/bb500305.aspx


Como obter os retornos:

Bom, o LSN é sequencial e corresponde a um tempo específico, esta informação fica armazenada na tabela cdc.lsn_time_mapping criada na database monitorada no momento em que você habilitou o CDC.

Para facilitar o consumo destas tabelas, sem termos que executar uma série de joins e análises, o CDC criou para nós algumas funções que nos auxiliam neste consumo, tais como: sys.fn_cdc_map_time_to_lsn e cdc.fn_cdc_get_all_changes_<schema>_<tabela>.

Veja abaixo um exemplo do consumo de dados utilizando estas funções no nosso exemplo para trazer as modificações das últimas 24 horas:


DECLARE
    @begin_time DATETIME,
    @end_time DATETIME,
    @begin_lsn BINARY(10),
    @end_lsn BINARY(10)
SELECT @begin_time = GETDATE()-1, @end_time = GETDATE();
SELECT @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time);
SELECT @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time); 

SELECT *
FROM cdc.fn_cdc_get_all_changes_dbo_Empregados(@begin_lsn,@end_lsn,'all')
GO
A função fn_cdc_map_time_to_lsn pode receber um dos seguintes parâmetros (auto explicativos):
  • largest less than
  • largest less than or equal
  • smallest greater than
  • smallest greater than or equal

Essa tabela de tracking pode crescer muito?
Se as suas tabelas monitoradas são altamente transacionais, você pode esperar um rápido crescimento das mesmas. O job de cleanup é o responsável pela limpeza destas tabelas.
Por padrão há a limpeza a cada 3 dias, porém esse período de retenção é configurável. Na realidade este valor é configurado em minutos, neste caso: 4320 minutos.
Para alterar o período de retenção utilize a procedure abaixo. Há um limite de tempo máximo para a retenção que é de 52494800 minutos (100 anos), e caso seja especificado deve ser um valor inteiro e positivo.
Maiores informações ( ): http://technet.microsoft.com/en-us/library/bb510626(v=sql.110).aspx.
sp_cdc_change_job @job_type='cleanup', @retention=minutes

Bom pessoal e era isso o que eu queriamos compartilhar com vocês hoje. Espero que seja útil no seu dia-a-dia! Grande abraços