Pular para o conteúdo principal

Postagens

Mostrando postagens com o rótulo Banco de dados

Diferença entre SQL, MySQL, PostgreSQL, Oracle e SQL Server: entenda de uma vez por todas

No universo da tecnologia da informação, especialmente no desenvolvimento de sistemas e gestão de dados, é comum surgirem dúvidas como: “SQL é um banco de dados?” , “Qual a diferença entre MySQL e SQL Server?” , ou ainda, “PostgreSQL e Oracle fazem a mesma coisa?” Se você está começando na área de TI ou quer reforçar sua base de conhecimento, este post foi feito para você. Vamos explicar de forma clara e direta as principais diferenças entre SQL, MySQL, PostgreSQL, Oracle e SQL Server , e ajudar você a entender qual solução pode ser mais adequada ao seu projeto ou estudo. O que é SQL? Antes de falarmos dos bancos de dados em si, é importante entender o que é o SQL (Structured Query Language) . O SQL não é um banco de dados, e sim uma linguagem padrão para consulta, manipulação e definição de dados em sistemas de gerenciamento de bancos de dados relacionais (SGBDs) . Essa linguagem é utilizada para criar tabelas, inserir registros, fazer consultas, atualizações e exclusões de dados. Tod...

Otimização de Queries no MySQL: Índices, particionamento e técnicas para performance

Quem trabalha com banco de dados sabe que um sistema lento muitas vezes não está relacionado à infraestrutura, mas sim a consultas SQL mal otimizadas . No MySQL, pequenas alterações na forma como as queries são escritas e como o banco é estruturado podem gerar ganhos significativos de desempenho. Neste post, vamos explorar técnicas fundamentais para melhorar a performance de consultas em bancos de dados MySQL, com foco em índices, particionamento e boas práticas de escrita de queries . Por que otimizar consultas SQL? Otimizar queries não é apenas uma questão de performance, mas de escalabilidade. Uma aplicação que funciona bem com mil registros pode se tornar um gargalo com um milhão. Queries lentas consomem mais CPU, memória e I/O de disco, impactando a experiência do usuário e os custos operacionais da aplicação. Em ambientes com alta concorrência ou sistemas de missão crítica, isso pode ser inaceitável. 1. Índices: o coração da performance no MySQL A criação de índices (ou ...

Trabalhando com HASHBYTES no SQL Server

Hoje precisei criar uma função para gerar um Hash SHA2_512 dentro de um banco SQL Server 2016. Para quem não conhece ou não sabe, uma função hash é um algoritmo que mapeia dados de comprimento variável para dados de comprimento fixo. Os valores retornados por uma função hash são chamados valores hash, códigos hash, somas hash (hash sums), checksums ou simplesmente hashes. É muito utilizado para armazenar senhas… cria-se um hash da senha do usuário e o resultado é armazenado, não deixando no banco a senha original. Importante dizer: o hash não é uma criptografia. Ou seja: não há retorno. No caso da senha, por exemplo, será necessário fazer o comparativo pelo hash. Imagine um formulário de login, por exemplo. Quando ele for submetido pelo usuário, o sistema deverá gerar o hash code do que foi preenchido no campo de senha e comparar com o hash que está no banco. O SQL Server possui uma função nativa para retornar hash nos modelos mais utilizados (MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | ...

ORACLE - Verifique Fragmentação de objetos no seu Schema

select substr(owner,1,15), substr(SEGMENT_NAME, 1,30), substr(SEGMENT_TYPE,1,10), substr(TABLESPACE_NAME,1,20), EXTENTS, MAX_EXTENTS from dba_segments where owner like ('P%') order by owner, extents desc; Observações: Quanto mais Extents pior; O owner like (‘P%’) busca todo os objetos de schemas com P%… ou seja: precisa ser adaptado a sua realidade quando for executado. Recomendo a leitura de: https://levipereira.wordpress.com/2010/10/19/desfragmentando-tabelas-no-oracle-10g/ http://www.devmedia.com.br/oracle-10g-11g-desfragmentacao-online-de-tabelas/30166

Usando GLOBAL TEMPORARY TABLE

Global temporary table é um objeto que possui um comportamento equivalente a uma tabela, sendo que os dados inseridos estarão disponíveis apenas dentro de uma determinada sessão ou até que sejam “comitados” (mantidos até o fim da transação)… isso depende de como a GTT foi criada. Pode ser muito útil para trabalhar dados temporários antes de serem retornados ao usuário ou gravados numa tabela comum. Exemplo de criação de GTT onde os dados são mantidos durante a sessão: CREATE GLOBAL TEMPORARY TABLE TESTE1_GTT (“EMAIL” VARCHAR2(120 BYTE) NOT NULL ENABLE, “NOME” VARCHAR2(100 BYTE) NOT NULL ENABLE, “SOBRENOME” VARCHAR2(100 BYTE) NOT NULL ENABLE) ON COMMIT PRESERVE ROWS ; Exemplo de criação de GTT onde os dados são mantidos até o fim da transação: CREATE GLOBAL TEMPORARY TABLE TESTE2_GTT (“EMAIL” VARCHAR2(120 BYTE) NOT NULL ENABLE, “NOME” VARCHAR2(100 BYTE) NOT NULL ENABLE, “SOBRENOME” VARCHAR2(100 BYTE) NOT NULL ENABLE) ON COMMIT DELETE ROWS ; Atenção as seguintes características ...

Diferenças entre comandos DDL, DML, DCL e TCL

DDL  – Data Definition Language ( DDL) são usadas para definir a estrutura de banco de dados ou esquema. Alguns exemplos: CREATE- para criar objetos no banco de dados ALTER – altera a estrutura da base de dados TRUNCATE – remover todos os registros de uma tabela, incluindo todos os espaços alocados para os registros são removidos COMMENT – adicionar comentários ao dicionário de dados RENAME – para renomear um objeto DML  – Data Manipulation Language ( DML) são utilizados para o gerenciamento de dados dentro de objetos do banco. Alguns exemplos: SELECT- recuperar dados do banco de dados INSERT – inserir dados em uma tabela UPDATE – atualiza os dados existentes em uma tabela DELETE – exclui registros de uma tabela, CALL – chamar um subprograma PL / SQL EXPLAIN PLAN – explicar o caminho de acesso aos dados LOCK TABLE – controle de concorrência DCL  – Data Control Language ( DCL ) declarações. Alguns exemplos: GRANT – atribui privilégios de acesso do usuário a objetos do banc...

Diferenças entre FUNCTION e PROCEDURE

Uma  function  é um bloco muito semelhante a uma procedure. Usarei o PL/SQL como exemplos, mas o conceito serve para outras linguagens de BD também. O que podemos entender de início entre esses dois tipos de blocos é que os blocos functions retornam valores e as procedures podem ou não retornar um valor. As functions tem duas características que diferem das procedures, as quais não podemos deixar de tratar: As functions sempre retornam valores; Functions são usadas como parte de uma expressão. Para que possamos criar uma função no PL/SQL precisamos entender o seu funcionamento e para isso precisamos entender a sua sintaxe básica. Vejamos: CREATE [OR REPLACE] FUNCTION function_name [(parameter_name [IN | OUT | IN OUT] type [, ...])] RETURN return_datatype {IS | AS} BEGIN < function_body > END [function_name]; CREATE [OR REPLACE] FUNCTION: Caso uma function já exista com o mesmo nome, ela será reescrita devido ao termo ‘replace’. Caso contrário, ela será criada de acordo c...

Procurando textos nos objetos do Oracle

Pessoal, algumas vezes precisamos buscar uma palavra dentro de todos os objetos no banco de dados e não sabemos como fazer. Pois bem, segue uma query que pode ajudar muito. SELECT * FROM ALL_SOURCE WHERE UPPER(TEXT) LIKE '%TEXTO%' Nessa query, ele irá procurar a palavra “TEXTO” em todos os objetos do banco, se encontra algum objeto que contenha, ele irá mostrar. Abraço.

MySQL storage engines – parte 2

Continuando o meu post anterior ( MySQL storage engines – parte 1 ), onde apresentamos as principais engines de armazenamento do MySQL, são elas: InnoDB, MyISAM, Memory, CSV, Merge, Archive, Federated e Blackhole, vamos agora entender como escolher e mudar. Para visualizar todas as opções de engines suportadas pelo servidor, execute: SHOW ENGINES Nenhum mecanismo de armazenamento é ideal para todas as circunstâncias. Alguns têm melhor desempenho em certas condições e pior desempenho em outras situações. Há compensações que devem ser consideradas. Uma solução mais segura requer mais recursos; pode ser mais lento, levar mais tempo de CPU e espaço em disco. O MySQL é muito flexível no fato de fornecer vários mecanismos de armazenamento diferentes. Alguns deles, como o mecanismo Archive, são criados para serem usados em situações específicas. Em alguns casos, a resposta é clara. Sempre que estamos lidando com alguns sistemas de pagamento, somos obrigados a utilizar a solução mais segura. N...

MySQL storage engines - parte 1

As “engines” de armazenamento do MySQL são módulos de software usados para criar, ler e atualizar dados de um banco de dados. Existem dois tipos de storage engines no MySQL: transaction e non-transactional. Para o MySQL 5.5 ou superior, o padrão de engine é o InnoDB. Nas versões anteriores o padrão era o MyISAM. Escolher a engine correta é uma decisão estratégica, visto que impacta no consumo do recurso e no que esperar de comportamento do banco. Lógico que, para coisas básicas, isso não será um problema. Mas se você está planejando um banco de dados de produção, o ideal é pelo menos entender onde você está pisando e ser um pouco mais criterioso. Para começar, vamos a lista atual de storages suportados: InnoDB MyISAM Memory CSV Merge Archive Federated Blackhole O InnoDB é o mecanismo de armazenamento mais usado com suporte a transações. É um mecanismo de armazenamento compatível com ACID. Ele suporta bloqueio em nível de linha, recuperação de travamento e controle de simultaneidade de ...

Oracle Flashback Query: Recuperando dados

Imagine a seguinte situação: você executou um delete em vários registros, “commitou” e depois percebeu que fez o filtro errado. Parece surreal, mas pode acontecer, tanto apagando quanto manipulando os dados de uma determinada tabela. Somos humanos e podemos errar. Pensando no contexto da recuperação de dados, é importante conhecermos o modelo de “flashback query” da Oracle, onde podemos visualizar as informações de uma determinada tabela num determinado momento. A sintaxe fica assim: SELECT * FROM EMP AS OF TIMESTAMP TO_TIMESTAMP('2005-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS') WHERE name = 'JOHN'; Esse é o exemplo encontrado na documentação da Oracle. Tópico 7.2. Note que a query irá retornar todos os campos da tabela EMP, com visão as 9h30 do dia 04/04/2005, onde o nome for igual a JOHN. Para mais informações de como usar Queries Flashback e também obter mais detalhes do seu funcionamento, veja a documentação clicando aqui .

O que é SQL ?

SQL (structured Query Language) é um conjunto de comandos de manipulação de banco de dados utilizado para criar e manter a estrutura desse banco de dados, além de incluir, excluir, modificar e pesquisar informações nas tabelas dele. A linguagem SQL não é uma linguagem de programação autônoma; poderia ser chamada de “sub linguagem”. Quando se escrevem aplicações para banco de dados, é necessário utilizar uma linguagem de programação tradicional (C, C#, Java, ASP, PHP, etc…) e embutir comandos SQL para manipular os dados. Em um modelo relacional, apenas uma tipo de estrutura de dados existe: a tabela. Novas tabelas são criadas com a junção ou combinação de outras tabelas. Utilizando apenas um comando SQL é possível pesquisar dados em diversas tabelas ou atualizar e excluir diversas linhas das mesmas. A linguagem SQL não é procedural, logo é possível especificar o que deve ser feito, e não como deve ser feito. Dessa forma, um conjunto de linhas (set) será atingido pelo comando e não cada ...

Contar caracteres no MySQL

Vamos fazer uso das funções da linguagem SQL para contar caracteres de um campo salvo em uma tabela. Ou seja, vamos selecionar diversos registros de uma tabela e contar os caracteres de um de seus campos. No MySQL temos várias funções para contar caracteres: LENGTH(cadeia) – comando também existente no Oracle Recebe uma cadeia , conta e retorna o número de caracteres. CHARACTER_LENGTH(cadeia)  Recebe também uma cadeia e retorna o número de caracteres contados. CHAR_LENGTH(cadeia) É um sinônimo de CHARACTER_LENGTH. Embora nem todas as versões de MySQL o tenham. A diferença entre LENGTH e CHARACTER_LENGTH é que em CHARACTER_LENGTH um caractere “multibyte” conta como um só caractere. Em LENGTH conta o número de bytes da cadeia. Assim, no caso de ter uma cadeia com 5 caracteres que ocupam 2 bytes cada um, LENGTH retornaria 10 e CHARACTER_LENGTH só 5. Por enquanto vamos utilizar CHARACTER_LENGTH, ela devolverá os resultados que esperamos obter, o número de caracteres da cadeia, independ...

Diferença entre banco de dados, instância, schema, tablespaces e etc.

Vamos a um pouco de teoria de banco de dados. Tenho certeza que será muito útil para os universitários. 🙂 No mundo da tecnologia e gerenciamento de informações, os bancos de dados desempenham um papel vital. Um banco de dados, ou base de dados, é um conjunto organizado de registros que oferece a capacidade de reorganização e extração de informações. Normalmente, os registros em um banco de dados são agrupados para servir a um propósito comum. A gestão de um banco de dados é tipicamente realizada por meio de um software conhecido como Sistema Gerenciador de Banco de Dados (SGBD). Exemplos notáveis de SGBDs incluem o Oracle, MySQL, SQL Server e PostgreSQL. É importante notar que, às vezes, o termo “banco de dados” é erroneamente usado como sinônimo de SGBD. No contexto atual, o modelo de dados mais amplamente adotado é o modelo relacional, no qual as informações são organizadas em tabelas compostas por linhas e colunas. Instâncias: A Máquina Cerebral do Banco de Dados Quando se trata de...

Laravel - Por que eu gosto desse framework PHP?

Eu assumo: gosto de PHP. Acho que todo desenvolvedor tem a sua linguagem do coração. A minha é o PHP. Acho pratico, roda em qualquer canto e tenho facilidade com ela. Enfim… para facilitar a minha vida, acabei adotando o Laravel também. Laravel é um framework de desenvolvimento web em PHP criado por Taylor Otwell em 2011. Desde então, ele se tornou um dos frameworks mais populares no ecossistema PHP, oferecendo uma série de recursos para desenvolvimento de aplicações web modernas e escaláveis. Aqui estão os principais motivos pelos quais eu gosto do Laravel e que tornaram esse framework uma escolha popular para o desenvolvimento web: Arquitetura MVC O Laravel segue o padrão MVC (Model-View-Controller), o que permite separar a lógica de negócios da interface do usuário e do banco de dados. Isso significa que você pode trabalhar em cada um desses componentes independentemente, o que torna o desenvolvimento e a manutenção da aplicação muito mais fácil. Eloquent ORM O Laravel apresenta u...

COMO SABER QUAL O NLS_LANG CONFIGURADO PARA O BANCO DE DADOS

Você pode usar a view v$nls_parameters para ver: LANGUAGE, TERRITORY e CHATACTER SET estão configurados para o banco de dados Oracle. Para isso, execute o select: select DECODE(parameter, ‘NLS_CHARACTERSET’, ‘CHARACTER SET’, ‘NLS_LANGUAGE’, ‘LANGUAGE’, ‘NLS_TERRITORY’, ‘TERRITORY’) name, value from v$nls_parameters WHERE parameter IN ( ‘NLS_CHARACTERSET’, ‘NLS_LANGUAGE’, ‘NLS_TERRITORY’) Abraço.

ORA-01843: not a valid month e formato incorreto da data no Windows Server 2012 R

Recentemente, migrando um servidor web, tive um problema de exibição de data em alguns sistemas. Outros até apresentaram erro “ORA-01843: not a valid month”. Prontamente fui verificar as configurações regionais do servidor. Como os sistemas utilizam o formato brasileiro “DD/MM/YYYY”, e estava num Windows Server 2012 R2 em inglês, tive que alterar algumas coisas. Para minha surpresa, não resolveu. Pesquisando na WEB achei a solução: 1 – Abra o editor de registros no servidor onde estão armazenadas as páginas/sistemas com erro (só mandar executar “regedit”); 2 – Localize a chave HKEY_CURRENT_USER\ControlPanel\Internacional 3 – Edite o parâmetro “sShortDate”. Coloque “dd/MM/yyyy” no conteúdo; 4 – Localize o mesmo parâmetro na chave HKEY_USERS\.DEFAULT\ControlPanel\International. Faça a mesma alteração no conteúdo. 5 – Saia do editor de registro e execute suas páginas normalmente. Recomendo reinic...