Mysql 5 e Seu Bug de Replicação – Error_code: 1535

18 12 2012

Se por um acaso em sua replicação você se deparar com o erro 1535:

mysql> SHOW SLAVE STATUS\G
Last_Errno: 1535
Last_Error:Table definition on master and slave does not match: Column ### type mismatch - received type 0, table_name has type 246, Error_code: 1535

Acredite, você acaba de se deparar com um BUG de atualização de versão do MySql. Isso acontece porque o campo DECIMAL na versão 4 tem seu formato interno= 0, e a partir da versão 5 seu formato interno mudou para 246,  ao atualizar o MySql de 4 para 5 esse formato não é migrado.

No meu caso eu tenho um servidor MASTER que era 4 e foi atualizado para 5, e o SLAVE  foi instalado já com a versão 5. quando a replicação é ativada, os formatos do campo DECIMAL conflitam e nesse momento acontece o erro.

Para resolver esse problema, é necessário que o formato interno dos campos DECIMAL no MASTER seja igual a 246. Nesse caso, basta usar o ALTER TABLE no campo DECIMAL da tabela no servidor MASTER, os formatos ficaram iguais nas 2 pontas e esse erro não mais acontece.

Porém a tabela já tem dados e a replicação esta ativa, enquanto o problema não é resolvida a replicação fica parada. Por isso é necessário parar a replicação, resolver o problema do formato e depois reativar a replicação:

SLAVE

mysql> stop slave;
mysql> reset slave;

MASTER

mysql> ALTER TABLE table_name MODIFY COLUMN column DECIMAL;

Agora, para reativar a replicação, precisamos do numero do binário e da posição:

mysql> show master status;
+-------------------------------+----------+--------------+------------------+
| File                          | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------------------+----------+--------------+------------------+
| SERVER1-mysql-bin.005435      |  38502167 |              |                 |
+-------------------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

SLAVE

mysql> CHANGE MASTER TO
         MASTER_HOST='SERVER1',
         MASTER_USER='repl',
         MASTER_PASSWORD='XXXXXXX',
         MASTER_PORT=3306,
         MASTER_LOG_FILE='mysql-bin.005435',
         MASTER_LOG_POS=38502167
;
mysql> start slave;
mysql> SHOW SLAVE STATUS\G

E é isso galera espero que possa ajudar como me ajudou !!!!

Referencia: mysql.com

Kenia Milene





Como fazer uma conexão de PHP com MYSQL

17 09 2012

String de conexão dp PHP para Mysql.

Simples rápido fácil e funcional !!!


<?
$host =
"localhost"; //IP do Servidor de Banco. Caso seja o mesmo onde esta desenvolvendo é localhost
$user = "usuario"; //Usuario de conexao no banco ( Crie um no banco caso não tenha)
$pass = "senha"; //Senha $banco = "banco"; //Nome do banco de dados
$conexao = mysql_connect($host, $user, $pass) or die (mysql_error()); mysql_select_db($banco);
?>

 





MSSQL – TEMPDB – O que fazer quando receber um alarme por falta de espaço

18 05 2012

   Inicio esse post com uma parte do artigo do MSDN explicando o que é uma TEMPDB.

   O banco de dados do sistema tempdb é um recurso global disponível a todos os usuários conectados a uma instância de SQL Server e é usado para manter o seguinte:
  • Os objetos de usuário temporários criados explicitamente como: tabelas temporárias globais ou locais, procedimentos armazenados temporários, variáveis de tabela ou cursores.
  • Objetos internos criados por Mecanismo de Banco de Dados do SQL Server, por exemplo, tabelas de trabalho para armazenar resultados intermediários para spool ou classificação.
  • Versões de linha geradas por transações de modificação de dados em um banco de dados que usa a leitura de confirmados usando transações de isolação de controle de versão de linha ou isolação de instantâneo.
  • As versões de linhas geradas por meio de transações de modificação de dados para recursos como: operações de índice on-line, vários conjuntos de resultados ativos (MARS) e gatilhos AFTER.
   As operações em tempdb são registradas minimamente. Isso permite que transações sejam revertidas. tempdb é recriado cada vez que SQL Server é iniciado, de modo que o sistema sempre começa com uma cópia limpa do banco de dados. As tabelas temporárias e procedimentos armazenados são descartados automaticamente ou desconectados e nenhuma conexão fica ativa quando o sistema é desligado. Portanto, nunca há nada em tempdb a ser gravado de uma sessão de SQL Server para outra. As operações de backup e restauração não são permitidas em tempdb.

  Muitas vezes em determinados momentos, você DBA pode se deparar com o um alarme que o database TEMPDB, que é um recurso de armazenamento global temporário esta próximo de atingir 100% de ocupação.
Isso é um problema, mas que pode ser resolvido com algumas ações:

Passo 1 – Identificar a query ofensora

     A melhor forma de identificar é executando uma query de monitoramento que retorne as informações que você precisa para a analise. Para isso execute no console:

select top 10
t1.session_id,
t1.request_id,
t3.hostname,
t3.loginame,
t3.program_name,
db_name (t3.dbid) as dbname,
t1.task_alloc  * (8.0/1024.0) as Alocado_MB, --qtd de paginas
t1.task_dealloc  * (8.0/1024.0)as Desalocado_MB, --qtd de paginas

    (SELECT SUBSTRING(text, t2.statement_start_offset/2 + 1,
          (CASE WHEN statement_end_offset = -1
              THEN LEN(CONVERT(nvarchar(max),text)) * 2
                   ELSE statement_end_offset
              END - t2.statement_start_offset)/2)
     FROM sys.dm_exec_sql_text(t2.sql_handle)) AS query_text,
(SELECT query_plan from sys.dm_exec_query_plan(t2.plan_handle)) as query_plan

from      (Select session_id, request_id,
sum(internal_objects_alloc_page_count +   user_objects_alloc_page_count) as task_alloc,
sum (internal_objects_dealloc_page_count + user_objects_dealloc_page_count) as task_dealloc
       from sys.dm_db_task_space_usage
       group by session_id, request_id) as t1,
       sys.dm_exec_requests as t2,
       sys.sysprocesses as t3
where
t3.loginame <> '' and
t1.session_id = t2.session_id and
(t1.request_id = t2.request_id) and
t1.session_id = t3.spid and
      t1.session_id > 50
order by t1.task_alloc DESC

   O importante nesse caso é analisar o que essa query esta fazendo e o quanto está alocando no momento do pico.
Aguarde alguns segundos e execute novamente, e nesse caso, analise o próximo campo que será o quanto esta liberando de espaço. O que isso quer dizer:
Na verdade se a query esta usando muito espaço, mas ao executar novamente verifica-se que o valor livre esta crescendo, quer dizer que essa query já fez o que precisava e gradativamente esta devolvendo esse espaço a TEMPDB. Nesse caso somente aguarde que a TEMPDB será liberada em breve e o alarme vai parar. O ultimo campo não exibido aqui é o plano de execução.
Caso a query continue crescendo e consumindo um espaço exorbitante da TEMPDB a ação correta a tomar é a seguinte:

Passo 2 – Analizar as configurações da TEMPDB

   A TEMPDB está setada com um valor X pré-supondo que é o necessário para o armazenamento necessário das transações.
Para verificar essas informações clique com o botão direito no database TEMPDB > Properties, como mostra a figura abaixo.

   Clique em files, como mostra a figura abaixo:

   O arquivo lógico que precisamos analisar chama-se TEMPLOG, verifique para qual caminho fisico que ele esta apontando, que nesse caso é o *E:* (Não exibido aqui, mas fica ao lado da imagem abaixo) e clique  no botão ao lado das informações de tamanho como mostra a figura a seguir

Nesse momento será exibidos os parâmetros de crescimento do templog, como mostra a figura aseguir.
Caso haja um crescimento de informações, ela irá crescer gradativamente, desde que o parâmetro AutoGrowth esteja setado.
No parâmetro File Growth está definido como será esse crescimento, nesse caso a cada 1GB.
E  por fim analisar o parâmetro Maximum File Size, que define o valor máximo total que esse database pode crescer fisicamente no disco, nesse caso 20GB.

Antes de alterar qualquer parâmetro é importante saber o quanto espaço temos livre no disco em que o database esta armazenado, como vimos anteriormente.
Caso o disco tenha espaço aumente o valor máximo, gradativamente a cada 10GB, até que seja sanado o problema. Depois, quando tudo terminar volte o valor, pois essa é apenas uma medida paliativa.

Também é possivel fazer esse procedimento via código:

USE [master]
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'templog', MAXSIZE = 30720000KB , FILEGROWTH = 102400KB )
GO

Passo 3 – Estudando a query ofensiva e sugerindo tunning para melhoria.

Aumentar tamanho de disco, na verdade é uma medida de emergência.
O que deve ser feito com calma é um estudo da query ofensiva e resolver definitivamente o problema. Para isso é necessário analizar o plano de execução dessa query para entender onde esta o auto consumo do banco.
Para isso clique no link que o aparece no resultado da execução da query de monitoramento ( query mostrada no inicio desse documento ).
Será exibido uma pagina em xml com o plano de execução, como mostra a figura a seguir:

    Esse é o plano de execução da query ofensiva. O SQL Server automaticamente detecta onde esta o problema e sugere uma ação de “tunning” para melhorar a query. Essa sugestão é mostrada no cabeçalho da página como mostra o topo da imagem.
Ao executar a query de monitoramento sabemos qual host, login e programa esta executando a tal query. Entre em contato com o departamento responsável por essa query notificando o auto consumo.

Passo 4 – Matando o SQL Ofensor !!!

Quando nada resolver … é só matar essa query.
Para isso é necessário primeiro descobri o SPID dessa query com o comando a seguir.

SELECT @@SPID AS 'ID', SYSTEM_USER AS 'Login Name', USER AS 'User Name'

Agora é só matar o processo com o comando:

kill SPID

Passo 5 – Algumas referência.


Artigo Completo MSDN Sobre TEMPDB

http://www.red-gate.com/specials/Grant.htm

Juarez Silva, DBA Senior  que contribuiu com o desenvolvimento do script de monitoração.

Espero ter ajudado um pouco …

Abraços

Kenia Milene





Uma Rapidinha com AIX

4 08 2010

Alguem conhece o Mução ??? aquele das pegadinha nordestinas ????
Pois então …. te apresento o AIX …

Pegadinha do AIX … hehehehehehe

(AIX) Alo …
(DBA) Sim ….
(AIX) Seu script não esta funcionando …
(DBA) Como assim ????
(AIX) Não esta !!!! esta retornando um erro …
(AIX) … Seu incompetente … o problema é no seu banco !!!!
(DBA) RRRRRR quem vc pensa que é ?????
(DBA) Deixa eu ver o erro …
(AIX) 3074FEB7 0515214310 T H fscsi0 ADAPTER ERROR
(DBA) Que estranho ….
(DBA) Isso é erro de disco … não de banco …
(AIX) Se vira nego … seu script que retornou !
(DBA) Ta bem mané .. vou te provar que o problema é de Hardware e não do banco …
(DBA) E só pra calar sua boca … o script é de gerenciamento de disco … mas vamos lá
(AIX) Ta … to aguardando !!!
(DBA)

# errpt -aj 3074FEB7 > disk_error.txt
vi disk_error.txt
/3074FEB7

LABEL: FSCSI_ERR4
IDENTIFIER: 3074FEB7

Date/Time: Fri May 14 10:05:32
Sequence Number: 84628
Machine Id: XXXXXXXXXXXX
Node Id: SERVER
Class: H
Type: TEMP
Resource Name: fscsi0
Resource Class: driver
Resource Type: efscsi
Location: U0.1-P2-I3/Q1

Description
ADAPTER ERROR

Probable Causes
ADAPTER HARDWARE OR CABLE
ADAPTER MICROCODE
FIBRE CHANNEL SWITCH OR FC-AL HUB

Failure Causes
ADAPTER
CABLES AND CONNECTIONS
DEVICE

Recommended Actions
PERFORM PROBLEM DETERMINATION PROCEDURES
CHECK CABLES AND THEIR CONNECTIONS
VERIFY DEVICE CONFIGURATION</
p>

(DBA) Alo … AIX ????
(AIX) Sim …
(DBA) Não disse ???
(DBA) O problema é no disco mané …
(DBA) VocÊ tem um problema físico …
(DBA) Pode ser o disco, os cabos, HBA, etc ….
(DBA) Sendo assim … liga pro seu adm. de rede !!
(AIX) HUMMM …..
(AIX) Ta ….
(DBA) Da proxima vez tenta ser mais esperto ta bem ???
(DBA) tu tu tu tu tu tu tu tu tu tu tu tu tu tu tu (Desligou o telefone)

É isso ai minha gente ….
Mais uma vez provando que nem sempre o problema é do banco …
Fiz uma brincadeira pra descontrair … mas a coisa é séria …

Fica a dica …
Ate +
Kenia Milene





Como Fazer Reorg do SQL Server 2005

30 10 2009

Mudar  a Forma do Recovery

O primeiro passo seria  separar o Log e os Datafiles , mas como o banco será alterado para o modo Recovery Simple essa ação não será necessário.

Recovery Simple

Esse é o método que será adotado para as bases de dados. O simple não vai fazer gerar mais logs de transações, mais o backup full continuará sendo feito normalmente.

Ao fazer uma transação, essa é armazenada no datafile e no log de transação ao mesmo tempo, com o simple essa transação será armazenada somente no datafile.

Alterar o modo do banco para Simple:

ALTER DATABASE BANCO SET RECOVERY SIMPLE

Ou ainda pelo Management Studio

simple

Comando para fazer o backup da base de dados:

BACKUP DATABASE BANCO TO DISK = ‘CAMINHO\BANCO.BAK’

Ou pelo management Studio

backup

Reindex do Banco

Outro ponto importante é fazer o reindex dos índices das tabelas.

Existe uma Stored Procedure chamada sp_MSforeachtable que permite executar de forma recursiva umreindex para todas as tabelas dentro de um banco de dados com a utilização de uma única linha de código.

EXEC sp_MSforeachtable @command1= “DBCC DBREINDEX (‘?’, ”, 80)”

Importante saber que ao fazer o reindex o SQL faz um clone do banco, sendo assim ele cresce 100%, providencie espaço caso não haja.

SHRINK

No Microsoft SQL Server 2005, você pode reduzir um arquivo de log de transação ou os datafiles de um banco de dados para remover páginas não utilizadas. O mecanismo de banco de dados reutiliza espaço com eficiência.

Primeiramente faça o shrink do banco:

DBCC SHRINKDATABASE (N ‘BANCO’ )

Logo em seguida faça o Shirink dos arquivos ( datafiles, log)

DBCC SHRINKFILE (N ‘DATAFILE’ , 0, TRUNCATEONLY)

DBCC SHRINKFILE (N ‘LOG’ , 0, TRUNCATEONLY)

TRUNCATEONLY

Libera o espaço livre no final do arquivo para o sistema operacional, mas não realiza qualquer movimento dentro do arquivo. O datafile é reduzida apenas a ultima extensão alocada.

Ou pelo Manager

shrirink

Olha …. Consegui números bem significativos …

BANCO 1
Antes:  Database – 23GB   / Log – 180MB
Depois:  Database – 22GB / Log – 20MB
Tempo: Reindex – 31 Min / Shrink – 10Min

BANCO2
Antes: Database – 5GB / Log – 504KB
Depois:  Database – 2,8GB / Log – 504KB
Tempo: Reindex – 30 Min / Shrink – 5Min

BANCO3

Antes: Database – 20GB / Log – 7,5GB
Depois:  Database – 20GB / Log – 20MB
Tempo: Reindex – 45 Min / Shrink – 15Min

E é isso ai minha gente

Beijão

Kenia Milene





CHUCK NORRIS O MELHOR DBA DO MUNDO

13 05 2009

Bom como todos sabem o CHUCK NORRIS é o maior dos maiores ….
E é claro tem a sua forma peculiar de administrar um banco de dados

  • CHUCK NORRIS não faz DELETEs. Ele olha para os registros e eles correm de medo.
  • CHUCK NORRIS não cria PKs. Os registros simplesmente não atrevem-se a duplicar.
  • CHUCK NORRIS não usa LOG. Ele lembra de todos registros que alterou.
  • CHUCK NORRIS não usa LOG. Ele não vai falhar.
  • CHUCK NORRIS não cria INDEXes. Ele sabe que os registros retornarão o mais rápido que puderem.
  • CHUCK NORRIS sabe todos os erros do ORACLE de cor. Porque ele criou eles.
  • CHUCK NORRIS não faz cursos de ORACLE. A ORACLE é que faz cursos com ele.
  • CHUCK NORRIS instala o ORACLE sem ler o manual. (Quem você pensa que é para ter tentado isso?)
  • CHUCK NORRIS instala o ORACLE em um 486. Rodando KURUMIM. Em 2 minutos.
  • CHUCK NORRIS instala o MSSQL Server em um Pentium 100MHZ. Rodando Solaris. A partis dos fontes.
  • CHUCK NORRIS instala o DB2 em um 486. Rodando WINDOWS VISTA. Sem HD.
  • CHUCK NORRIS não tem Certificação. São as empresas que tentam tirar Certificação em CHUCK NORRIS. Em vão.
  • CHUCK NORRIS tem IGNORE CONTRAINTS automático. Ninguém restringe nada a CHUCK NORRIS. Ninguém.
  • CHUCK NORRIS SABE qual o problema de performance do banco. Ele só está dando uma chance do banco se arrepender. 5… 4… 3…
  • CHUCK NORRIS não cria STORED PROCEDURES. Todas suas Queries já se armazenam no banco, tentanto se esconder. Mas é inútil.

    CHUCK NORRIS não faz Modelo de Dados. Ele encara o banco até que ele faça o modelo sozinho.

  • CHUCK NORRIS instala o ORACLE sem a interface gráfica. E sem a interface texto. (Pergunte a ele você!)

    CHUCK NORRIS não dá DROP TABLE. Ele dá ROUNDHOUSE KICK TABLE.

  • MSSQL SERVER É muito mais rápido que ORACLE. Basta que o DBA seja CHUCK NORRIS.
  • Uma vez adaptaram o ROUNDHOUSE KICK para o ORACLE. Assim nasceu o TRUNCATE TABLE.
  • Uma vez CHUCK NORRIS deu um ROUNDHOUSE KICK em um banco poderoso. Hoje ele é conhecido por ACCESS.
  • SELECT SUM (FORÇA) FROM CHUCK_NORRIS; Internal error. Don ‘ t call the support.
  • SELECT CHUCK_NORRIS; Drop database sucessful.
  • SELECT ROUNDHOUSE_KICK FROM CHUC… Lost connection.
  • DELETE FROM CHUCK_NORRIS. Not Found. (Ele está atras de você, a ponto de dar um ROUNDHOUSE KICK!!!)
  • Se disser ao DBA CHUCK NORRIS que ” o problema está no banco “, é melhor que esteja se referindo ao Itaú.
  • TRIGGERS tem este nome porque CHUCK NORRIS sempre ameaçava atirar no banco quando ele não fazia algo automático.
  • Megabyte, Gigabyte, Terabyte, Petabyte, Exabyte, Chuckbite.
  • ORACLE tem as versões Personal, Standard, Enterprise e ChuckNorris Edition. Mas nenhum computador é rápido o suficiente para rodá-lo.

E era isso …..

Kenia Milene





Scripts Úteis Para o Dia a Dia no Oracle (CANIVETE SUIÇO)

20 02 2009

Ola Galera,

Bom pra quem é dba sabe que não se vive sem aqueles scripts que nos auxiliam no dia a dia, afinal não é todo mundo que tem toad ou alguma ferramenta gráfica por perto ou mesmo homologado pela empresa.

Então .. La vai um pequeno canivete suíço para lidar com o oracle.

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

– VERIFICA INSTANCIA

SELECT * FROM GLOBAL_NAME;

DUMP

– VERIFICAR QUAIS SÃO OS USUÁRIOS DO SISTEMA

SELECT USERNAME FROM DBA_USERS
WHERE USERNAME LIKE ‘USER%‘;

– CONTA OBJETOS DO SCHEMA

SELECT COUNT(OBJECT_TYPE), OBJECT_TYPE
FROM DBA_OBJECTS
WHERE OWNER LIKE ‘USER%
GROUP BY OBJECT_TYPE;
SPOOL OFF

– NO TERMINAL LINUX

$export ORACLE_SID=INSTANCE

$exp system@INSTANCE BUFFER=1000000 FILE=EXP_INSTANCE_USER_DATA.DMP LOG=EXP_INSTANCE_USER_DATA.LOG OWNER=USUÁRIOS LISTADOS CONSISTENT=Y

gzip EXP_INSTANCE_USER_DATA*

DESATIVAÇÃO DE UM SCHEMA

– VERIFICAR SE TEM ALGUM USUÁRIO USANDO O SISTEMA

SELECT SADDR, SID, USERNAME, LOGON_TIME, STATUS, OSUSER, MACHINE, PROGRAM
FROM V$SESSION
WHERE USERNAME LIKE ‘USER%‘;

– VERIFICAR QUAIS SÃO OS USUÁRIOS DO SISTEMA

SELECT USERNAME FROM DBA_USERS
WHERE USERNAME LIKE ‘USER%‘;

– VERIFICA ATRIBUTOS DO USUÁRIO

SELECT * FROM DBA_USERS
WHERE USERNAME LIKE ‘USER%‘;
SELECT * FROM DBA_TAB_PRIVS
WHERE GRANTOR LIKE ‘USER%‘;

– VERIFICA PREVILEGIOS DO USUÁRIO

SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE LIKE ‘USER%‘;
SELECT * FROM DBA_ROLE_PRIVS
WHERE GRANTEE LIKE ‘USER%‘;

– CONTA OBJETOS DO SCHEMA

SELECT COUNT(OBJECT_TYPE), OBJECT_TYPE
FROM DBA_OBJECTS
WHERE OWNER LIKE LIKE ‘USER%
GROUP BY OBJECT_TYPE;

– DESATIVA USUÁRIO

ALTER USER USER ACCOUNT LOCK;
ALTER USER USER PASSWORD EXPIRE;

– VERIFICA STATUS DA CONTA

SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS
WHERE USERNAME LIKE ‘USER%’;
SPOOL OFF

DESATIVAÇÃO DE UMA INSTANCIA

– VERIFICAR SE TEM ALGUM USUÁRIO USANDO O SISTEMA

SELECT SADDR, SID, USERNAME, LOGON_TIME, STATUS,
OSUSER, MACHINE, PROGRAM
FROM V$SESSION;

– VERIFICAR QUAIS SÃO OS USUÁRIOS DO SISTEMA

SELECT USERNAME FROM DBA_USERS ;

– VERIFICA ATRIBUTOS DO USUÁRIO

SELECT * FROM DBA_USERS;

SELECT * FROM DBA_TAB_PRIVS;

– VERIFICA PREVILEGIOS DO USUÁRIO

SELECT * FROM DBA_SYS_PRIVS;

– 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;

– NO TERMINAL

EXPORT ORACLE_SID=INSTANCE

SQLPLUS / AS SYSDBA

SQL> SHUTDOWN IMMEDIATE;

EXECUÇÃO DE SCRIPT

– VERIFICAR QUAIS SÃO OS USUÁRIOS DO SISTEMA

SELECT USERNAME FROM DBA_USERS
WHERE USERNAME
LIKE ‘USER%;

– VERIFICA SE O OBJETOS JÁ EXISTE

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE,
CREATED, LAST_DDL_TIME, STATUS
FROM ALL_OBJECTS
WHERE OWNER LIKE ‘USER%
AND OBJECT_NAME = ‘OBJECT_NAME’;

– CONTA OBJETOS DO SCHEMA

SELECT COUNT(OBJECT_TYPE), OBJECT_TYPE
FROM DBA_OBJECTS
WHERE OWNER LIKE ‘USER%
GROUP BY OBJECT_TYPE;

– CONTA OBJETOS INVALIDOS

SELECT COUNT (*)
FROM DBA_OBJECTS
WHERE STATUS=’INVALID’
AND OWNER LIKE ‘USER%‘;

– VERIFICA OBJETOS INVALIDOS

SELECT OBJECT_TYPE, OBJECT_NAME, STATUS
FROM DBA_OBJECTS
WHERE STATUS=’INVALID’
AND OWNER LIKE ‘USER%‘;

– EXECUTA O SCRIPT

CONN USER@INSTANCE

@C:\CAMINHO\SCRIPT.SQL

CONN SYSTEM@INSTANCE

– VERIFICA SE O OBJETOS JÁ EXISTE

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE,
CREATED, LAST_DDL_TIME, STATUS
FROM ALL_OBJECTS
WHERE OWNER LIKE ‘USER%
AND OBJECT_NAME = ‘OBJECT_NAME’;
SELECT * FROM DBA_TAB_PRIVS
WHERE GRANTOR LIKE ‘USER%’;

– CONTA OBJETOS DO SCHEMA

SELECT COUNT(OBJECT_TYPE), OBJECT_TYPE
FROM DBA_OBJECTS
WHERE OWNER LIKE ‘USER%
GROUP BY OBJECT_TYPE;

– CONTA OBJETOS INVALIDOS

SELECT COUNT (*)
FROM DBA_OBJECTS
WHERE STATUS=’INVALID’
AND OWNER LIKE ‘USER%‘;

– VERIFICA OBJETOS INVALIDOS

SELECT OBJECT_TYPE, OBJECT_NAME, STATUS
FROM DBA_OBJECTS
WHERE STATUS=’INVALID’
AND OWNER LIKE ‘USER%‘;

– GERA SCRIPTS DOS OBJETOS INVALIDOS

SELECT ‘ALTER’||’ ‘|| OBJECT_TYPE ||’ ‘||OWNER ||’.'|| OBJECT_NAME || ‘ COMPILE;’
FROM DBA_OBJECTS
WHERE STATUS=’INVALID’
AND OWNER LIKE ‘USER%‘;

– VERIFICA OBJETOS INVALIDOS

SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
FROM DBA_OBJECTS
WHERE STATUS=’INVALID’
AND OWNER LIKE ‘USER%‘;
SPOOL OFF

CRIACAO DE USUÁRIO

– VERIFICAR SE EXISTE ESSE USUÁRIO NO SISTEMA

SELECT USERNAME FROM DBA_USERS
WHERE USERNAME LIKE ‘USER%‘;

– CRIAR A TABLESPACE PARA O USUÁRIO

CREATE TABLESPACE INSTANCE_SCHEMA_01
DATAFILE ‘CAMINHO/INSTANCE_SCHEMA.DBF’ SIZE 64M
AUTOEXTEND ON NEXT 1M
SEGMENT SPACE MANAGEMENT AUTO;

– VERIFICA SE TEM ALGUMA ROLE PARA ESSE USUÁRIO

SELECT * FROM DBA_ROLES WHERE ROLE LIKE ‘%USER%‘;

SELECT * FROM DBA_SYS_PRIVS WHERE LIKE ‘%USER%‘;

SELECT * FROM DBA_TAB_PRIVS WHERE LIKE ‘%USER%‘;

– CRIAR O USUÁRIO

CREATE USER USER
IDENTIFIED BY ‘SENHA
DEFAULT TABLESPACE INSTANCE_SCHEMA_01
TEMPORARY TABLESPACE TEMP;

– APLICA GRANT

GRANT RESOURCE, CONNECT TO USER;

– VERIFICAR SE O USUÁRIO FOI CRIADO

SELECT * FROM DBA_USERS
WHERE USERNAME LIKE ‘USER%‘;

– VERIFICA ROLES DO USUARIO CRIADO

SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE LIKE ‘USER%‘;
SELECT * FROM DBA_ROLE_PRIVS
WHERE GRANTEE LIKE ‘USER%‘;

ALTERAR SENHA

– VERIFICAR OS USUÁRIOS DO SISTEMA

SELECT * FROM DBA_USERS
WHERE USERNAME LIKE ‘USER%‘;

– ALTERA A SENHA

ALTER USER USER IDENTIFIED BY ‘SENHA‘;

– VERIFICAR OS USUÁRIOS DO SISTEMA

SELECT * FROM DBA_USERS
WHERE USERNAME LIKE ‘USER%‘;
SPOOL OFF

E era isso ai pessoal, espero que seja útil !!
Se alguém tiver mais algum script bacana só postar lá nos comentários !!

Abraços
Kenia Milene





Procedimento de Instalação do Oracle 9i (9.2.0.7.0) no Red Hat Linux Enterprise AS4

28 10 2008

Pois é minha gente …. já estamos no 11G mas temos muitas bases de produção em 9i, e o que fazemos em um caso de crash do servidor onde temos que reinstalar sistema operacional, banco .. TUDO !!!!!!
Como diria o poeta Carlos Drummond de Andrade:

“ E agora, José?

A festa acabou,

a luz apagou,

o povo sumiu,

a noite esfriou,

e agora, José?

e agora, Você? …”

Agora amiguinho senta la na frente do servidor e mão na massa !!!!

Bom .. o Marcos Camargo – DBA Oracle me enviou um procedimento de instalação do Oracle 9i no Red Hat Enterprise (Case dele) que acho bacana publicar, afinal …. pode ser útil !!!!

01. Instalar o RedHat AS4 no servidor

Configuração de Hardware:

- ITAUTEC 1140S
- P4 2.8 (Ghz 200 x 14.0)
– RAM 512 MB
- BIOS 925 x/XENEO w705311cv1.7b

Verificar qual o tipo de Sistema Operacional

# uname –a
# rpm -qa –queryformat “%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n” | sort

02. Instalar os Componentes de SO Requeridos

Verificar a “Nota 303859.1 – Requirements for Installing Oracle 9iR2 on RHEL 4″

2.1. Minimum Software Requirement

Componentes de SO requeridos

- compat-db-4.1.25-9
- compat-gcc-32-3.2.3-47.3

- compat-gcc-32-c++-3.2.3-47.3

- compat-oracle-rhel4-1.0-3

- compat-libcwait-2.0-1
- compat-libgcc-296-2.96-132.7.2

- compat-libstdc++-296-2.96-132.7.2

- compat-libstdc++-33-3.2.3-47.3
- gcc-3.4.3-9.EL4
- gcc-c++-3.4.3-9.EL4

- gnome-libs-1.4.1.2.90-44
- gnome-libs-devel-1.4.1.2.90-44
- libaio-devel-0.3.102-1

- libaio-0.3.102-1

- make-3.80-5

- openmotif21-2.1.30-11

- xorg-x11-deprecated-libs-devel-6.8.1-23.EL
- xorg-x11-deprecated-libs-6.8.1-23.EL

Baixar o “Patch 4198954 – COMPATIBILITY PACKAGES FOR ORACLE ON RHEL 4″

- Descompactar e executar:

# unzip p4198954_40_LINUX.zip
# rpm -ihv compat-oracle-rhel4-1.0-5.i386.rpm
# rpm -ihv compat-libcwait-2.1-1.i386.rpm

Depois de instalar o Patch 4198954, alguns erros podem ocorrer no Shutdown e Startup do servidor.

2.2. Environment

Variável de configuração requerida

# export LD_ASSUME_KERNEL=2.4.19(.bash_profile do oracle)

Verificar os parâmetros dos semáforos
# cat /etc/sysctl.conf

Alterar as configurações do kernel em /etc/sysctl.conf

#nome do host completo !!
kernel.hostname = yourhost.yourdomain.com

#nome correto do domínio !!
kernel.domainname = yourdomain

fs.file-max = 327679

Semáforos requeridos do kernel:

# echo 100 > semmni
# echo 256 > semmns
# echo 100 > semopm
# echo 100 > semmsl
# echo 100 > shmmni
# echo 2097152 > shmall
# echo 2147483648 > shmmax

Para ativar as novas configurações

# sysctl -p

O comando deve mostrar o nome do host completo

# hostname
hostname.domainname

Os seguintes ajustes do ambiente são requeridos para o usuário do Unix que executa a instalação (por exemplo oracle)

# umask
0022

# echo $LD_ASSUME_KERNEL
2.4.19

Se algum pacote de Java estiver instalado no sistema, desconfigure todas as variáveis de ambiente de Java (por exemplo JAVA_HOME).

O usuário do Unix que executa a instalação (por exemplo oracle) não deve mandar o Oracle instalar as variáveis relacionadas ajustadas pelo defeito. Por exemplo, ajustando ORACLE_HOME, o PATH, LD_LIBRARY_PATH para incluir binários do Oracle em .profile , .bash_profile , .log na lima e /etc/profile.d devem completamente ser evitados.

Mover a biblioteca e alterar o path

# mv /usr/lib/libcwait.so /lib/libcwait.so

# cat /etc/ld.so.preload
/usr/lib/libcwait.so (*** Alterar esta linha para /lib/libcwait.so )

# vi /etc/ld.so.preload

Depois da alteração, o arquivo deverá mostrar:

# cat /etc/ld.so.preload
/lib/libcwait.so

Adicionar os parametros de semáforos

# cd /proc/sys/kernel

echo 100 32000 100 100 > sem
echo 2147483648 > shmmax
echo 4096 > shmmni
echo 2097152 > shmall
echo 65536 > /proc/sys/fs/file-max

ulimit -n 65536

echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range

ulimit -u 16384

Executar o comando para ativar estas novas configurações

# sysctl -p

03. Criar diretórios

# mkdir /ora9i

04. Copiar as mídias para o diretório

# cp /media/cdrom/ship_9204_linux_disk1.cpio.gz /ora9i/
# cp /media/cdrom/ship_9204_linux_disk2.cpio.gz /ora9i/
# cp /media/cdrom/ship_9204_linux_disk3.cpio.gz /ora9i/

05. Criar os usuários e grupos necessários para instalação e administração do Banco

# groupadd dba
# groupadd oinstall
# groupadd oper
# useradd -c DBA -g oinstall -G dba oracle

Isto irá criar o user “oracle” com o grupo primário “oinstall” e secundário “dba”

06. Criar os diretórios do Oracle para instalação

# mkdir /u01 /u02
# chown oracle.dba /u01 /u02
# chmod 755 /u01 /u02

07. Criar uma senha para o usuário “oracle”

# passwd oracle

New UNIX password:
Retype new UNIX password:

08. Criar as variáveis de ambiente para o user oracle

# su – oracle

$ pwd
/home/oracle

$ ls –la

Editar .bash_profile e incluir as seguintes abaixo

$ vi .bash_profile
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/9.2.0.7.0

*** muda conforme o banco a ser criado ***
ORACLE_SID=prd

PATH=$PATH:$ORACLE_HOME/bin
LD_ASSUME_KERNEL=2.4.19
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/bin:$ORACLE_HOME/network/lib

export PATH ORACLE_BASE ORACLE_HOME ORACLE_SID
export LD_LIBRARY_PATH LD_ASSUME_KERNEL

09. Alterar o owner/grupo Recursivamente dos diretórios

# chown -R oracle.oinstall /ora9i
# chown -R oracle.oinstall /Download_Oracle9i

10. As Mídias

Descompactar as mídias em /ora9i como usuário oracle

$ gunzip ship_9204_linux_disk1.cpio.gz
$ gunzip ship_9204_linux_disk2.cpio.gz
$ gunzip ship_9204_linux_disk3.cpio.gz

queimar as mídias

$ cpio -idmv < ship_9204_linux_disk1.cpio
$ cpio -idmv < ship_9204_linux_disk2.cpio
$ cpio -idmv < ship_9204_linux_disk3.cpio

11. Executar a instalação com Oracle Universal Installer

** DESATIVE A TECLA NUM LOCK, SENÃO A INSTALAÇÃO FICA TRAVADA !!! ***
Essa foi uma indicação do suporte da Oracle !!!

** Por problemas causados pelo o dicionário de dados Oracle, o export/import não funciona corretamente. Deve-se instalar, atualizar e depois criar os bancos desejados. ***

$ cd /ora9i/Disk1
$ ll

$ ./runInstaller

Quando for solicitado, abrir outra janela e logar com root.

$ su – root
login:

Como root:

# cd /u01/app/oracle/product/9.2.0.7.0
# ./root.sh

12. Aplicar o patchset 9.2.0.7

$ mkdir /ora9i/patch_set_9207

Copiar do CD01 o arquivo p4163445_9207_LINUX.zip

$ cd /ora9i/patch_set_9207
$ unzip p4163445_9207_LINUX.zip
$ cd disk1

Selecionar o OraHome

$ ./runInstaller

Executar numa janela em separado

$ root.sh

13. Dicas úteis

* character set.: WE8ISO8859P1

* diretório_base: /u01/app/oracle/product/9.2.0.7.0

* grupo unix….: oinstall

* database file.: /u01/app/oracle/oradata

* ativar console:

$ cd $ORACLE_HOME/bin
$ oemapp console

* Verificar a configuração do listener.ora

* para ativar/desativar via dbstart/dbshut

* Comentar no sqlnet.ora

### SQLNET.AUTHENTICATION_SERVICES= (NTS) ### SR.6242748.993 – 08/04/2007 ###

É é isso ai pessoal ..

Marcos, Obrigado por contribuir com o Blog, e as duvidas que o pessoal postar fique a vontade pra responder !!!!

Kenia Milene





Exportar e importar dados do SQL Server com linha de comando (BCP)

15 10 2008

 Bom amigos … todos conhecem o SQL Server e todas as suas ferramentas gráficas não é mesmo ????

 Pois existe uma maneira rápida, fácil e pratica de exportar (dump) e importar (restore) de uma base de dados SQL Server sem usar essas pesadas ferramentas.

O BCP (Bulk Copy Program) nos da à possibilidade de exportação e importação de dados através de uma simples linha de comando.

Para facilitar a vida é mais pratico criar arquivos bat que segue abaixo:

 

Exportanto

 

Bcp_exp.bat

 

Set Server=IP

Set DbUser=sa

Set DbPwd=SENHA

 

Bcp BD..TABELA OUT CAMINHO\tabela.bcp –o CAMINHO\tabela.log_exp –S%Server% -U%DbUser% -P%DbPwd% -c

Bcp BD..TABELA2 OUT CAMINHO\tabela2.bcp –o CAMINHO\tabela2.log_exp –S%Server% -U%DbUser% -P%DbPwd% -c

 

pause

 

Muito importante lembrar que existem problemas de versão, ou seja, exportação e importação entre Sql Server 2000 e 2005. Sendo assim para que não existam problemas, usamos o parâmetro –c

 

Importando

 

Bcp_imp.bat

 

Set Server=IP

Set DbUser=sa

Set DbPwd=SENHA

 

Bcp BD..TABELA IN CAMINHO\tabela.bcp –o CAMINHO\tabela.log_imp –S%Server% -U%DbUser% -P%DbPwd% -c

Bcp BD..TABELA2 IN CAMINHO\tabela2.bcp –o CAMINHO\tabela2.log_imp –S%Server% -U%DbUser% -P%DbPwd% -c

 

pause

 

PS: Substitua os valores em azul negrito pelos seus dados

E era isso ….

Boa Sorte !!!

 

Kenia Milene





Instalando e Implementando DBI-LINK no PostgreSQL

29 05 2008

Existem ocasiões onde temos 2 servidores distintos e precisamos de um merge dessas informações, como obter o retorno de um select se tenho dados em 2 servidores separados ???????

Seus problemas acabaram!!!! … Nesse caso temos 2 soluções DBLINK e DBI-LINK, sendo que se os 2 servidores forem postgres, use dblink mas se um for postgres e outro for Oracle, Mysql ou seja la qual banco … usamos o dbi-link.

Vendo o site da pgcon 2008 Internacional achei uma palestra muito bacana do David Fetter sobre o DBI-LINK 3.0 resolvi testar esse bicho … e querem saber ??? é muito bacana !!!!!!.

Antes de começar só vamoslembrar que quando usamos esse tipo de recurso temos que levar em conta que ficamos “refens” da rede, seja interna ou externa, uma vez que as informações estão em servidores distintos

Instalando o postgres

Baixando pacotes

# aptitude install ssh
# aptitude install gcc
# aptitude install make
# aptitude install libreadline-dev
# aptitude install zlib1gdev
# aptitude install zlibc
# aptitude install zlib1g-dev
# aptitude install libio-zlib-perl
# aptitude install perl
# aptitude install libyaml-perl
# aptitude install libconfig-yaml-perl
# aptitude install libyaml-syck-perl
# aptitude install libtest-yaml-meta-perl
# aptitude install libtest-yaml-valid-perl

Compilando
$ tar -xvzf postgresql-8.3.1.tar.gz

$ mv postgresql-8.3.1 postgresql-8.3
$ cd postgresql-8.3
$ cd src/include/
$ vi pg_config_manual.h

#define BLCKSZ 8192 – Usado em BI por isso o bloco de gravação é maior
#define BLCKSZ 4096 –
Usado em Transacionais por isso o bloco de gravação é menor

$ cd ../../
$ ./configure –prefix=/home/postgres/postgresql-8.3 –with-python –with-perl
$ make $$ make install

Criando o cluster

O diretório pg83 deve ser criado para alocar o novo cluster

$ mkdir -p /postgres/pg83/dados/
$ /home/postgres/postgresql-8.3/bin/initdb -D /postgres/pg83/dados/ –encoding=latin1

Subindo o banco

$ cd /postgres/pg83/dados/
$ /home/postgres/postgresql-8.3/bin/pg_ctl -D . start

Baixando os pacotes para para DBI-LINK

Para esse procedimento são necessários 2 pacotes: DBI-LINK e o DBD-Pg

Instalando os pacotes

Esse recurso para ser instalado necessita de alguns pré requisitos, ou seja, alguns pacotes instalados:

DBI-LINK

build, test, and install Perl 5 (at least 5.6.1)

BDB-PG

build, test, and install Perl 5 (at least 5.6.1)
build, test, and install the DBI module (at least 1.52)

build, test, and install PostgreSQL (at least 7.4)
build, test, and install Test::Simple (at least 0.47)

Descompacte os pacotes e execute o Makefile.pl para que a instalação seja feita:

$ tar – xvjf dbi-link-2.0.0.tar.bz2
$ cd dbi-link-2.0.0
$ perl Makefile.PL
Writing Makefile for dbi-link

$ tar -xvzf DBD-Pg-2.7.2.tar.gz

O Makefile padrão usa algumas variáveis que devem ser definidas antes da instalação:
POSTGRES_HOME
– Instalação do PostgreSQL
POSTGRES_LIB
– bilbiotecas do PostgreSQL
POSTGRES_INCLUDE
– Diretório de include do PostgreSQL

Para fazer o export das variáveis:

$ export POSTGRES_LIB=”/home/postgres/postgresql-8.3/lib/”
$ export POSTGRES_HOME=”/home/postgres/postgresql-8.3/”
$ export POSTGRES_INCLUDE=”/home/postgres/postgresql-8.3/include/”

Os primeiros passos da instalação devem ser feitos com o usuário comum postgres:

$ cd DBD-Pg-2.7.2
$ perl Makefile.PL
Configuring DBD::Pg 2.7.2
PostgreSQL version: 80301 (default port: 5432)
POSTGRES_HOME: /home/postgres/postgresql-8.3/
POSTGRES_INCLUDE: /home/postgres/postgresql-8.3/include/
POSTGRES_LIB: /home/postgres/postgresql-8.3/lib/
OS: linux
Checking if your kit is complete…
Looks good
Using DBI 1.604 (for perl 5.010000 on i486-linux-gnu-thread-multi) installed in /usr/lib/perl5/auto/DBI/
Writing Makefile for DBD::Pg

$ make

O make install criará alguns diretórios em locais de sistema que não é permitido a usuário comum, sendo assim execute-o com o usuário root

# make install

Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/local/lib/perl/5.10.0/auto/DBD/Pg/Pg.so
Installing /usr/local/lib/perl/5.10.0/auto/DBD/Pg/Pg.bs
Installing /usr/local/lib/perl/5.10.0/Bundle/DBD/Pg.pm
Installing /usr/local/lib/perl/5.10.0/DBD/Pg.pm
Installing /usr/local/man/man3/Bundle::DBD::Pg.3pm
Installing /usr/local/man/man3/DBD::Pg.3pmWriting /usr/local/lib/perl/5.10.0/auto/DBD/Pg/.packlist
Appending installation info to /usr/local/lib/perl/5.10.0/perllocal.pod

Adicionando um DBI-LINK

Antes de tudo é necessário criar a linguagem plperl no banco em questão, pois o dbi-link foi desenvolvido em PL/PERL.

$ createlang plperlu portgres

Agora rode o script que criará toda estrutura dbi-link

$ psql -p 5432 < /home/postgres/dbi-link-2.0.0/dbi_link.sql

Note que no banco foi criado o schema dbi_link, com 3 tabela, 26 funções e 1 trigger

Adicionando uma conexão Remota

MYSQL

Criando nova conexão

SELECT dbi_link.make_accessor_functions(
‘dbi:mysql:database=teste;host=localhost’,Driver:banco:host
‘root’, – usuário
”, – senha
‘— AutoCommit: 1 RaiseError: 1 ‘,
– atributos do banco remoto
NULL,
– ambiente de conexão
NULL,
– schema remoto
NULL
, — catalogo remoto
‘teste’
— schema local

Usando a conexão

SELECT * FROM teste.tabela;

Transferindo dados de um banco para outro

É possivel transferir dados direto de um banco para outro, porém com algumas restrições (que serão resolvidas futuramente, segundo o desenvolvedor). Todos os dados retornados do banco externo são formato text, sendo assim ou a tabela destino tem os campos text ou trate as informações antes de fazer a inserção.

CREATE SCHEMA testepg
AUTHORIZATION postgres;
GRANT ALL ON SCHEMA testepg TO postgres;

CREATE TABLE testepg.tabela
(
campo1 character varying,
campo2 character varying,
campo3 character varying,
campo4 date,
campo5 character varying,
campo6 text
CONSTRAINT tabela_pk PRIMARY KEY (campo1)
)
WITH (OIDS=FALSE);
ALTER TABLE testepg.tabela OWNER TO postgres;

INSERT INTO testepg.tabela
(SELECT campo1:: character varying,
campo1:: character varying,
campo2:: character varying,
campo3:: date,
campo4:: character varying,
campo5:: text
FROM teste.tabela
WHERE campo1 = ‘XXX’);

Bom .. por hoje é só pessoal !!!!!!
PS: vou fazer mais algumas brincadeiras com o DBI-LINK e posto aqui.
PS2: Conversei com o David e vou traduzir o pacote dele !!!

Kenia Milene








Seguir

Get every new post delivered to your Inbox.

Junte-se a 72 outros seguidores