Existe uma maneira conveniente de importar um esquema para o Oracle 11gR2 usando um único espaço de tabela novo ou diferente do local de origem dos dados?
Como exemplo, eu exportei BLOG_DATA do OLDDB, onde todos os dados do usuário são armazenados no espaço de tabela USERS.
No NEWDB, gostaria de importar o esquema BLOG_DATA, mas armazene os objetos de usuário no espaço de tabela BLOG_DATA, criado especificamente para esse usuário.
Criei o usuário BLOG_DATA, criei o espaço de tabela BLOG_DATA e o configurei como o espaço de tabela padrão para esse usuário e adicionei uma cota ilimitada apropriada.
CREATE TABLESPACE blog_data DATAFILE SIZE 1G;
CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data;
GRANT connect,resource TO blog_data
O esquema foi exportado do OLDDB com algo como
exp blog_data/secretpassword@OLDDB file=blog_data.dmp
Depois de ler a excelente resposta de Phil abaixo, me perguntei :
Como os dados não têm outro lugar para ir além do espaço de tabela padrão - o único espaço de tabela no qual o usuário possui uma cota - isso efetivamente força o imp a colocar todos os objetos de usuário nesse espaço de tabela padrão?
imp blog_data/secretpassword@NEWDB file=blog_data.dmp
Isso colocaria todo o esquema blog_data no espaço de tabela blog_data no NEWDB? Existe alguma razão para que isso não funcione ou que eu tenha problemas com certos objetos, etc.?
atualizar:
Fiz um teste rápido e achei que era esse o caso. Imp
coloca objetos no espaço de tabela padrão para esse usuário, desde que não possa colocá-lo no espaço de tabela original (por exemplo, o espaço de tabela não existe). Explicação completa: http://www.dolicapax.org/?p=57
Ainda assim, suponho que o uso do Data Pump como Phil sugere possa ser a opção preferida.
exp
utilitário herdado ou comexpdp
(bomba de dados)?Respostas:
Na verdade, não é possível especificar um espaço de tabela diferente ao importar usando o
imp
utilitário oracle . No entanto, como solução alternativa, você pode pré-criar as tabelas fazendo umaROWS=N
importação noUSERS
espaço de tabela e, em seguida,alter table mytable move tablespace BLOG_DATA;
para cada tabela movê-las para o novo espaço de tabela, faça a importação novamente com oIGNORE=Y
parâmetro para ignorar os erros de criação de tabela e importar todos dos dados.Se os dados foram exportados usando o Data Pump (
expdp
), (como um todo, todo mundo deveria usá-lo hoje em dia, em vez do antigo legadoexp
/imp
utilitários), você pode importar facilmente para outro espaço de tabela usando oREMAP_TABLESPACE
parâmetropor exemplo:
fonte
Você deve seguir as etapas abaixo mencionadas: -
imp system/manager file=export.dmp indexfile=newfile.sql
Isso importará os dados e salvará todas as definições em
newfile.sql
.newfile.sql
depois de alterar os espaços de tabela.fonte