- Este tópico contém 13 respostas, 5 vozes e foi atualizado pela última vez 16 anos, 6 meses atrás por
eversonpiza.
-
AutorPosts
-
15 de setembro de 2009 às 10:02 pm #89692
eversonpiza
ParticipanteOlá amigos,
Boa tarde.Hoje trabalho em uma empresa de desenvolvimento de software com vários clientes, e como não somos os responsáveis diretos pelas bases de dados deles nem sempre conseguimos garantir que a base esta de acordo com a versão do software.
Para conseguir garantir que a base do cliente não tenha nenhuma divergência estou pensando em criar o meu próprio dicionário de dados, que a principio seria algo bem parecido com o do Oracle, até aqui parece ser fácil, mas depois disso criado vou precisar criar mecanismos para confrontar o meu dicionário de dados, que vai estar em um servidor aqui na empresa, com o que esta lá no cliente, mostrando as diferenças existentes.
Além de fazer este trabalho de controle de versão, este dicionário de dados tb seria utilizado pela equipe de desenvolvimento, sempre que quiserem confirmar se tal objeto existe ou não na produção, pois como sabemos base de desenvolvimento é uma ‘zona’, e tb para ver as descrições/comentários dos objetos.
Outro objetivo é a partir deste dicionário criar scripts para a criação de uma nova base de dados do zero, que tb iria conter inserts em tabelas de cadastro.
Alguém tem alguma sugestão ou dica para me dar sobre esse projeto?
Obrigado,
Everson15 de setembro de 2009 às 10:32 pm #89694vieri
ParticipanteExiste um ferramenta chamada ORACLE designer que faz exatamente isso que vc se propoem a construir, leia sobre ela e derrepente lhe tratá mais idéias.
O enterprise manager da Oracle e SQL developer também possui opções de comparar databases.
De resto vc basicamente vc ter que criar view mais simples em cima do catalogo do Oracle e fazer comparações com not in para verificar quais objetos não existem entre essas views…
Não vejo como fugir muito disso, o resto é perfumaria…
[]s
15 de setembro de 2009 às 10:37 pm #89695vieri
Participantepara criar scripts com os objetos basta usar
a dbms_metadata.get_ddl15 de setembro de 2009 às 10:55 pm #89696eversonpiza
ParticipanteOlá Vieri,
Pelo oq entendi vc esta sugerindo que eu mantenha uma base de dados criada aqui com a estrutura correta, e usar o próprio dicionário de dados do Oracle, certo?
Oq estou pensando em fazer é criar meu próprio dicionário de dados, ou seja, na minha base eu não teria criadas as tabelas da aplicação, apenas as minha tabelas de dicionário de dados.
Desta forma eu não conseguiria usar o Oracle Designer nem o dbms_metadata, pois eles iriam buscar informações no dicionário de dados do Oracle, e não a encontrariam lá.
Existe a possibilidade de eu usar o Oracle Designer para fazer essa documentação, mas ai como eu faria para comparar oq tem nele com a base de um cliente, sendo que o repositório estaria local aqui na empresa, e a base do cliente em outro local, de tal forma que eu não conseguiria ao mesmo tempo estar conectado no Designer e na base deles?
Att.
Everson15 de setembro de 2009 às 11:34 pm #89698vieri
ParticipanteRealmente para o designer ou qualquer outra ferramenta de comparação
realizar isso é preciso conectar nos 2 nós da rede.E qual será a vantagem em inventar um novo dicionário de dados,
de qualquer maneira vc não terá como comparar com o do cliente não é verdade ?A sua ideia é simplificar essa comparação para não perder tempo no cliente é isso ?
Vc irá criar um catalogo com os objetos que vc possuem no sistema…
e crair um mecanismo para comparar com o do cliente…
Mas o catalogo na Oracle já é bastante amigável para isso.por exemplo…
na DBA_OBJECTS vc já consegue informações de todos seus objetos no database, do schema da sua aplicação. inclusive se estão inválidos, data de criação.
Não entendo oque seu catalogo irá propiciar de vantagem…
16 de setembro de 2009 às 2:01 am #89702Rodrigo Mesquita
ParticipanteEverson,
Se entendi direito voce esta querendo criar uma estrutura de views na sua base local para acessar e realizar a manutencao no cliente. Como o vieri disse o dicionario de dados do Oracle ja e bem amigavel, acredito que o melhor seria completamentar o dicionario do oracle e nao deixar de usa-lo.
16 de setembro de 2009 às 3:55 pm #89704souza
ParticipanteEverson ,
Tenho exatamente a mesma situação que a tua conforme tu falou
“Hoje trabalho em uma empresa de desenvolvimento de software com vários clientes, e como não somos os responsáveis diretos pelas bases de dados deles nem sempre conseguimos garantir que a base esta de acordo com a versão do software.”
E aqui fazemos da seguinte forma
Temos uma base limpa – cópia do desenvolvimento onde em termos de estrutura está igual e para manter ela igual e sem sujeiras temos apenas uma pessoa que acessa essa base para rodar os scripts. Então quando há uma implantação nós tiramos uma cópia dela e baixamos no cliente. Após a implantação para manter a base “igual” ao nosso modelo enviamos junto com a versão do software um arquivo .sql que é executado no banco do cliente. Esse arquivo SQL é executado pela aplicação automaticamente toda vez que a nova versão do software vai para o cliente.
Espero ter ajudado
Souza
16 de setembro de 2009 às 4:30 pm #89706eversonpiza
ParticipanteOlá amigos,
Eu tinha pensando tb na opção de usar o próprio dicionário de dados do Oracle, e se necessário criar tabelas apenas para complementar alguma informação, na verdade essa foi a única solução viável que tinha encontrado até agora, por isso resolvi pedir a opinião de vocês, para ver se existia alguma outra forma, mas pelo visto essa vai ser a melhor mesmo.
Souza,
Quando vc troca a versão no cliente, além de enviar o .sql para alterar a base, vc possui algum procedimento para verificar se oq tem na base é exatamente oq vc tem no seu modelo?Obrigado,
Everson16 de setembro de 2009 às 4:43 pm #89708Rodrigo Mesquita
ParticipanteEverson,
Aqui na empresa trabalhamos parecido com o que o Sousa falou. Para garantir que a nossa base esteja igual a do cliente, toda vez que ele efetua alguma alteração ele tem a obrigação de nos enviar os scripts para atualizarmos nossa base e não haver problema. Caso ele não envie este script fica sob responsabilidades deles qualquer problema que ocorrer.
16 de setembro de 2009 às 6:10 pm #89709souza
ParticipanteAssim everson,
Não tenho procedimento para verificar o que tem no cliente , porém se ocorre erro na execução do sql é gerado um log e aplicação emite erro dizendo para enviar para nós . E outra coisa que nos ajuda é o seguinte: Cada vez que o cliente baixa uma versão do nosso site o nosso “controle de versões” identifica isso e marca lá que o cliente baixou a versão xyz , então eu tenho a opçao nessa ferramenta de gerar scripts para tal cliente, e esse gerador de script identifica o que o cliente já baixou ou não e gera os script para rodar lá. Se o cliente baixa tudo corretamente não tem erro , porém se não baixa sobra para nós gerarmos os scripts e rodarmos.
Abraço
Souza16 de setembro de 2009 às 9:24 pm #89711David Siqueira
ParticipanteE ai rapaziada, é este assunto é bem complexo mesmo, ainda mais quando se trata de estrutura de organização, que além de ser um trabalho minucioso ainda depende da interação humana, boa fé , etc e tal.
Algumas coisas que já vi as pessoas fazerem em fábricas de softwares, é algo que começa bem antes de designer oracle, e de scripts de check list , para identificar as diferenças, eu vi uma vez uma empresa que usava um controle muito eficiente atráves de ferramentas do tipo SOURCE SAFE, para controle de versãoes de objetos e de sistemas também.
Eles dividiam por release, por região e por cliente. Era algo bem chato e bem grande a estrutura que eles tinham de pastas para controle de versões, porque controlar isso via banco é bem dificil.
As opções apresentadas pelo pessoal aqui Everson são as mais utilizadas mesmo.
Recentemente eu participei de uma implantação do Mastersaf e eles mandavam um programa executavel que verificava as divergências existentes em objetos e mediante os logs mandavam os acertos.
Bem, acho que é isso, espero que tenha contribuido para algo.
Ats.
16 de setembro de 2009 às 9:45 pm #89714eversonpiza
ParticipanteOlá David,
Acho que quanto a como e onde fazer o controle da base já esta definido, pelo que o pessoal falou é melhor criar uma base mesmo e usar como modelo.
Eu tinha pensando tb em deixar tudo em scripts e salvar no SVN (algo tipo o source safe), mas desta forma as consultas pela equipe de desenvolvimento seria mais complicada, pois estariam os campos DDL do banco lá, e tb seria mais complicado para comparar com a base do cliente.
O que eu ainda não sei como fazer é esse executável que vc mencionou que gera um log com as diferenças.
Estou pensando em montar um script que lê o dicionário de dados, e monta um outro script dinamicamente que faria vários selects para comparar item a item o que tiver na base, e rodaria esse segundo script na base do cliente.
Porém o primeiro script que cria o segundo vai ter que ser bem ninja, pois vai ter que armazenar de alguma forma todo o meu dicionário de dados neste script, inclusive as stored procedures, para poder comparar depois.
Você tem alguma idéia/exemplo de como fazer esse executável ou script?
Obrigado,
Everson16 de setembro de 2009 às 10:54 pm #89718eversonpiza
ParticipanteDavid,
Recebi o seu script, ele parece ser bem útil, porém não terei como usa-lo pois ele faz a comparação via db link, oq não é viável no meu caso.
De qquer forma obrigado pela ajuda.
Att.
Everson17 de setembro de 2009 às 5:06 pm #89737eversonpiza
ParticipanteGalera,
Para fazer essa comparação até o momento eu consegui pensar em duas soluções.
- Criar tabelas temporárias na base do cliente, e inserir os dados do meu dicionário de dados para fazer as comparações.
-
Crias algum tipo de estrutura em PL/SQL (varray, record, nested table, etc) onde eu guardaria os dados do meu dicionário e usaria ele para fazer as comparações.
Embora a solução 1 parece ser bem mais simples, eu dependeria de ter as tabelas criadas no cliente, e o meu objetivo (que veio de cima) é criar um script totalmente independente (mas se não for possível, paciência).
Para a solução 2 até o ponto onde vou criar o record e preencher eu sei como fazer, vai ser um script gigante mas funciona, o problema é como transformar esse array em uma ‘tabela’ para fazer selects nele.
Estou quase desistindo da idéia 2 e indo para a 1, oq vcs acham? Existe alguma outra alternativa?
Obrigado,
Everson -
AutorPosts
- Você deve fazer login para responder a este tópico.