Mostrando postagens com marcador Oracle. Mostrar todas as postagens
Mostrando postagens com marcador Oracle. Mostrar todas as postagens
segunda-feira, 17 de abril de 2017
Oracle - Decimal\Horas
DECIMAL/HORAS
select 690/60,
trunc((690/60),0),
((690/60)-(trunc((690/60),0)))*60
from dual
SELECT HORA,
TO_NUMBER(SUBSTR(HORA,1,INSTR(HORA,':')-1)) HORA,
TO_NUMBER(SUBSTR(HORA,(INSTR(HORA,':')+1),2)) MINUTO,
(TO_NUMBER(SUBSTR(HORA,1,INSTR(HORA,':')-1)) +
TO_NUMBER(SUBSTR(HORA,(INSTR(HORA,':')+1),2))) AS VLRDECIMAL
FROM ZPFFINANC_IMP
Oracle - INSTR (PATINDEX - SQL Server)
Oracle - UPDATE com FROM
-- ATUALIZA CAMPO DE
HORARIO (LEGADO)
UPDATE ZIMPFUNC_DEPARA_MATER A SET
A.CODHORARIOLEG = ( SELECT
COD_HORARIO_061
FROM ZIMPFUNCIONARIOS_MATER B
WHERE B.CHAPA_001 = A.CODFUNC);
-- ATUALIZA CAMPO DE
HORARIO (RM)
UPDATE ZIMPFUNC_DEPARA_MATER A SET
CODHORARIORM = ( SELECT CODLABORE
FROM ZIMPFUNC_HORARIOS B
WHERE upper(substr(descr_dominio,2,length(descr_dominio))) =
upper(a.codhorarioleg));
Oracle - SELECT * + campos
SELECT X.*,
5 AS CODCOLIGADA
FROM
ZIMPFUNCIONARIOS_MATER X
SELECT 5 AS CODCOLIGADA,
X.*
FROM
ZIMPFUNCIONARIOS_MATER X
Sempre apelidar a
tabela, para que esta forma de SELECT + campos adicionais funcione
Oracle - Upper, Lower, Initcap, Replace, CHR e ASCII
Upper, Lower,
Initcap, Replace, CHR e ASCII
SELECT UPPER('teste') AS MAIUSCULO,
LOWER(UPPER('teste')) MINUSCULO,
INITCAP('teste') PRIMEIRA_MAISUCULA,
REPLACE(('TESTE TAB
TAB'),CHR(32),' ') AS RETIRA_TAB,
'FUMIO'||CHR(32)||'TESTE' AS
ADICIONA_TAB_TEXTO,
ASCII(' ') VERIFICA_CODIGO_ASC_TAB
from dual
Oracle - Translate\Acentuação
Oracle|MSSQL - ROWNUM\TOP
No
banco dados SQL Server (MSSQL), é comum criarmos sentenças com o comando TOP,
para facilitar as nossas pesquisas e análises.
Ex: SELECT TOP 5 *
FROM GCOLIGADA
Neste
comando, ele listará os 5 primeiros registros da tabela GCOLIGADA.
No
Oracle, não temos o comando TOP, com o mesmo resultado/funcionalidade, então
podemos usar o comando ROWNUM, que funcionará da mesma forma que o comando TOP
(MSSQL):
Ex:
SELECT *
FROM GCOLIGADA
WHERE ROWNUM <= 5
Oracle - Procedures Válidas?
SELECT OBJECT_NAME,
STATUS
FROM DBA_OBJECTS
WHERE OBJECT_TYPE =
’PROCEDURE’
AND STATUS =
‘INVALID’
Oracle - Function (Retira Acentuação)
Criei
uma função para alterar os caracteres acentuados de um texto/string,
facilitando assim algumas consultas/pesquisas que temos de realizar, uma vez
que o Oracle diferencia caracteres acentuados dos não acentuados.
O nome
da função é: FNC_RETIRA_ACENTUACAO, e a sua utilização é feita da seguinte
forma:
FNC_RETIRA_ACENTUACAO(
“Texto a ser alterado”)
Ex:
SELECT FNC_RETIRA_ACENTUACAO('ÁÇÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕËÜáçéíóúàèìòùâêîôûãõëü')
FROM DUAL;
Resultado: ACEIOUAEIOUAEIOUAOEUaceiouaeiouaeiouaoeu
CREATE OR REPLACE
FUNCTION FNC_RETIRA_ACENTUACAO(V_TEXTO_I IN VARCHAR2)
RETURN VARCHAR2
IS V_TEXTO_O
VARCHAR2(100);
BEGIN
V_TEXTO_O :=
translate(V_TEXTO_I,'ÁÇÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕËÜáçéíóúàèìòùâêîôûãõëü',
'ACEIOUAEIOUAEIOUAOEUaceiouaeiouaeiouaoeu');
RETURN (V_TEXTO_O);
END;
SELECT
FNC_RETIRA_ACENTUACAO('ÁÇÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕËÜáçéíóúàèìòùâêîôûãõëü')
FROM DUAL
quinta-feira, 10 de novembro de 2016
sábado, 29 de agosto de 2015
Oracle - Exemplos
GRANT CREATE DATABASE LINK TO RM;
/
CREATE TABLE ZTABELASEXCLUIDAS (NOMETABELA VARCHAR(150),
CONSTRAINT PKZTABELASEXCLUIDAS PRIMARY KEY (NOMETABELA));
/
CREATE TABLE ZALIASORIGEM (NOMEALIAS VARCHAR(60),
CODCOLIGADA NUMBER(5),
CONSTRAINT PKZALIASORIGEM PRIMARY KEY (NOMEALIAS));
/
CREATE OR REPLACE PROCEDURE SP_ATIVAFOREIGNKEYS (P_ACAO IN VARCHAR)
AS
P_NOMETABELA VARCHAR(128);
P_CHAVEESTRANGEIRA VARCHAR(128);
P_CURSORNRO INTEGER;
P_EXECUTE INTEGER;
CURSOR CURSORTABELAS IS SELECT TABLE_NAME
FROM USER_TABLES;
CURSOR CURSORCONSTRAINTS IS SELECT CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = P_NOMETABELA
AND CONSTRAINT_TYPE = 'R'; /* SOMENTE FOREIGN KEYS */
BEGIN
OPEN CURSORTABELAS;
FETCH CURSORTABELAS INTO P_NOMETABELA;
LOOP
EXIT WHEN CURSORTABELAS%NOTFOUND;
OPEN CURSORCONSTRAINTS;
FETCH CURSORCONSTRAINTS INTO P_CHAVEESTRANGEIRA;
LOOP
EXIT WHEN CURSORCONSTRAINTS%NOTFOUND;
P_CURSORNRO := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(P_CURSORNRO, 'ALTER TABLE ' || P_NOMETABELA || ' ' || P_ACAO || ' CONSTRAINT ' || P_CHAVEESTRANGEIRA, DBMS_SQL.NATIVE);
P_EXECUTE :=DBMS_SQL.EXECUTE(P_CURSORNRO);
DBMS_SQL.CLOSE_CURSOR(P_CURSORNRO);
FETCH CURSORCONSTRAINTS INTO P_CHAVEESTRANGEIRA;
END LOOP;
CLOSE CURSORCONSTRAINTS;
FETCH CURSORTABELAS INTO P_NOMETABELA;
END LOOP;
CLOSE CURSORTABELAS;
END;
/
/
CREATE TABLE ZTABELASEXCLUIDAS (NOMETABELA VARCHAR(150),
CONSTRAINT PKZTABELASEXCLUIDAS PRIMARY KEY (NOMETABELA));
/
CREATE TABLE ZALIASORIGEM (NOMEALIAS VARCHAR(60),
CODCOLIGADA NUMBER(5),
CONSTRAINT PKZALIASORIGEM PRIMARY KEY (NOMEALIAS));
/
CREATE OR REPLACE PROCEDURE SP_ATIVAFOREIGNKEYS (P_ACAO IN VARCHAR)
AS
P_NOMETABELA VARCHAR(128);
P_CHAVEESTRANGEIRA VARCHAR(128);
P_CURSORNRO INTEGER;
P_EXECUTE INTEGER;
CURSOR CURSORTABELAS IS SELECT TABLE_NAME
FROM USER_TABLES;
CURSOR CURSORCONSTRAINTS IS SELECT CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = P_NOMETABELA
AND CONSTRAINT_TYPE = 'R'; /* SOMENTE FOREIGN KEYS */
BEGIN
OPEN CURSORTABELAS;
FETCH CURSORTABELAS INTO P_NOMETABELA;
LOOP
EXIT WHEN CURSORTABELAS%NOTFOUND;
OPEN CURSORCONSTRAINTS;
FETCH CURSORCONSTRAINTS INTO P_CHAVEESTRANGEIRA;
LOOP
EXIT WHEN CURSORCONSTRAINTS%NOTFOUND;
P_CURSORNRO := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(P_CURSORNRO, 'ALTER TABLE ' || P_NOMETABELA || ' ' || P_ACAO || ' CONSTRAINT ' || P_CHAVEESTRANGEIRA, DBMS_SQL.NATIVE);
P_EXECUTE :=DBMS_SQL.EXECUTE(P_CURSORNRO);
DBMS_SQL.CLOSE_CURSOR(P_CURSORNRO);
FETCH CURSORCONSTRAINTS INTO P_CHAVEESTRANGEIRA;
END LOOP;
CLOSE CURSORCONSTRAINTS;
FETCH CURSORTABELAS INTO P_NOMETABELA;
END LOOP;
CLOSE CURSORTABELAS;
END;
/
Oracle - Dicas para Criação / Manutenção de uma instância Oracle
Dicas para Criação / Manutenção de uma instância Oracle
(RM Sistemas)
O presente documento contém algumas
dicas para DBAs manterem suas instâncias Oracle em perfeito estado de
funcionamento.
As primeiras dicas referem-se a
parâmetros encontrados no arquivo init.ora, encontrado no diretório de
instalação da instância Oracle na máquina em questão.
Para alterar alguns deles (quando
possível), basta editar o arquivo em questão, salvá-lo e restartar a instância.
Quaisquer dúvidas podem ser
encaminhadas ao suporte da RM Sistemas através do mail (suporte@rm.com.br).
Tamanho do bloco Oracle
Este parâmetro deve ser configurado no momento
da criação da base de dados. Sugerimos a utilização de blocos de 8k
(DB_BLOCK_SIZE = 8192).
OBS: Note que o tamanho do bloco deve ser
informado em nº de bytes.
Caso a instância já esteja criada, pode-se
verificar a configuração deste parâmetro, editando-se o arquivo de parâmetros (init.ora) do Oracle e verificando o valor da variável DB_BLOCK_SIZE.
Uma outra alternativa para visualizar o valor
do parâmetro seria a utilização da ferramenta Instance Manager. Aqui, o
parâmetro pode ser visualizado através de:
Initialization
Parameters / Instance Specific
A alteração deste parâmetro só pode ser feita
caso a instância seja recriada.
Distribuição da memória disponível para o Oracle
Depois de determinada a quantidade de memória
que estará disponível para o Sistema Operacional e a quantidade que ficará
disponível para o Oracle, deve-se fazer a distribuição da memória disponível
para o Oracle.
o
SORT_AREA_SIZE
Deve-se configurar este parâmetro com grande
cautela, uma vez que ele reflete a quantidade de memória que cada conexão de usuário irá ter
disponível para operações de SORT.
Devemos levar em consideração também a
quantidade de memória fixa que cada conexão de usuário gasta (1,7 MB).
Sendo assim, o gasto de memória com conexões de
usuários em uma aplicação onde estejam abertas 10 sessões e o SORT_AREA_SIZE
esteja configurado com o valor de 1048576
(1MB) é:
10
* (1,7+1) = 27 MB.
OBS: Note que o valor do SORT_AREA_SIZE deve ser informado em nº de bytes.
O valor a ser configurado para este parâmetro
deve ser definido levando-se em consideração
o número de conexões simultâneas
no Oracle e a quantidade de memória disponínel para mesmo.
o
DB_BLOCK_BUFFER
Este parâmetro irá refletir a quantidade de
memória destinada ao Oracle que será utilizada para Cache de dados.
Este parâmetro deve ser configurado com o
número de blocos do Oracle que será utilizado para este Cache.
Sugerido:
60% da memória restante destinada ao Oracle destinada ao Cache de dados.
Como calcular o valor do parâmetro:
DB_BLOCK_BUFFER =
(M * 1048576) / B
Onde: M
= É a quantidade de memória ( em Mega bytes ) que deve ser destinada ao Buffer de Dados.
B= Tamanho do bloco de dados (em bytes)
utilizado pelo Oracle.
o
SHARED POOL
Este parâmetro irá refletir a quantidade de
memória destinada ao Oracle que será utilizada para o SHARED POOL.
Sugerido:
Restante da memória destinada ao Oracle (40%), destinada ao SHARED POOL.
O valor deste parâmetro deve ser determinado de
Bytes.
SHARED_POOL_SIZE = M
Onde: M=
Memória destinada ao SHARED POOL em bytes.
Tablespaces
Deve-se criar pelo menos uma TableSpace
distinta para cada finalidade: System, Dados,
Indices, Temp, Rollback, Redo.
É desejável também que os DataFiles destas
TableSpaces sejam distribuídos em discos diferentes, de forma a minimizar a
concorrência de acesso. Isto deve ser feito conforme a disponibilidade de
discos. Exemplo:
Cenário
1:
Um
disco:
System, Dados,
Iindices, Temp, Rollback , Redo no mesmo disco, mas em TableSpaces
diferentes.
Cenário
2:
Dois
discos:
1º
disco: Dados + Temp + Rollback
2º disco: System + Indices + Redo
CPU
Deve-se verificar costantemente a taxa de
utilização da CPU, a mesma não deve estar com taxa de utilização muito alta
durante a maior parte do período (90% de utilização).
Caso esteja utilizando mais de um processador
deve-se verificar se a carga da CPU está balanceada.
Para estas medições, pode se
utilizar a ferramenta Performance Monitor (no caso de servidores Windows
NT/2000).
COALESCE
Deve-se verificar periodicamente (mensalmente)
a fragmentação do espaço livre alocado
para cada TableSpace.
o
Pode-se
verificar tal fragmentação utilizando:
SELECT
TABLESPACE_NAME, TOTAL_EXTENTS , PERCENT_EXTENTS_COALESCED
FROM DBA_FREE_SPACE_COALESCED
WHERE PERCENT_EXTENTS_COALESCED <> 100
o
Para
efetuar a desfragmentação:
ALTER TABLESPACE tablespace COALESCE
Atualização de estatísticas
A rotina de atualização de estatísticas deve
ser agendada para execução diária..
Sugere-se o utilizar o Package DBMS_UTILITY
para fazer a atualização de estatísticas:
execute
DBMS_UTILITY.analyze_schema('RM','COMPUTE')
Para agendar a execução diária de estatísticas em um servidor que esteja
utilizando o Windows NT ou Windows 2000:
1º) crie um arquivo TXT com o seguinte
conteúdo:
execute DBMS_UTILITY.analyze_schema('RM','COMPUTE')
2º) Utilize o command prompt para agendar a
tarefa :
at 22:00 every:M,T,W,Th,F,S,Su cmd /c
"sqlplus rm/rm @d:\temp\script.txt"
O comando acima agenda a atualização de
estatíscas para ocorrer todos os dias às 22:00 horas. Considera-se que o
arquivo TXT criado no primeiro item é o d:\temp\script.txt
Indices
Os índices devem ser reconstruídos
periodicamente (mensalmente) , ou após periodo de grande “deleção” dos mesmos.
Para a verificação do percentual de linhas
deletadas em um determinado índice utilize:
1º) Analyze :
ANALYZE
INDEX indice VALIDATE STRUCTURE;
2º) Verificando o percetual de deleção:
SELECT LF_ROWS , DEL_LF_ROWS
FROM INDEX _STATS
OBS: Caso 30% das linhas em folhas
(LF_ROWS) tenham sido deletados (DEL_LF_ROWS), o índice deve ser reconstruído.
3º) Reconstrução do índice:
ALTER INDEX indice REBUILD tablespace.
Para reconstruir o índice, durante o
REBUILD deve haver espaço disponível
para a coexistência dos dois índices (antigo e novo).
O comando abaixo gera um script para a
reconstrução de todos os índices da base de dados:
SELECT 'ALTER INDEX ' || INDEX_NAME ||
' REBUILD TABLESPACE RM_INDICES; '
FROM USER_INDEXES
Este script deve ser executado em um momento em que não haja acesso à
base de dados.
Export / Import
O Export e Import da base de dados deve ser
feito periodicamente com finalidade de reorganizar os dados dentro da base de
dados, desfragmentar e resolver casos de linhas Migradas.
Sugere-se fazer a Exportação / Importação da
base de dados de 2 em 2 meses.
Passos para a execução do Export / Import
§ Export da base.
§ Backup físico da base
§ Drop do Schema
§ Import da base
OBS: Semanalmente sugere-se verificar o número de linhas MIGRADAS na base
de dados. Caso o número esteja muito alto, deve-se fazer o Export / Import da
base.
Para verificar o número de linhas MIGRADAS
utilize:
SELECT
TABLE_NAME, CHAIN_CNT
FROM USER_TABLES
ORDER BY CHAIN_CNT DESC
OBS: A coluna CHAIN_CNT, reflete
não apenas o número de linhas migradas, mas o processo de Export / Import irá
atacar apenas este problema.
ALERT
O ALERT dever ser verificado diariamente .
Deve-se verificar se existem mensagens de erro do tipo ORA-00600 e /ou
ORA-01578 , que indicam erros internos do Oracle ou blocos corrompidos.
Oracle - Como uso SQL Dinâmico com PL/SQL ?
Como uso SQL Dinâmico com PL/SQL ? |
|
A partir do PL/SQL V2.1 utilize a package DBMS_SQL
para executar SQL´s Dinâmicos. Exemplo: CREATE OR REPLACE PROCEDURE DYNSQL AS cur integer; rc integer; BEGIN cur := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(cur, 'CREATE TABLE X (Y DATE)', DBMS_SQL.NATIVE); rc := DBMS_SQL.EXECUTE(cur); DBMS_SQL.CLOSE_CURSOR(cur); END; Outro Exemplo: CREATE OR REPLACE PROCEDURE DEPARTMENTS(NO IN DEPT.DEPTNO%TYPE) AS v_cursor integer; v_dname char(20); v_rows integer; BEGIN v_cursor := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(v_cursor, 'select dname from dept where deptno > :x', DBMS_SQL.V7); DBMS_SQL.BIND_VARIABLE(v_cursor, ':x', no); DBMS_SQL.DEFINE_COLUMN_CHAR(v_cursor, 1, v_dname, 20); v_rows := DBMS_SQL.EXECUTE(v_cursor); loop if DBMS_SQL.FETCH_ROWS(v_cursor) = 0 then exit; end if; DBMS_SQL.COLUMN_VALUE_CHAR(v_cursor, 1, v_dname); DBMS_OUTPUT.PUT_LINE('Deptartment name: '||v_dname); end loop; DBMS_SQL.CLOSE_CURSOR(v_cursor); EXCEPTION when others then DBMS_SQL.CLOSE_CURSOR(v_cursor); raise_application_error(-20000, 'Unknown Exception Raised: '||sqlcode||' '||sqlerrm); END; |
Assinar:
Postagens (Atom)