quinta-feira, 30 de dezembro de 2010

Wraping PL/SQL code

Segue mais uma dica interessante.

O comando wrap no Oracle, usado para esconder o código fonte PL/SQL.
Para encriptar um arquivo Oracle você deverá:
Acessar o prompt :
Navegar até a pasta onde o arquivo se encontra e executar o seguinte comando:

Wrap iname=nomedoarquivo.sql oname=nomedoarquivocriptografado

Para detalhes como restrições e outras implementações segue link abaixo:

http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/wrap.htm

segunda-feira, 27 de dezembro de 2010

COMANDOS ÚTEIS ORACLE

Pessoal,

Achei interessante postar alguns comandos que podem ser úteis no dia a dia de um DBA Oracle.


-- VERIFICA INSTANCIA (IDENTIFICAR NOME DA INSTANCIA E INFORMAÇÕES DA MESMA)
SELECT * FROM GLOBAL_NAME;
SELECT * FROM V$INSTANCE;

--VERSAO DO ORACLE (VERIFICAR QUAL É A VERSAO DO ORACLE)
SELECT VERSION FROM V$INSTANCE

-- VERIFICAR QUAIS SÃO OS USUÁRIOS DO SISTEMA (VERIFICAR TODOS OS USUÁRIOS EXISTENTES)
SELECT * FROM DBA_USERS

-- CONTA OBJETOS DO SCHEMA (CONTA E LISTA TODOS OS TIPOS DE OBJETOS COM UM OWNER ESPECÍFICO)
SELECT COUNT(OBJECT_TYPE), OBJECT_TYPE
FROM DBA_OBJECTS
WHERE OWNER LIKE 'RM%'
GROUP BY OBJECT_TYPE;
SPOOL OFF

-- VERIFICA ATRIBUTOS DO USUÁRIO (ATRIBUTOS GERAIS DE USUÁRIOS)
SELECT * FROM DBA_USERS
WHERE USERNAME LIKE 'RM%';
SELECT * FROM DBA_TAB_PRIVS
WHERE GRANTOR LIKE 'RM%';

-- VERIFICA PREVILEGIOS DO USUÁRIO
SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE LIKE 'RM%';
SELECT * FROM DBA_ROLE_PRIVS
WHERE GRANTEE LIKE 'RM%';

-- DESATIVA USUÁRIO / ATIVA
ALTER USER USER RM ACCOUNT LOCK;
ALTER USER USER RM ACCOUNT UNLOCK;
ALTER USER USER RM PASSWORD EXPIRE;

-- VERIFICA STATUS DA CONTA
SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS


-- VERIFICAR SE TEM ALGUM USUÁRIO USANDO O SISTEMA (BOM CASO DESEJE PARAR O SERVICO DO ORACLE SERVER)
SELECT SADDR, SID, USERNAME, LOGON_TIME, STATUS,
OSUSER, MACHINE, PROGRAM
FROM V$SESSION;

-- VERIFICA PREVILEGIOS DE ROLE
SELECT * FROM DBA_ROLE_PRIVS;

-- CONTA OBJETOS DO SCHEMA
SELECT COUNT(OBJECT_TYPE), OBJECT_TYPE
FROM DBA_OBJECTS
GROUP BY OBJECT_TYPE;

-- CONTA OBJETOS DE UM SCHEMA ESPECÍFICO
SELECT COUNT(OBJECT_TYPE), OBJECT_TYPE
FROM DBA_OBJECTS
WHERE OWNER LIKE 'RM%'
GROUP BY OBJECT_TYPE;

-- CONTA OBJETOS INVALIDOS
SELECT COUNT (*)
FROM DBA_OBJECTS
WHERE STATUS='INVALID'
AND OWNER LIKE 'RM%';

-- VERIFICA OBJETOS INVALIDOS
SELECT OBJECT_TYPE, OBJECT_NAME, STATUS
FROM DBA_OBJECTS
WHERE STATUS='INVALID'
AND OWNER LIKE 'RM%';

-- GERA SCRIPTS DOS OBJETOS INVALIDOS
SELECT 'ALTER'||' '|| OBJECT_TYPE ||' '||OWNER ||'.'|| OBJECT_NAME || ' COMPILE;'
FROM DBA_OBJECTS
WHERE STATUS='INVALID'
AND OWNER LIKE 'RM%';

-- VERIFICA AS ROLES RM
SELECT * FROM DBA_ROLES WHERE ROLE LIKE '%RM%';
SELECT * FROM DBA_SYS_PRIVS WHERE LIKE '%RM%';


--ALTERAR SENHA DE USUARIO
ALTER USER USER RM IDENTIFIED BY 'NOVA_SENHA';

--PROPRIEDADES DO SERVER (lANGUAGE, CHARACTER SET E ETC..)
SELECT * FROM NLS_DATABASE_PARAMETERS


--PROPRIEDADES DA SESSAO (lANGUAGE, CHARACTER SET E ETC..)
SELECT * FROM NLS_SESSION_PARAMETERS

--MOSTRA INFORMÇÕES GERAIS DA PARAMETRIZAÇÃO (NÃO FUNCIONA NO SQL TOOLS)
SHOW PARAMETERS

--VERIFICAR TRIGGERS NA BASE
SELECT * FROM DBA_TRIGGERS WHERE TABLE_OWNER='RM'


--VARIAVEIS DE AMBIENTE
CONN SYSTEM@INSTANCIA
SPOOL C:\LOGS
SET ECHO ON
SET TIMING ON
SET LINES 1000
SET SQLBL ON
ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY HH24:MI:SS';
SELECT SYSDATE FROM DUAL;
SHOW USER

segunda-feira, 13 de dezembro de 2010

Utilizando funçoes e operadores para cadeia de caracteres Parte I

Pessoal,

Hoje vou dar uma dica sobre tratamento de cadeia de carcateres falando sobre a função SUBSTRING(SQL Server) e SUBSTR(Oracle)

Quando se deseja obter em uma cadeia de caracteres um conjunto específico dos mesmos podemos utilizar as função acima citadas.
Por exemplo, suponhamos que eu queira obter uma consulta que me retorne uma máscara de cliente fornecedor alterada. A máscara tem o seguinte formato L######.## ou seja, começa com uma letra possui uma sequencia númerica separada por ponto.
Ao realizar o select a máscara me retorna F12345.01 para que eu obtenha o valor sem tratado da forma que desejo realizo o seguinte SELECT:

Oracle:

SELECT SubStr(CAMPO_CLI_FOR,2,6)||SubStr(CAMPO_CLI_FOR,-2,2) FROM TABELA WHERE TABLE_CONDITION=CONDIÇÃO

SQL:

SELECT SUBSTRING(CAMPO_CLI_FOR,2,6)+SUBSTRING(CAMPO_CLI_FOR,-2,2) FROM TABELA


O resultado será uma máscara sem a letra e sem o ponto:
########

Abraços e até a proxima.

sexta-feira, 12 de novembro de 2010

Verificar Fragmentação de Índices

Pessoal,

O comando abaixo retorna a fragmentação dos indices ou seja o valor ideal da coluna scan density é 100 ou proximo disso, quanto menor maior é a fragmentação do indice.

DBCC SHOWCONTIG WITH TABLERESULTS, ALL_INDEXES.

Dimensionar crescimento de um banco de dados

Uma das formas de dimensionar a aquisição de espaço para armazenamento de uma base de dados, existe uma fórmula que pode auxiliar na possibilidade de atingir uma precisão maior quanto ao crescimento de uma base. É importante ressaltar que algumas bases de dados possuem um crescimento sazonal de acordo com sua área de negócio, mas a partir de métricas de crescimento obtidas pode se estabelecer uma fórmula de crescimento geométrica de uma base.
Para realizar a aquisição de disco para um servidor por exemplo, e planejar o crescimento da base de forma que a aquisição seja otimizada existe um cálculo. Neste caso não cabem suposições pois podemos adquirir disco para mais e isso interferirá em custo ou para menos e neste caso problemas para o crescimento da base.

Fórmula para determinar o crescimento geométrico de uma base de dados.

Tamanho atual*(1+fator de crescimento mensal em %)x- Qtde de meses para estimar =Estimativa de tamanho após período

Exemplo:
Base atual: 100GB
Crescimento: 2% ao mês
Período = 4 Anos

100*(1.02) 48=258,7070

Ou seja em quatro anos minha base estará com cerca de 260GB