AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 49829
Accepted
Tulains Córdova
Tulains Córdova
Asked: 2013-09-14 04:45:33 +0800 CST2013-09-14 04:45:33 +0800 CST 2013-09-14 04:45:33 +0800 CST

Importe dados do esquema Oracle sem perder as modificações dos procedimentos armazenados

  • 772

Eu tenho este cenário:

  1. Um enorme (milhares de tabelas), complexo banco de dados de produção Oracle 8,
  2. Um enorme (milhares de tabelas), complexo, banco de dados de desenvolvimento Oracle 9, (mesma estrutura de produção)
  3. No banco de dados de desenvolvimento, alguns stored procedures e packages foram modificados e novos foram adicionados.
  4. O banco de dados de desenvolvimento tem novas tabelas em alguns esquemas
  5. Nem o Oracle 8 expnem o Oracle 9 imptêm a opção ROWS ONLY

Geralmente fazemos o seguinte porque é a única maneira de obter dados atualizados corretamente porque uma importação com ignore=yesapenas inseriria novos dados, mas não atualizaria linhas pré-existentes com o mesmo PK, mas valores diferentes em colunas não PK:

  1. Exclua um esquema e crie o usuário novamente para ter um esquema vazio
  2. Importar de usuário para usuário para o esquema vazio

O problema é:

  1. Como atualizar o banco de dados de desenvolvimento com dados novos de uma exportação de produção sem precisar excluir o esquema primeiro, pois há novos procedimentos/pacotes armazenados, bem como modificados no banco de dados de desenvolvimento?
  2. O processo de comparação para recriar apenas procedimentos armazenados modificados ou novos após a exclusão do esquema, para recuperá-los de um backup, seria muito propenso a erros.
  3. Existem milhares (literalmente) de tabelas, então não queremos programar um procedimento armazenado para atualizar os dados em determinada ordem, etc. Isso levaria meses para escrever e testar.

O que seria uma solução baseada em importação para isso?

EDIT: não mencionei que prod é Solaris e dev é RedHat.

schema oracle-9i
  • 2 2 respostas
  • 4738 Views

2 respostas

  • Voted
  1. miracle173
    2013-09-14T09:42:17+08:002013-09-14T09:42:17+08:00

    Vejo duas soluções. Não os testei, mas espero que sejam úteis.

    Em contraste com a exportação do modo de tabela, tanto a exportação do modo de usuário quanto a do modo de tablespace cuidam das dependências entre as tabelas para que as tabelas sejam importadas na ordem correta. Ambos os métodos importam as estruturas da tabela de produção para dev. A exportação/importação no modo Tablespace no Oracle 8i ou 9i pode ser feita apenas entre sistemas de banco de dados no mesmo sistema operacional. O On pode lidar com essa restrição importando os dados usando a importação do modo de usuário para um esquema ou banco de dados intermediário no mesmo sistema operacional do sistema de destino.

    Método 1: Usando TablespaceMode export/import :
    1) Coloque o(s) tablespace(s) de prod em modo somente leitura
    2) TablespaceMode-Exporte o(s) tablespace(s) e copie o arquivo de dados de prod
    3) Coloque os tablespaces de prod em modo de leitura/gravação novamente
    4) Solte os Tablespaces no dev (deixa os procedimentos, visualizações do dev)
    5) TablespaceMode-Importe os tablespaces no Target (inclui tabelas, gatilhos, índices, restrições de prod)
    6) Coloque o(s) tablespace(s) do dev em read/ modo de gravação

    Talvez haja alguns problemas que você tenha que copiar com alterações na estrutura da tabela, concessões ausentes ou que as sequências precisem ser ajustadas

    Método 2: substitua os procedimentos por uma exportação
    1) UserMod-Export do esquema prod
    2) UserMod-Export do esquema dev
    CONSTRAINTS=N
    GRANTS=N
    STATITICS=N
    TRIGGERS=N
    ROWS=N
    3) elimine o esquema dev
    4) importe o esquema prod (para dev)
    5) importe o esquema dev ( para desenvolvedor)
    IGNORE=Y
    CONSTRAINTS=N*
    GRANTS=N*
    INDEXES=N
    ROWS=N*

    a segunda importação deve substituir os objetos prod (procedimentos, visualizações) pelos objetos dev, mas deixar as tabelas e objetos relacionados a tabelas. Parâmetros com * já são definidos durante a exportação. Talvez não se deva defini-los durante a importação. Se você definir IGNORE=N, receberá muitas mensagens de erro, mas talvez haja algumas outras vantagens. Acontecerá que você importa tabelas de dev que não estão em prod. As alterações na estrutura da tabela devem ser tratadas anualmente.

    Eu preferiria um método que extraia os procedimentos do esquema dev antes de ser substituído pelo esquema prod. Ferramentas como o Toad da Quest (como mencionado por @rm em um comentário) que podem comparar esquemas e criar scripts para implementar as diferenças podem ajudar.

    1) UserMode-Export de prod
    2) Extraia os procedimentos de dev para sql-scripts
    3) elimine o esquema dev
    4) UserMode-Import para dev
    5) elimine procedimentos em dev
    6) execute os scripts criados pelo processo de extração
    7) compile tudo procedimentos

    O método a seguir sai das estruturas dev e importa apenas os dados da produção. Você receberá erros durante a importação de dados se a coluna de uma tabela tiver sido renomeada ou removida em dev. Adicionar colunas com restrições em tabelas dev ou alterar restrições em dev também pode fazer com que a importação de dados dessas tabelas falhe. Se algumas tabelas não forem importadas por causa desses erros, tabelas dependentes que não foram alteradas no dev também podem ter problemas quando os dados são importados. Portanto, muitos problemas complicados podem surgir. A ideia básica é:

    *) remover os dados das tabelas dev
    *) desabilitar restrições, gatilhos e índices nas tabelas dev
    *) importar os dados apenas das tabelas de produção para as tabelas dev
    *) habilitar restrições, gatilhos e índices nas tabelas dev
    *) importe os dados para as novas tabelas de desenvolvimento e habilite suas restrições, gatilhos e índices

    1) o modo de usuário exporta o esquema dev sem gatilhos
    ROWS=NO
    TRIGGERS=NO
    FILE=dev1.dmp
    2) o modo de usuário exporta o esquema dev novamente
    ROWS=NO
    TRIGGERS=NO
    FILE=dev1.dmp
    3) o modo de tabela exporta as tabelas dev não encontradas no prod
    TABLES=list_of_tables_in_right_order
    TRIGGERS=Y
    CONSTRAINTS=Y
    INDEXES=YES
    GRANTS=Y
    ROWS=Y
    STATISTICS=NO
    dev3.dmp
    4) descarta o esquema no dev
    5) cria o esquema vazio no dev novamente
    6) importa o esquema dev vazio sem gatilhos, restrições e índices
    ROWS=NO
    CONSTRAINTS=N
    INDEXES=NO
    FILE=dev1.dmp
    7) importar os índices em um script
    INDEXES=YES
    ÌNDEXFILE=index.sql
    FILE=dev1.dmp
    8) modo de usuário exportar o esquema prod TRIGGERS=NO INDEXES=NO FILE=prod1.dmp TABLES=* 10) criar os índices usando index.sql com sqlplus 11) importar restrições e gatilhos da tabela 12) importar as tabelas dev necessárias
    CONSTRAINTS=NO
    GRANTS=NO
    9) table import the prod table data

    IGNORE=Y
    CONSTRAINTS=N
    INDEXES=N
    GRANTS=N
    FILE=prod1.dmp


    TABLES=*
    CONSTRAINT=Y
    TRIGGERS=Y
    ROWS=N
    FILE=dev2.dmp

    TABLES=list_of_tables_in_right_order
    IGNORE=Y
    CONSTRAINT=Y
    GRANTS=Y
    INDEXES=Y

    • 2
  2. Best Answer
    Tulains Córdova
    2014-08-06T09:03:59+08:002014-08-06T09:03:59+08:00

    O que finalmente resolveu meu problema foi:

    • desativando o modo de arquivo
    • proibindo conexões
    • desabilitando gatilhos e restrições
    • truncando todas as tabelas
    • realizando importações (tentativa de criar objetos existentes falha, mas os dados são inseridos)
    • reativando gatilhos e restrições
    • ativando o modo de arquivamento novamente
    • permitindo conexões de volta
    • 1

relate perguntas

  • Quais são as possíveis considerações e desvantagens de armazenar dados de imagens binárias diretamente em uma tabela?

  • PostgreSQL: Tabelas separadas versus tabela única para preservar o espaço em disco?

  • PostgreSQL: data de criação de uma tabela

  • Existe alguma ferramenta boa para fazer Design de Banco de Dados e Protótipos? [fechado]

  • Quão errado está meu esquema de modelagem de aplicativo da web?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve