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 / 18058
Accepted
jcho360
jcho360
Asked: 2012-05-18 04:24:07 +0800 CST2012-05-18 04:24:07 +0800 CST 2012-05-18 04:24:07 +0800 CST

Copie a estrutura completa de uma tabela no Oracle sem usar o Backup

  • 772

Quando você cria faz um CTAS (criar tabela como select) de uma tabela você só pega a estrutura, mas perde o índice, PK, FK, etc.

Exemplo:

create table t1 select * from table2;

Como pode ser feita uma cópia da estrutura da tabela que inclua essas coisas sem fazer um backup?

oracle
  • 3 3 respostas
  • 38535 Views

3 respostas

  • Voted
  1. Best Answer
    Philᵀᴹ
    2012-05-18T04:31:36+08:002012-05-18T04:31:36+08:00
    select dbms_metadata.get_ddl('TABLE','SCHEMANAME','TABLENAME') DDL from dual;
    

    TABLEé o tipo de objeto (você também pode extrair INDEX, VIEW, FUNCTION, PROCEDUREetc)

    ou:

    create table t1 as
    ( select * from t2 where 3=4 );
    

    dbms_metadata.get_ddlé o caminho a seguir, pois preserva vários aspectos que uma consulta CTAS não preserva.

    • 3
  2. Leigh Riffel
    2012-05-18T07:05:21+08:002012-05-18T07:05:21+08:00

    A resposta de Phil é boa e provavelmente o que você deseja. O SQL Developer fornece um assistente para essa funcionalidade no menu Ferramentas.

    Dependendo de seus requisitos, você pode querer fazer uma exportação (que usa o pacote dbms_metadata). O Oracle Concepts Guide (leitura obrigatória para quem usa Oracle) tem uma seção sobre Oracle Data Pump Export and Import (ênfase minha).

    O Oracle Data Pump permite a movimentação de dados e metadados em alta velocidade ...

    • 1
  3. Mark Hughs
    2021-02-08T16:29:56+08:002021-02-08T16:29:56+08:00

    Existem basicamente 3 maneiras de copiar a estrutura e os dados para outras tabelas

    1. Crie a tabela myschema.newtable como select * from anotherschema.oldtable onde 1 = 1; /* isso copia todos os dados ou 1 = 2 copia nenhum dado, mas cria a tabela */ isso não funcionará para Oracle 12 e superior se você tiver NVARCHAR (2000) e superior, CLOBS ou BLOBS ou varchar2 estendido habilitado acima de 32.767 como um índice de restrição invisível é criado.
    2. use a metatabela Oracle (selecione dbms_metadata.get_ddl('TABLE','SCHEMANAME','TABLENAME') DDL de dual; Isso funciona, exceto se você tiver chaves primárias, restrições, etc. um banco de dados remoto usando um link de banco de dados. O que acontece é que a definição da tabela está espalhada por várias linhas e você recupera apenas a mais recente. Então, você precisa escrever um código complexo para percorrer a definição se houver várias linhas. É uma verdadeira dor de cabeça Não vale a pena se você estiver trabalhando com Oracle 12.2 ou superior.
    3. Se você estiver trabalhando com Oracle 12.2 ou superior, por exemplo 19c, isso funcionará se a tabela de origem for particionada ou não. Mas, a tabela de origem deve ser local e não remota usando um link de banco de dados. Eu não vi essa técnica documentada para tabelas de origem não particionadas em nenhum lugar. Mas funciona para tabelas de origem particionadas e não particionadas! CRIAR TABELA MYSCHEMA.NEW_TMP PARA EXCHANGE COM TABLE MYSCHEMA.SOURCE_TABLE; Isso espelhará as colunas exatamente para que você possa copiar os dados da fonte para a nova tabela com base em um filtro. Ele não copiará os PK's ou índices. Como observação, a troca de partições é uma das maneiras mais rápidas de carregar dados. É praticamente instantâneo. Vale a pena pesquisar.
    • 0

relate perguntas

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • ORDER BY usando prioridades personalizadas para colunas de texto

  • Interface sqlplus confortável? [fechado]

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

Sidebar

Stats

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

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 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

    Como selecionar a primeira linha de cada grupo?

    • 6 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
    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
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +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