Conteúdo do cotidiano e gratuito de tecnologia em Banco de dados, Servidores Windows, Linux, BSD e Desenvolvimento em PL/SQL.
segunda-feira, 14 de novembro de 2016
[Oracle] - Identificando as sessões e seus processos no S.O
Segue abaixo, script para idenficar sessões e seus processos no S.O :
SELECT NVL(s.username, '(oracle)') AS username,
s.inst_id,
s.osuser,
s.sid,
s.serial#,
p.spid,
s.lockwait,
s.status,
s.module,
s.machine,
s.program,
TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time
FROM gv$session s,
gv$process p
WHERE s.paddr = p.addr
AND s.inst_id = p.inst_id
ORDER BY s.username, s.osuser;
quinta-feira, 10 de novembro de 2016
[Oracle] - Consulta para identificar quantidade de commits por sessão
Consulta para identificar quantidade de commits por sessão no Oracle:
select c.sid, a.name estatistica, c.username||'@'||c.machine usuario, sum(b.value) qtd_commits
from v$statname a, v$sesstat b, v$session c
where a.statistic#=b.statistic#
and b.sid = c.sid
and a.name = 'user commits'
and c.username is not null
having sum(b.value) > 0
group by c.sid,a.name, c.username||'@'||c.machine
order by qtd_commits desc;
segunda-feira, 3 de outubro de 2016
[Oracle] - Utilizando regex para consultas
Bom pessoal, essa postagem é para auxiliar na utilização de expressões regulares no Oracle, facilitando a codificação de procedimentos armazenados e funções:
segunda-feira, 25 de julho de 2016
[Oracle] - Identificando a versão do Oracle Database
Bom pessoal, essa aqui é uma dica rápida para verificar a versão do Oracle Database que está utilizando e a versão de produtos correlacionados ao mesmo:
Queries :
select * from v$version; select * from product_component_version;Results :
| Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production PL/SQL Release 11.1.0.6.0 - Production CORE 11.1.0.6.0 Production TNS for Solaris: Version 11.1.0.6.0 - Production NLSRTL Version 11.1.0.6.0 - Production |
| PRODUCT | VERSION | STATUS |
| NLSRTL | 11.1.0.6.0 | Production |
| Oracle Database 11g Enterprise Edition | 11.1.0.6.0 | 64bit Production |
| PL/SQL | 11.1.0.6.0 | Production |
| TNS for Solaris: | 11.1.0.6.0 | Production |
Espero que essa postagem ajude a outros profissionais.
Links consultados:
https://docs.oracle.com/cd/B28359_01/server.111/b28310/dba004.htm
http://jasonvogel.blogspot.com.br/2008/08/getting-current-oracle-version-sql.html
quarta-feira, 13 de julho de 2016
[Oracle] - Procedimento para resetar sequences
Bom Pessoal,
Essa é mais uma Postagem para ajudar em problemas do dia-a-dia, caso faça alguma restauração e os valores das "sequences" do banco estejam desatualizados, esse procedimento corrige a sequencia certa as "sequences" com base nos valores das tabelas informadas na base de dados. Segue abaixo, procedimento para efetuar está manutenção:
[Oracle] - Manutenção de Triggers Duplicadas
Bom Pessoal,
Vou compartilhar um procedimento para fazer a exclusão de triggers duplicadas que são utilizadas para entregar id´s para cada registro inserido na tabela, segue abaixo:
quarta-feira, 8 de junho de 2016
[MySQL] - Padronização de Desenvolvimento em Banco de dados
Documentação para Padronização de Desenvolvimento em Banco de dados:
Procedimento Armazenados: todo procedimento armazenado deverá inicia sua nomenclatura,seguindo o padrão abaixo:
Procedimento Armazenados: todo procedimento armazenado deverá inicia sua nomenclatura,seguindo o padrão abaixo:
PRC_
A Sigla de um procedimento será seguido de um verbo que irá informar qual o propósito do procedimento.
PRC_ATUALIZAR_
PRC_INSERIR_
PRC_EDITAR_
PRC_DELETAR_
PRC_EXTRAIR_
PRC_LOGAR_
PRC_UTIL_
Após informar o propósito do procedimento armazenado informe o nome da tabela ou informações que ele irá processar.
PRC_EXTRAIR_TBCIDADE
Funções: toda função deverá iniciar sua nomenclatura seguindo o padrão abaixo:
FNC_
A sigla de uma função será seguida da nomenclatura abaixo:
FNC_GET_
Será utilizada para retornar valores.
FNC_SET_
Será utilizador para informar valores.
FNC_IS_
Será para testar valores booleanos.
FNC_LOG_
Será para gravar valores históricos que necessitem de
retorno.
Tabelas: toda tabela deverá iniciar sua nomenclatura seguindo o padrão abaixo:
TB_
A Sigla de uma tabela deverá ser seguido do tipo de
informação que será armazenada em forma de substantivo ou verbo.
TB_CIDADE
TB_LOGUSUARIOS
Índices: todo índice deverá iniciar sua nomenclatura seguindo o padrão abaixo:
INDX_NomeDaTabela_ColunaDaTabela
Triggers(gatilhos): todo gatilho deverá iniciar sua nomenclatura seguindo o padrão abaixo:
TRG_AcaoDaTrigger_NomeDaTabela
TRG_DELETAR_TB_CIDADE ou TRG_DELETAR_CEP
Eventos(events): todo evento deverá iniciar sua nomenclatura seguindo o padrão abaixo:
EVT_AcaoDoEvento_NomeDaTabela ou EVT_ATUALIZAR_CEP
Visualizações(Views): toda visualização deverá iniciar sua nomenclatura seguindo o padrão abaixo:
VW_NomeSubstantivo_FiltroDaView ou VW_TBCIDADE_CEP
Link de documento para consulta:
sexta-feira, 13 de maio de 2016
[Jasper] - Habilitar Login de Senha Criptografada
Gerar KeyTool para Servidor do Jasper:
keytool -genkey -alias jasper -keyalg RSA -keysize 1024
-keypass jasper123 -keystore keystore.jks -storepass jasper123
1. Configure login encryption as described in the JasperReports Server Administrator Guide. Specify static key encryption by setting encryption.dynamic.key to false and configure the keystore as described.
1. Configure login encryption as described in the JasperReports Server Administrator Guide. Specify static key encryption by setting encryption.dynamic.key to false and configure the keystore as described.
2. Once the
server is restarted, log into the server to generate the static key.
3. Open the
following URL: http://example.com:8080/jasperserver/encrypt.html.
4. Enter the
password that you want to encrypt, for example joeuser, then click Encrypt. The
script on this page will use the public key to encrypt the password.
5. Paste the
encrypted password into the URL instead of the plain text password (log out of
the server to test this):
http://example.com:8080/jasperserver/flow.html?_flowId=homeFlow&j_userna...
6. Use the
URL with the encrypted password to share a report.
Diretório da Webapp Jasper Keystore:
C:\Jaspersoft\jasperreports-server-cp-5.6.1\apache-tomcat\webapps\jasperserver\WEB-INF\classes
C:\Jaspersoft\jasperreports-server-cp-5.6.1\apache-tomcat\webapps\jasperserver\WEB-INF\classes
Colocar o arquivo gerado pelo Keytool nesta pasta: keystore.jks
Diretório da Webapp Jasper Configuração:
C:\Jaspersoft\jasperreports-server-cp-5.6.1\apache-tomcat\webapps\jasperserver\WEB-INF\classes\esapi
Alterar o arquivo: security-config.properties
-- parâmetros alterados –
# Turns
encryption of encryption.param's defined below on or off.
encryption.on=true
#
ENCRYPTION CONFIGURATION
#
encryption.dynamic.key=true means that the 1 key will be generated per every
single request.
# If
'false', the key will be drawn from a keystore (see KEYSTORE group below)
encryption.dynamic.key=false
-------------------------------------------------------------------
# keystore.location
can be on a classpath or an external-to-webapp file
keystore.location=keystore.jks
# password
to verify keystore integrity
keystore.password=jasper123
# key pair
alias used to retrieve correct key from keystore
keystore.key.alias=jasper
# keystore.key.alias's
password
keystore.key.password=jasper123
-----------------------------------------------------------------------
http://community.jaspersoft.com/documentation/jasperreports-server-administration-guide/v550/encrypting-user-session-login
http://community.jaspersoft.com/documentation/jasperreports-server-ultimate-guide/v55/encrypting-passwords-urls
http://community.jaspersoft.com/documentation/jasperreports-server-ultimate-guide/v55/encrypting-passwords-urls
terça-feira, 10 de maio de 2016
[Oracle] - Informações de Data e Hora
Neste artigo estarei disponibilizando uma consulta para facilitar a utilização de informações de Data e Hora no Oracle database:
SELECT extract(YEAR FROM SYSDATE) AS ano,
extract(MONTH FROM SYSDATE) AS mes,
extract(DAY FROM SYSDATE) AS dia,
EXTRACT(HOUR FROM NUMTODSINTERVAL(SYSDATE - trunc(SYSDATE), 'DAY')) AS hora,
extract(minute FROM systimestamp) AS minuto,
trunc(extract(SECOND FROM systimestamp)) AS segundo,
SYSDATE AS data_hora
FROM dual;
Espero que essa dica, ajudem outros profissionais que trabalham com Oracle, facilitando o dia-a-dia.
Graças e Paz sejam com Todos.
segunda-feira, 16 de novembro de 2015
[Oracle] - Função para Retornar partes de um texto(string)
Bom pessoal, vou compartilhar uma função que retorna valores por parte de um texto especifico que estou utilizando, facilitando a utilização de particionamento de texto utilizando um carácter como ponto de particionamento:
CREATE OR REPLACE FUNCTION STRIPART(iTEXT VARCHAR2,
iCARA CHAR,
iINIC INTEGER,
iFINA INTEGER,
iTUDO INTEGER DEFAULT 1) RETURN VARCHAR2 AS
vTEXT VARCHAR2(500) := iTEXT;
vINIC INTEGER := 0;
vFINA INTEGER := 0;
BEGIN
IF iINIC = 0
THEN
-- SE FOR ZERO É INICIO DE STRING SEMPRE
vINIC := 1;
ELSE
-- PEGA A POSIÇÃO DO CARACTER iCARA
vINIC := INSTR(iTEXT, iCARA, 1, iINIC) + 1;
END IF;
IF INSTR(iTEXT, iCARA, 1, iFINA) = 0
THEN
-- SE NAO ENCONTRAR O CARACTER FINAL PEGA TODA A STRING
IF iTUDO = 1
THEN
vFINA := LENGTH(iTEXT);
ELSE
vFINA := 0;
END IF;
ELSE
vFINA := INSTR(iTEXT, iCARA, 1, iFINA) - vINIC;
END IF;
vTEXT := SUBSTR(vTEXT, vINIC, vFINA);
RETURN vTEXT;
END;
quarta-feira, 4 de novembro de 2015
[Oracle] - Função para Remover caracteres especiais em Textos
Bom pessoal, a função abaixo remover caracteres especiais em textos no Oracle, facilitando o tratamento de dados do tipo texto, auxiliando em consultas e criação de índices.
CREATE OR REPLACE FUNCTION NORMALIZAR(str_in VARCHAR2) RETURN VARCHAR2 IS
pos NUMBER(10);
chars_special VARCHAR2(255);
chars_normal VARCHAR2(255);
str VARCHAR2(255) := UPPER(str_in);
BEGIN
chars_special := 'ÁÀÃÂÉÊÍÓÔÕÚÜÇ.-';
chars_normal := 'AAAAEEIOOOUUC ';
str := TRIM(upper(str));
pos := length(chars_normal);
WHILE pos > 0
LOOP
str := REPLACE(str,
substr(chars_special, pos, 1),
substr(chars_normal, pos, 1));
pos := pos - 1;
END LOOP;
str := TRIM(str);
WHILE regexp_like(str, ' {2,}')
LOOP
str := REPLACE(str, ' ', ' ');
END LOOP;
pos := length(str);
WHILE pos > 0
LOOP
IF regexp_like(substr(str, pos, 1), '[^A-Z0-9Ç@._ +-]+')
THEN
str := concat(substr(str, 1, pos - 1), substr(str, pos + 1));
END IF;
pos := pos - 1;
END LOOP;
RETURN str;
END;
/
CREATE OR REPLACE FUNCTION NORMALIZAR(str_in VARCHAR2) RETURN VARCHAR2 IS
pos NUMBER(10);
chars_special VARCHAR2(255);
chars_normal VARCHAR2(255);
str VARCHAR2(255) := UPPER(str_in);
BEGIN
chars_special := 'ÁÀÃÂÉÊÍÓÔÕÚÜÇ.-';
chars_normal := 'AAAAEEIOOOUUC ';
str := TRIM(upper(str));
pos := length(chars_normal);
WHILE pos > 0
LOOP
str := REPLACE(str,
substr(chars_special, pos, 1),
substr(chars_normal, pos, 1));
pos := pos - 1;
END LOOP;
str := TRIM(str);
WHILE regexp_like(str, ' {2,}')
LOOP
str := REPLACE(str, ' ', ' ');
END LOOP;
pos := length(str);
WHILE pos > 0
LOOP
IF regexp_like(substr(str, pos, 1), '[^A-Z0-9Ç@._ +-]+')
THEN
str := concat(substr(str, 1, pos - 1), substr(str, pos + 1));
END IF;
pos := pos - 1;
END LOOP;
RETURN str;
END;
/
[Oracle] - Trabalhando com Listas Dinâmicas
Bom pessoal, vou informar abaixo a implementação de criação e utilização de listas dinâmicas no Oracle, validas para versões 10g, 11g e 12c.
CREATE OR REPLACE TYPE t_id IS TABLE OF VARCHAR2(32000);
/
CREATE OR REPLACE
FUNCTION fnc_gera_lista(lista VARCHAR2,
delimitador VARCHAR2) RETURN t_id IS
v_id t_id;
BEGIN
SELECT regexp_substr(REPLACE(lista, delimitador, ','),
'[^,]+',
1,
LEVEL) AS lista
BULK COLLECT
INTO v_id
FROM dual
CONNECT BY regexp_substr(REPLACE(lista, delimitador, ','),
'[^,]+',
1,
LEVEL) IS NOT NULL;
RETURN v_id;
END;
/
----------------------------------------------
--- EXEMPLO DE UTILIZAÇÃO: ---
-- LISTA DE DADOS NUMÉRICOS --
SELECT TO_NUMBER(COLUMN_VALUE) AS LISTA
FROM TABLE(FNC_GERA_LISTA('22;19;30;35;40;60;71;92;', ';'));
-- LISTA DE DADOS ALPHANUMÉRICOS --
SELECT TO_CHAR(COLUMN_VALUE) AS LISTA
FROM TABLE(FNC_GERA_LISTA('a;B;C;d;E;F;g;H;', ';'));
-- LISTA DE DADOS ALPHANUMÉRICOS(DATAS) --
SELECT TO_CHAR(TO_DATE(COLUMN_VALUE ,'DD/MM/YYYY'), 'DD/MM/YYYY') AS LISTA
FROM TABLE(FNC_GERA_LISTA('15/01/2011;11/12/2010;10/10/1999;16/08/1998;01/10/2003;12/12/2012;10/10/2010;11/11/2011;',
';'));
terça-feira, 29 de setembro de 2015
[Oracle] - Formatação de Data para Sistemas e Geração de Senhas
Bom pessoal, segue abaixo consulta para formatação de dados para visualização em front-ends e um gerador de senhas para oracle:
-- Oracle – Exibição data do sistema no formato extenso
-- exemplo 1
SELECT TO_CHAR(SYSDATE, 'FMDay, DD" de "Month" de "YYYY') AS data_formatada
FROM dual;
-- exemplo 2
SELECT TO_CHAR(SYSDATE, 'FMDay, DD Month, YYYY') AS data_formatada
FROM dual;
-- Geraçao de senha aleatória no Oracle
-- exemplo 1
SELECT dbms_random.string('U', 2) || trunc(dbms_random.value(1000, 9999)) gera_senha
FROM dual;
[Jasper] - Auditoria no Rodapé do Relatórios
Bom pessoal, segue um exemplo de auditoria no rodapé dos relatórios desenvolvidos em Jasper Report.
Código:
"Usuário: "+ (($P{usuario} == null) ? "JASPER" : ($P{usuario}.length() > 30 ? $P{usuario}.substring(0,30) : $P{usuario} ) )+
" Data: "+new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime())+
" Hora: "+new SimpleDateFormat("HH:mm:ss").format(new Date().getTime())+
" Página: "+$V{PAGE_NUMBER}
segunda-feira, 28 de setembro de 2015
[Jasper] - Métodos de Autenticação no JasperServer
Bom pessoal, segue abaixo alguns métodos de autenticação no JasperServer para consulta:
-- Métodos de Autenticação no JasperServer --
-- PRIMEIRO MODELO ---
<html>
<body onload="document.createElement('form').submit.call(document.getElementById('myForm'))">
<form id="myForm" name="myForm" action="http://192.168.1.100:8080/jasperserver/j_spring_security_check" method="POST">
<input type="hidden" name="j_username" value="jasperadmin">
<input type="hidden" name="j_password_pseudo" value="jasperadmin">
<input type="hidden" name="j_password" value="jasperadmin">
<input type="hidden" name="userLocale" value="pt_BR">
<input type=hidden name="submit" id="submit" value="Continue"/>
</form>
</body>
</html>
-- SEGUNDO MODELO ---
<div style="display:none;">
<iframe id="myform_frame" name="myform_frame"></iframe>
<form id="myform" method="POST" action="http://192.168.1.100:8080/jasperserver/j_spring_security_check" target="myform_frame">
<input type="hidden" name="j_username" value="jasperadmin">
<input type="hidden" name="j_password_pseudo" value="jasperadmin">
<input type="hidden" name="j_password" value="jasperadmin">
<input type="hidden" name="userLocale" value="pt_BR">
</form>
<script>document.getElementById("myform").submit();</script>
</div>
-- TERCEIRO MODELO ---
<div style="display:none;">
<iframe id="myform_frame" name="myform_frame"></iframe>
<body onload="document.createElement('form').submit.call(document.getElementById('myform'))">
<form id="myform" method="POST" action="http://192.168.2.157:8080/jasperserver/rest/login" target="myform_frame">
<input type="hidden" name="j_username" value="jasperadmin">
<input type="hidden" name="j_password" value="jasperadmin">
</form>
</body>
</div>
sexta-feira, 18 de setembro de 2015
Gerenciando VMs no Hyper-V com PowerShell
Outro grande avanço do Windows Server 2012 foi trazer nativamente comandos PowerShell para o Hyper-V. No Windows Server 2008 R2 é possível gerenciar o servidor através de um módulo baixado do Codeplex: http://pshyperv.codeplex.com/
Neste post será mostrado como fazer o gerenciamento básico de uma VM em um servidor com Hyper-V (Windows Server 2012):
Para verificar informações básicas do host como memória e processadores lógicos basta digitar no PowerShell:
Get-vmhost
Para ver informações mais detalhadas:
get-vmhost | fl
Para verificar se já existem VMs rodando no host:
Get-VM
Bom, o primeiro passo é verificar os adaptadores de rede para criar os switches virtuais.
Para verificar os adaptadores presentes no host digitar:
Get-NetAdapter
Para verificar se existe algum Virtual Switch criado, basta digitar:
Get-VMSwitch
Definido o adaptador e o tipo de switch virtual, basta criar com o comando a seguir: (Será criado um Switch chamado Public_Network utilizando a placa de rede chamada Ethernet, onde estará habilitado o gerenciamento do host e será do tipo externo):
New-VMSwitch –Name “Public_Network” –NetAdapterName “Ethernet” –AllowManagementOS $true
Para criar um switch virtual privado chamado VMSwPr1 poderia ser usado o seguinte comando:
New-VMSwitch –Name “VMSwPr1” –switchtype Private
Para criar uma VM nova o comando simples é:
New-VM
Com o comando acima será criada uma VM nova, com 512 MB de memória fixa, um processador virtual, sem um VHDx atribuído utilizando as pastas padrões do Hyper-V. Seu nome será New Virtual Machine Para saber a pasta padrão onde está sendo criada a VM basta digitar:
Get-VMHost | select VirtualMachinePath, VirtualHardDiskPath
Se foi utilizado o comando acima para criar a VM, para visualizar as configurações basta digitar:
Get-vm -Name new* | fl *
Se a ideia é criar uma VM do zero com configurações específicas e em pastas específicas vamos usar o mesmo comando, só que com parâmetros:
New-VM -Name VMT01 -MemoryStartupBytes 1GB -Path d:\vms –NewVHDPath d:\vms\VMT01\VMT01.vhdx -NewVHDSizeBytes 60GB -SwitchName Public_Network
Com o comando acima foi Criada uma nova VM chamada VMT01, com 1 processador virtual (padrão) e memória fixa de 1 GB. Ainda foi configurado um Adaptador de Rede utilizando o Virtual Switch Public_Network. Foi criado um VHDx novo de 60 GB (mas é dinâmico – até 60 GB) na pasta D:\VMs\VMT01\ chamado VMT01 e o caminho da VM foi colocado como D:\VMs. (A VM cria uma pasta com o próprio nome. Quando a VM é criada seu status é desligada.
Nesse momento é interessante verificar o status dessa nova VM criada:
Get-Vm -Name VMT01 | fl *
Criada a VM ainda existem alguns comandos interessantes. Para essa VM, antes de iniciar, vamos fazer as seguintes alterações:
Mudar de 1 processador virtual para 2:
Get-VM VMT01 | Set-VMProcessor -count 2
Mudar de 1 GB de Memória Fixa para memória dinâmica entre 512 MB e 2 GB sendo 1 GB de inicialização;
Get-VM VMT01 | Set-VMmemory –DynamicMemoryEnabled $true –MaximumBytes 2GB –MinimumBytes 512MB –StartupBytes 1GB
Adicionar a ISO do Windows Server 2012 para a instalação do Windows;
Set-VMDvdDrive -vmname VMT01 -Path ‘D:\ISO\Windows Server 2012\Windows_Server_2012_Datacenter_VL.ISO’
Uma vez feita as alterações a VM está pronta para ser inicializada:
Get-VM VMT01 | Start-VM
Pronto a VM está rodando, pronta para ser utilizada.
Agora vamos supor que nós vamos criar mais um VHDx, chamado VMT01_D2 de 20 GB dinâmico na mesma pasta:
New-VHD -path d:\vms\VMT01\VMT01_D2.vhdx -SizeBytes 20GB
Sò que o VHDx criado acima deveria ser fixo. Para transformar de dinâmico para Fixo podemos usar:
Convert-VHD -path d:\vms\VMT01\VMT01_D2.vhdx –DestinationPath “d:\vms\VMT01\VMT01_D3.vhdx” –VHDtype Fixed
E que tal adicionar esse VHDx na VM criada com ela ligada:
Add-VMHardDiskDrive –Vmname VMT01 –ControllerType SCSI –ControllerNumber 0 –Path d:\vms\VMT01\VMT01_D3.vhdx
Para finalizar os comandos básicos:
Desligar a VM:
Get-VM VMT01 | Stop-VM
Para Suspender a VM:
Get-VM VMT01 | Suspend-VM
Reinicia a VM com Shutdown do SO:
Get-VM VMT01 | Restart-VM
Para Verificar os Snapshots da VM:
Get-VM VMT01 | Get-VMSnapshot
Para criar um Snapshot da VM:
Get-VM VMT01 | Checkpoint-VM
Para renomear um Snapshot:
Get-VM VMT01 | Rename-VMSnapshot –name “VMT01 – (6/18/2013 – 4:39:44 PM)” –newname SNAP1
Para voltar o Snapshot de uma VM:
Get-VM VMT01 | Restore-VMSnapshot –name SNAP1
Para Deletar um Snapshot:
Get-VM VMT01 | Remove-VMSnapshot –name SNAP1
Todos os comando podem ser encontrados em:
http://technet.microsoft.com/en-us/library/hh848559(v=wps.620).aspx
Get-vmhost
Para ver informações mais detalhadas:
get-vmhost | fl
Para verificar se já existem VMs rodando no host:
Get-VM
Bom, o primeiro passo é verificar os adaptadores de rede para criar os switches virtuais.
Para verificar os adaptadores presentes no host digitar:
Get-NetAdapter
Para verificar se existe algum Virtual Switch criado, basta digitar:
Get-VMSwitch
Definido o adaptador e o tipo de switch virtual, basta criar com o comando a seguir: (Será criado um Switch chamado Public_Network utilizando a placa de rede chamada Ethernet, onde estará habilitado o gerenciamento do host e será do tipo externo):
New-VMSwitch –Name “Public_Network” –NetAdapterName “Ethernet” –AllowManagementOS $true
Para criar um switch virtual privado chamado VMSwPr1 poderia ser usado o seguinte comando:
New-VMSwitch –Name “VMSwPr1” –switchtype Private
Para criar uma VM nova o comando simples é:
New-VM
Com o comando acima será criada uma VM nova, com 512 MB de memória fixa, um processador virtual, sem um VHDx atribuído utilizando as pastas padrões do Hyper-V. Seu nome será New Virtual Machine Para saber a pasta padrão onde está sendo criada a VM basta digitar:
Get-VMHost | select VirtualMachinePath, VirtualHardDiskPath
Se foi utilizado o comando acima para criar a VM, para visualizar as configurações basta digitar:
Get-vm -Name new* | fl *
Se a ideia é criar uma VM do zero com configurações específicas e em pastas específicas vamos usar o mesmo comando, só que com parâmetros:
New-VM -Name VMT01 -MemoryStartupBytes 1GB -Path d:\vms –NewVHDPath d:\vms\VMT01\VMT01.vhdx -NewVHDSizeBytes 60GB -SwitchName Public_Network
Com o comando acima foi Criada uma nova VM chamada VMT01, com 1 processador virtual (padrão) e memória fixa de 1 GB. Ainda foi configurado um Adaptador de Rede utilizando o Virtual Switch Public_Network. Foi criado um VHDx novo de 60 GB (mas é dinâmico – até 60 GB) na pasta D:\VMs\VMT01\ chamado VMT01 e o caminho da VM foi colocado como D:\VMs. (A VM cria uma pasta com o próprio nome. Quando a VM é criada seu status é desligada.
Nesse momento é interessante verificar o status dessa nova VM criada:
Get-Vm -Name VMT01 | fl *
Criada a VM ainda existem alguns comandos interessantes. Para essa VM, antes de iniciar, vamos fazer as seguintes alterações:
Mudar de 1 processador virtual para 2:
Get-VM VMT01 | Set-VMProcessor -count 2
Mudar de 1 GB de Memória Fixa para memória dinâmica entre 512 MB e 2 GB sendo 1 GB de inicialização;
Get-VM VMT01 | Set-VMmemory –DynamicMemoryEnabled $true –MaximumBytes 2GB –MinimumBytes 512MB –StartupBytes 1GB
Adicionar a ISO do Windows Server 2012 para a instalação do Windows;
Set-VMDvdDrive -vmname VMT01 -Path ‘D:\ISO\Windows Server 2012\Windows_Server_2012_Datacenter_VL.ISO’
Uma vez feita as alterações a VM está pronta para ser inicializada:
Get-VM VMT01 | Start-VM
Pronto a VM está rodando, pronta para ser utilizada.
Agora vamos supor que nós vamos criar mais um VHDx, chamado VMT01_D2 de 20 GB dinâmico na mesma pasta:
New-VHD -path d:\vms\VMT01\VMT01_D2.vhdx -SizeBytes 20GB
Sò que o VHDx criado acima deveria ser fixo. Para transformar de dinâmico para Fixo podemos usar:
Convert-VHD -path d:\vms\VMT01\VMT01_D2.vhdx –DestinationPath “d:\vms\VMT01\VMT01_D3.vhdx” –VHDtype Fixed
E que tal adicionar esse VHDx na VM criada com ela ligada:
Add-VMHardDiskDrive –Vmname VMT01 –ControllerType SCSI –ControllerNumber 0 –Path d:\vms\VMT01\VMT01_D3.vhdx
Para finalizar os comandos básicos:
Desligar a VM:
Get-VM VMT01 | Stop-VM
Para Suspender a VM:
Get-VM VMT01 | Suspend-VM
Reinicia a VM com Shutdown do SO:
Get-VM VMT01 | Restart-VM
Para Verificar os Snapshots da VM:
Get-VM VMT01 | Get-VMSnapshot
Para criar um Snapshot da VM:
Get-VM VMT01 | Checkpoint-VM
Para renomear um Snapshot:
Get-VM VMT01 | Rename-VMSnapshot –name “VMT01 – (6/18/2013 – 4:39:44 PM)” –newname SNAP1
Para voltar o Snapshot de uma VM:
Get-VM VMT01 | Restore-VMSnapshot –name SNAP1
Para Deletar um Snapshot:
Get-VM VMT01 | Remove-VMSnapshot –name SNAP1
Todos os comando podem ser encontrados em:
http://technet.microsoft.com/en-us/library/hh848559(v=wps.620).aspx
Espero que este post possa ser útil no gerenciamento do seu ambiente Hyper-V 3.0.
Até a próxima!!!
terça-feira, 30 de junho de 2015
[PostgreSQL] - Listando as 10 maiores tabelas no PostgreSQL
Para listar as maiores tabelas do seu banco de dados, utilize a consulta abaixo:
|
[PostgreSQL] - Tamanho das tabelas no PostgreSQL
Em muitos casos é preciso saber o espaço em que as tabelas do banco de dados estão utilizando em disco, para fins de monitoramento e decisão de estruturação de banco. Para tal tarefa no PostgreSQL o comando abaixo resolve o problema.
SELECT esquema, tabela,
pg_size_pretty(pg_relation_size(esq_tab)) AS tamanho,
pg_size_pretty(pg_total_relation_size(esq_tab)) AS tamanho_total
FROM (SELECT tablename AS tabela,
schemaname AS esquema,
schemaname||'.'||tablename AS esq_tab
FROM pg_catalog.pg_tables
WHERE schemaname NOT
IN ('pg_catalog', 'information_schema', 'pg_toast') ) AS x
ORDER BY pg_total_relation_size(esq_tab) DESC;
a coluna tamanho mostra o tamanho que os registros (tuplas) da tabela está ocupando no disco, e a coluna tamanho_total inclui também os TOASTs e os índices associados à tabela.
Com essa consulta, é possível inclusive montar scripts (em shellscript, perl, python, groovy, etc..) de monitoramento do banco, por exemplo: caso a tabela tal, ou a soma de todas as tabelas chegar a X Mb, envie um email de alerta. Outra utilização seria de geração de indicadores para análise de tendência da expansão do banco.
Fonte: https://arezi.wordpress.com/2008/04/03/tamanho-das-tabelas-no-postgresql/
quarta-feira, 24 de junho de 2015
[Jasper] - Declaração de Lista e Variáveis dinâmicas e condicionais
É algo simples, mais facilita no dia-a-dia no desenvolvimento de relatórios no Jasper Report:
Lista dinâmica:
$X{IN, CO.GRUPOCALCID , grupocalculo} -- declarar a variável como lista
Variável dinâmica:
$P!{grupocalculo} -- variável dinâmica no jasper
Utilizando Variável condicional no Jasper:
(($P{ordenacao}.toString() == "A") ? "ALFABÉTICA" : "NUMÉRICA" )
quinta-feira, 11 de junho de 2015
[Linux] - Remover arquivos depois de X dias
Remover arquivo depois de 30 dias:
# find /path_to_file/ * -mtime +30 -exec rm {} \;
Remover arquivo depois de 7 dias:
# find /path_to_file/ * -mtime +7 -exec rm {} \;
Remover arquivo especifico depois de 7 dias:
# find *.xml -mtime +7 -exec rm {} \;
# perl -e 'for(<*>){((stat)[9]<(unlink))}'
Segunda Opção:
# find . -maxdepth 1 -type f -delete
Assinar:
Postagens (Atom)








