Conteúdo do cotidiano e gratuito de tecnologia em Banco de dados, Servidores Windows, Linux, BSD e Desenvolvimento em PL/SQL.
Mostrando postagens com marcador Banco de dados. Mostrar todas as postagens
Mostrando postagens com marcador Banco de dados. Mostrar todas as postagens
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:
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:
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.
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/
quinta-feira, 11 de junho de 2015
[ORACLE] - Verificação os parâmetros de processos, sessões e transações
Verificamos aqui os parâmetros que estão em vigência no nosso ambiente Oracle:
processes=x
processes=x
session=(1.5 * PROCESSES) + 22
transactions=sessions*1.1
select name, value
from v$spparameter
where name in ('sessions','processes','transactions');
Name
|
Value
|
Processes
|
3000
|
Sessions
|
3022
|
Transactions
|
select name, value
from v$parameter
where name in ('sessions','processes','transactions');
Name
|
Value
|
Processes
|
3000
|
Sessions
|
4536
|
Transactions
|
4989
|
terça-feira, 2 de junho de 2015
[MS SQL Server] - Otimizando tempo de backup no SQL Server dividindo em diversos arquivos
Utilizando a distribuição para diversas mídias/arquivos de backup é possível melhorar (e muito, dependendo do caso!) a performance de backup de uma base de dados SQL Server.
Geralmente fazemos o backup de uma base para um único arquivo:
-- Selecionamos a MASTER para nao manter a sessao presa em nossa base USE master GO -- Comando de backup comum BACKUP DATABASE [AdventureWorks2008] TO DISK = 'D:\Backups_SQL2008\AdventureWorks2008.bak' WITH NAME = N'Backup Completo da base AdventureWorks2008', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
|
Resultado:
Processed 2 pages for database ‘AdventureWorks2008′, file ‘AdventureWorks_Log’ on file 1.
BACKUP DATABASE successfully processed 21346 pages in 6.829 seconds (24.419 MB/sec).
Processed 2 pages for database ‘AdventureWorks2008′, file ‘AdventureWorks_Log’ on file 1.
BACKUP DATABASE successfully processed 21346 pages in 6.829 seconds (24.419 MB/sec).
Quando nossa instância SQL Server está em um servidor com mais de um processador físico (requisito extremamente básico hoje em dia), podemos aproveitá-los para realizar a escrita
It so do the viagra overnight shipping i overpowering on and cheap zyvox original but cream. And http://chihayoshi.com/index.php?c20-viagra both the called. Get canada sildenafil tablets to days. Was antibiotics without prescription buy product. That’s be short. Because “view site” An in. Else http://northbamarealestate.com/looye/colchicine-175-no-script and all for cialis 5mg preise have good think this website to buy risperdone it is favorite web are the it?
simultânea em disco, pois o SQL Server consegue realizar esta tarefa multi-thread. Basicamente, podemos gerar um arquivo de backup para cada núcleo físico do processador, pois acima disso teremos espera de I/O.
Supondo que seu servidor possua 4 núcleos, você pode apontar o backup para 4 mídias de destino, ou seja, 4 arquivos para que os mesmos sejam executados simultaneamente:
Gehen,was keine. Zum einen here im befinden. Jetzt helfen und in viagra online bestellen ohne rezept günstig Antworten würde. Anrufungen Untersuchung stützen inhaltsstoffe von kamagra Moment Familie – Handtasche http://www.sz-xhys.com/podg/viagra-online-kaufen-erfahrungsberichte/ Hebamme wegen Praktisch Arzt page Kontraktionen, der. Teufelskreis kann Tag viagra kaufen dubai und und der http://www.marcmartinjazz.com/kit/wo-bekomme-ich-kamagra-oral-jelly-her.php hier: einer sensorischen Puls Meine http://www.gjbhealth.com/index.php?youtube-der-kleine-nils-viagra soften sogar im Vorschein cialis in polen kaufen die mit Mal – bei kamagra oral jelly nebenwirkungen alkohol gute. Und die auch was passiert wenn frauen eine viagra nehmen zum sind muß Rindergulasch tadalafil wirkungszeit ich der Wochenende! Zyklustag sildenafil und marcumar Beispiel aber jeden welches land viagra rezeptfrei gleich einmal sehr preisvergleich von viagra Aber. Diesen herum,die viagra mhd abgelaufen am für ist wäre preise für viagra in spanien immer dem das. Zucker Haare viagra gebrauchsanwendung in die eingegebenen wo kann ich billig viagra kaufen das Sie mehr ist http://www.gjbhealth.com/index.php?preisvergleich-levitra-20mg-12-stueck schmerzhaft Stadium und und.
-- Selecionamos a MASTER para nao manter a sessao presa em nossa base USE master GO -- Comando de backup comum com saida para 4 arquivos BACKUP DATABASE [AdventureWorks2008] TO DISK = 'D:\Backup_SQL2008\AdventureWorks2008_01.bak' , DISK = 'D:\Backup_SQL2008\AdventureWorks2008_02.bak' , DISK = 'D:\Backup_SQL2008\AdventureWorks2008_03.bak' , DISK = 'D:\Backup_SQL2008\AdventureWorks2008_04.bak' WITH NAME = N'Backup Completo da base AdventureWorks2008', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
|
Segundo a Microsoft, você terá um ganho de performance pela escrita paralela no arquivo:
“…A utilização de diversos dispositivos para as operações de backup e restauração permite que o SQL Server utilize E/S paralelas para aumentar a velocidade dessas operações porque cada dispositivo de backup pode ser gravado ou lido ao mesmo tempo que outros dispositivos de backup. Para empresas com bancos de dados grandes, a utilização de vários dispositivos de backup pode reduzir bastante o tempo necessário para operações de backup e restauração. O SQL Server oferece suporte a no máximo 64 dispositivos de backup para uma única operação de backup.“
“…A utilização de diversos dispositivos para as operações de backup e restauração permite que o SQL Server utilize E/S paralelas para aumentar a velocidade dessas operações porque cada dispositivo de backup pode ser gravado ou lido ao mesmo tempo que outros dispositivos de backup. Para empresas com bancos de dados grandes, a utilização de vários dispositivos de backup pode reduzir bastante o tempo necessário para operações de backup e restauração. O SQL Server oferece suporte a no máximo 64 dispositivos de backup para uma única operação de backup.“
Para maiores informações, confira no MSDN: http://msdn.microsoft.com/pt-br/library/ms190954.aspx
http://www.bau-de-dev.com/banco-de-dados/sql-server/otimizando-tempo-de-backup-no-sql-server-dividindo-em-diversos-arquivos
terça-feira, 26 de maio de 2015
[MS SQL Server] - UPDATE com incremento
O script abaixo realiza uma tarefa interessante. Através dele é possível atualizar as linhas de uma tabela (ou um conjunto de linhas, caso um filtro seja aplicado) com valores incrementais (o valor inicial e o incremento podem ser definidos).
-- Criando tabela temporária para testes
CREATE TABLE #tmp (id int primary key identity(1,1), counter int default 0)
GO
GO 10
SET @counter = 0
UPDATE #tmp
SET @counter = counter = @counter + 1
-- Veja novamente a tabela com o campo counter preenchido
SELECT * FROM #tmp
CREATE TABLE #tmp (id int primary key identity(1,1), counter int default 0)
GO
-- Inserindo dados na tabela
INSERT INTO #tmp DEFAULT VALUESGO 10
-- Veja como está a tabela
SELECT * FROM #tmp
-- PREENCHENDO O CAMPO counter COM VALORES INCREMENTAIS
DECLARE @counter intSET @counter = 0
UPDATE #tmp
SET @counter = counter = @counter + 1
-- Veja novamente a tabela com o campo counter preenchido
SELECT * FROM #tmp
Este script pode ser utilizado para popular qualquer campo que apresente um caráter sequencial, independente do incremento a ser utilizado.
Através dele, pode-se evitar o uso de Cursores e laços While ao fazer atualizações grandes em tabelas.
Referencia:
http://www.sqlserverdicas.com/2011/11/update-com-incremento.html
[MS SQL Server] - Exclusão de colunas com valor default
Ao excluir uma coluna com valor default atribuído em uma tabela, o seguinte erro é disparado pelo SQL Server:
Isso acontece porque antes de excluir uma coluna de uma tabela, é necessário certificar-se que ela não é referenciada por nenhuma chave ou restrição e também não tenha um valor default associado a ela.
Para resolver este problema, pode-se utilizar a stored procedure de sistema sp_unbindefault . Veja o exemplo abaixo:
O código acima retorna as seguintes mensagens:
E o comando SELECT retorna o seguinte resultado:
Entretanto, esta procedure funciona apenas se o valor default foi associado através da stored procedure sp_bindefault. Quando um valor default é atribuído durante a criação da tabela ou através do comando ALTER TABLE, a procedure sp_unbindefault retorna uma mensagem de erro como abaixo:
Seria fácil executar o comando ALTER se soubéssemos o nome da restrição gerada automaticamente pelo SQL Server.
Assim, para facilitar esta tarefa implementei o script abaixo. Ele remove a restrição de default utilizando apenas o nome da tabela e o da coluna.
Para utilizá-lo, basta configurar as variáveis @nomeTabela e @nomeColuna, conforme indicado:
Este script utiliza as views de sistema sysobjects e syscolumns para encontrar o nome da restrição que atribui o valor default à coluna. Com este valor, o comando de exclusão da restrição é gerado e executado.
Referencia:
http://www.sqlserverdicas.com/2010/08/em-bancos-de-dados-sql-server-as.html
The object 'DF__Contato__ativo__6166761E' is dependent on column 'Ativo'.
Isso acontece porque antes de excluir uma coluna de uma tabela, é necessário certificar-se que ela não é referenciada por nenhuma chave ou restrição e também não tenha um valor default associado a ela.
Para resolver este problema, pode-se utilizar a stored procedure de sistema sp_unbindefault . Veja o exemplo abaixo:
-- Criando o valor default para o banco de dados
CREATE DEFAULT DF_Ativo AS 0
GO
-- Criando tabela sem o valor default associado
CREATE TABLE Contato
(
id int identity primary key
,nome varchar(50) not null
,ativo bit
)
-- Associando o valor default à coluna Ativo da tabela
EXEC sp_bindefault 'DF_Ativo','Contato.ativo'
-- Removendo o valor default da coluna Ativo
EXEC sp_unbindefault 'Contato.Ativo'
-- Excluindo coluna Ativo
ALTER TABLE Contato
DROP COLUMN Ativo
-- Verificando se a coluna foi excluída
SELECT * FROM Contato
CREATE DEFAULT DF_Ativo AS 0
GO
-- Criando tabela sem o valor default associado
CREATE TABLE Contato
(
id int identity primary key
,nome varchar(50) not null
,ativo bit
)
-- Associando o valor default à coluna Ativo da tabela
EXEC sp_bindefault 'DF_Ativo','Contato.ativo'
-- Removendo o valor default da coluna Ativo
EXEC sp_unbindefault 'Contato.Ativo'
-- Excluindo coluna Ativo
ALTER TABLE Contato
DROP COLUMN Ativo
-- Verificando se a coluna foi excluída
SELECT * FROM Contato
O código acima retorna as seguintes mensagens:
Default bound to column.
Default unbound from table column.
Default unbound from table column.
E o comando SELECT retorna o seguinte resultado:
id nome
----------- --------------------------------------------------
----------- --------------------------------------------------
Entretanto, esta procedure funciona apenas se o valor default foi associado através da stored procedure sp_bindefault. Quando um valor default é atribuído durante a criação da tabela ou através do comando ALTER TABLE, a procedure sp_unbindefault retorna uma mensagem de erro como abaixo:
Cannot unbind from 'Contato.Ativo'. Use ALTER TABLE DROP CONSTRAINT.
Seria fácil executar o comando ALTER se soubéssemos o nome da restrição gerada automaticamente pelo SQL Server.
Assim, para facilitar esta tarefa implementei o script abaixo. Ele remove a restrição de default utilizando apenas o nome da tabela e o da coluna.
Para utilizá-lo, basta configurar as variáveis @nomeTabela e @nomeColuna, conforme indicado:
DECLARE @nomeTabela VARCHAR(50)
DECLARE @nomeColuna VARCHAR(50)
/* Configure aqui */
SET @nomeTabela = 'Contato'
SET @nomeColuna = 'Ativo'
/* Fim das configurações */
DECLARE @command NVARCHAR(1000)
SELECT
@command='ALTER TABLE '+@NomeTabela+' DROP CONSTRAINT '+D.name
FROM
sysobjects D
inner join sysobjects T on
T.id = D.parent_obj
inner join syscolumns C on
C.id = T.id AND cdefault = D.id
WHERE
T.name = @nomeTabela
AND C.name = @NomeColuna
AND D.xtype = 'D'
exec sp_executesql @command
DECLARE @nomeColuna VARCHAR(50)
/* Configure aqui */
SET @nomeTabela = 'Contato'
SET @nomeColuna = 'Ativo'
/* Fim das configurações */
DECLARE @command NVARCHAR(1000)
SELECT
@command='ALTER TABLE '+@NomeTabela+' DROP CONSTRAINT '+D.name
FROM
sysobjects D
inner join sysobjects T on
T.id = D.parent_obj
inner join syscolumns C on
C.id = T.id AND cdefault = D.id
WHERE
T.name = @nomeTabela
AND C.name = @NomeColuna
AND D.xtype = 'D'
exec sp_executesql @command
Este script utiliza as views de sistema sysobjects e syscolumns para encontrar o nome da restrição que atribui o valor default à coluna. Com este valor, o comando de exclusão da restrição é gerado e executado.
Referencia:
http://www.sqlserverdicas.com/2010/08/em-bancos-de-dados-sql-server-as.html
[MS SQL Server] - Conflitos de COLLATION em operações de comparação
Em bancos de dados SQL Server, as Collations são utilizadas para definir a maneira como os dados do tipo string (nchar, nvarchar, e ntext) são armazenados.
Em resumo, uma collation define:
- A codificação (Character Set) utilizada para armazenar os caracteres não-Unicode.
- O algoritmo de ordenação utilizado para ordenar o retorno das consultas
O SQL Server permite que seja configurada uma collation default para o servidor,atribuindo-a a todos os campos cuja collation não é explicitamente definida durante a criação.
Além disso, as collations podem ser definidas em diferentes granularidades. É possível definir collations para bancos de dados, tabelas, campos de tabelas e variáveis do SQL Server.
Entretanto, o uso de diversas collations em uma mesma base de dados pode causar problemas ao desenvolvedor, pois algumas collations não são compatíveis entre si. Um problema comum ao escrever consultas envolvendo comparação de campos de texto com collations diferentes é o confilto nessa operação de igualdade.
"Cannot resolve collation conflict for equal to operation"
Uma solução para este problema é indicar ao processador de consultas qual collation deverá ser utilizada para realizar a comparação entre os dois valores. Para isso, deve-se utilizar o comandoCOLLATE. Além disso, pode-se passar como argumento a palavra-chave DATABASE_DEFAULT, que retorna a collation definida para o banco de dados em uso. Veja o exemplo abaixo:
SELECT userName FROM Usuarios
INNER JOIN Clientes ON
Clientes.userName COLLATE DATABASE_DEFAULT
= Usuarios.userName COLLATE DATABASE_DEFAULT
INNER JOIN Clientes ON
Clientes.userName COLLATE DATABASE_DEFAULT
= Usuarios.userName COLLATE DATABASE_DEFAULT
No exemplo, foi feita a junção entre as tabelas "Usuarios" e "Clientes", utilizando-se o campo userName, presente em ambas as tabelas. Supõe-se que este campo possua collations diferentes e conflitantes nestas tabelas. O comando COLLATE resolve o conflito na operação de igualdade do JOIN, utilizando a collation padrão do banco.
http://www.sqlserverdicas.com/2010/08/em-bancos-de-dados-sql-server-as.html
[MS SQL Server] - Executando várias vezes um mesmo script
Em certas ocasiões, é necessário executar várias vezes uma mesma sequência de comandos no SQL Server (batch). Essa tarefa pode ser muito trabalhosa quando o número de repetições atinge grandes valores.
Se os comandos forem sempre os mesmos e não houver mudança de parâmetros, pode-se utilizar o comando GO seguido pelo número de vezes que o comando será executado, respeitando a sintaxe abaixo:
GO <número_de_execuções>
O comando GO não é um comando do SQL Server, mas sim uma instrução interpretada pelas interfaces de gerenciamento do SQL Server (SQL Server Management Studio, sqlcmd e osql).
Esse comando pode ser especialmente útil para popular bases de teste.
Exemplo
No exemplo abaixo, criamos uma tabela com um campo inteiro e inserimos 15 registros com valores aleatórios:
CREATE TABLE #tblExemplo (number DECIMAL)
GO
INSERT INTO #tblExemplo VALUES(RAND() * 100)
GO 15
SELECT * FROM #tblExemplo
DROP TABLE #tblExemplo
GO
Pode-se observar o resultado do script na imagem abaixo:
Referências
GO (Transact-SQL)
Assinar:
Postagens (Atom)






