Guia de instalação do SQL Server 2017

Pessoal,

nesse post vou mostrar como funciona a instalação do SQL Server 2017 em um ambiente Windows. O post consiste em 3 seções:

  • Como instalar a versão RTM mais atual do SQL Server até a presente data (13/07/2019)
  • Instalar a ferramenta SQL Server Management Studio
  • Aplicar os últimos cumulative updates (antigos services packs) com suas devidas correções e novos recursos

Os pré requisitos para instalação do produto são:

Fazer o download da ISO do Windows Server 2012 ou superiorWindows Server: https://www.microsoft.com/pt-br/evalcenter/evaluate-windows-server-2016

Fazer o download da ISO SQL Server 2017
SQL Server: https://www.microsoft.com/pt-br/sql-server/sql-server-downloads

Fazer o download dos Cumulative Updates (antigos service packs) do SQL: https://support.microsoft.com/pt-br/help/4047329

Continue lendo

Tratando o erro “Argument list too long” ao tentar limpar logs de determinado diretório

Limpeza de logs antigos e arquivos desnecessários é uma tarefa simples e recorrente para qualquer DBA Oracle.

Um simples comando rm -rf *.trc ou rm -rf *.trm limpa os arquivos antigos dos diretórios de logs do Oracle Database.

É comum acessar essa estrutura de pasta /u01/app/oracle/diag/rdbms/vs05/vs05/trace e se deparar com GBs e mais GBs de dados de trace, logs e afins.

Continue lendo

Corrigindo o warning PL/SQL package RMAN.DBMS_BA version 12.02.00.01.0 in RCVCAT database is too old

Ao logar em um catálogo do RMAN para registrar um novo banco de dados no catálogo, a seguinte mensagem é retornada:

PL/SQL package RMAN.DBMS_BA version 12.02.00.01.0 in RCVCAT database is too old

A correção é simples, basta fazer o upgrade do catálogo em 2 passos:

RMAN> upgrade catalog;
recovery catalog owner is RMAN
enter UPGRADE CATALOG command again to confirm catalog upgrade

E incluir o mesmo comando novamente para confirmar o upgrade:

RMAN> UPGRADE CATALOG;

recovery catalog upgraded to version 12.02.00.01
DBMS_RCVMAN package upgraded to version 12.02.00.01
DBMS_RCVCAT package upgraded to version 12.02.00.01.

RMAN>

Após fazer o upgrade, basta continuar a operação:

[oracle@serverprod ~]$ rman target / catalog rman@anvsrepository
Recovery Manager: Release 12.2.0.1.0 - Production on Thu Apr 18 16:11:25 2019
Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.
connected to target database: PROD (DBID=197120132014)
recovery catalog database Password:
connected to recovery catalog database

RMAN> register database;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

Configurar o serviço de MultiPath para servidores Oracle

Olá pessoal,
no post de hoje vamos falar sobre MULTIPATH! O Multipath nada mais é do que um simples recurso para implementar múltiplos caminhos para a LUN. Essa LUN é apresentada ao servidor através das controladoras do storage. Alguns recursos interessantes são possíveis através do multipath, tais como:

  • balanceamento de carga: um dos caminhos somente envia dados e outro só recebe
  • round robin
  • alta disponibilidade: stand by ou ativo ativo

Continue lendo

Corrigindo o erro ORA-22297: warning: Open LOBs exist at transaction commit time

O erro ORA-22297: warning: Open LOBs exist at transaction commit time ocorre quando o usuário faz alguma manipulações colunas do tipo CLOB ou BLOB e por algum motivo não fechou o LOB conforme deveria antes de fazer o commit.

Abaixo segue um exemplo simples que poderia ter evitado o problema:

DBMS_LOB.CLOSE(myFile);
DBMS_LOB.CLOSE(myBlob);
COMMIT;

Para solucionar o problema precisei fazer um rebuild no CLOB e na PK da tabela em questão. O primeiro passo foi listar os índices da tabela:

desc DBUSER.TB_CLOB
select * from dba_indexes where table_name = 'TB_CLOB' and owner='DBCLOB';

Após verificar os índices, fiz o move no CLOB e o rebuild na PK:

ALTER TABLE DBUSER.TB_CLOB MOVE LOB (CLOB_ARQUIVO) STORE AS (TABLESPACE TD_USER);
alter index DBUSER.PK_CLOB rebuild;

Após realizar esse procedimento conseguimos executar o processo sem retornar o erro:

ORA-22297: warning: Open LOBs exist at transaction commit time

Em alguns blogs e sites de referência, a maioria das pessoas disseram que essa mensagem é apenas informativa, porém só consegui rodar o processo após o reubild no CLOB e na PK da tabela.

Fica a dica.

Trabalhando com data e hora no Oracle

As colunas que armazenam datas e horas no Oracle, pode default retornam apenas a DATA no formato DD/MM/YYYY, sendo que DD = Dia, MM = Mês e YYYY = Ano!

No exemplo abaixo temos um select que retorna a data do sistema:

SELECT TO_CHAR(SYSDATE) FROM DUAL;
14/10/18

Para extrair a data e hora desse campo, é preciso usar a função TO_CHAR passando o parâmetro de data e hora, conforme comando abaixo:

SELECT TO_CHAR(SYSDATE,'DD/MM/YYYY HH:MI:SS') FROM DUAL;
14/10/2018 11:19:32

E se preferir o formato de 24 horas, basta ajustar conforme abaixo:

SELECT TO_CHAR(SYSDATE,'DD/MM/YYYY HH24:MI:SS') FROM DUAL;
14/10/2018 23:19:49

Sabendo como funciona o TO_CHAR, você consegue aplicar esse comando em qualquer coluna de data nas suas tabelas, basta trocar o SYSDATE pelo nome da coluna na tabela e executar o comando.

Habilitar paralelismo em queries e acompanhar a execução

Algumas operações de tecnologias podem ser paralelizadas utilizando mais CPUs para processar determinadas tarefas, e no banco de dados não é diferente. A opção PARALLEL X, onde X é a quantidade de cores a ser utilizada permite dividir a consulta em pequenos pedaços fazendo com que cada processador execute parte da query.

No exemplo abaixo estou paralelizando a consulta entre 20 cpus com o comando PARALLEL 20 e suspendi a geração de REDO LOG com o NOLLOGGING. Essa operação é lenta, pois está comprimindo uma tabela de 500GB e movendo para outra tablespace, a TD_MOVELOB:

ALTER TABLE GALOMG.TB_LOG COMPRESS FOR OLTP;
ALTER TABLE GALOMG.TB_LOG MOVE TABLESPACE TD_MOVELOB NOLOGGING PARALLEL 20;

Para checar se a consulta está paralelizada, basta executar o select abaixo na LONGOPS que trará uma linha para cada processo dividido:

SELECT inst_id,sid, serial#, opname, username,start_time,last_update_time,
round(time_remaining/60,2) "REMAIN MINS", round(elapsed_seconds/60,2) "ELAPSED MINS", round((time_remaining+elapsed_seconds)/60,2) "TOTAL MINS", 
ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE", message
FROM gv$session_longops 
WHERE TOTALWORK != 0 AND sofar<>totalwork AND time_remaining > 0;

Abaixo o resultado da query, onde msotra que cada pedaço da query possui um SID diferente, mesmo que a tabela seja a mesma: GALOMG.TB_LOG !

Basta executar a query várias vezes para consultar o tempo que cada pedaço da query está sendo executado.

Maneiras de desligar o Oracle RAC

Olá pessoal,
hoje vou passar algumas dicas para desligar corretamente seu ambiente do Oracle RAC. Precisei fazer uma manutenção em apenas 1 dos nós e as vezes temos dúvidas de qual procedimento usar, qual é melhor, mais rápido, etc.

Há duas maneiras legais de para uma instância que são utilizando os comando SRVCTL (servercontrol) ou o CRSCTL (clustercontrol). A diferença básica de um para o outro é que o ClusterControl vai parar a instância do ASM automaticamente e deve ser executado como ROOT.

Maos á obra !

Utilizando o SRVCTL teremos as seguintes opções:

srvctl stop instance -d database -i instancia -o abort
srvctl start instance -d database -i instance
srvctl status database -d database

srvctl stop asm -node hostname -stopoption IMMEDIATE
srvctl start asm -node hostname
srvctl status asm

Utilizando o CRSCTL teremos as seguintes opções:

crsctl stop crs
crsctl start crs
crsctl stat res -t init
crsstat

Com esses comandos acima você consegue facilmente parar e subir os serviços do Oracle

Evento – Oracle para todos em 9/9/2018

Bom dia a todos,
nosso evento do mês de Agosto/Setembro será na Escola Estadual José Ermírio de Morais e os dados estão logo abaixo:

Tema: Instalação do Oracle 18C – Passo a Passo
Local: Escola Estadual José Ermírio de Morais
Data: 10/09/2018
Horário: 16:00 – Sala: 05
Palestrante: Leonardo Pedroso Costa

Espero vocês lá!

SQL Saturday – Brasília 2018