Recebi um .dmp
arquivo de um banco de dados corporativo, mas atualmente só tenho acesso a uma versão gratuita do Oracle. Em última análise, gostaria de importar os dados para o PostgreSQL. Mas atualmente estou me perguntando se há uma maneira de restaurar a maior tabela (10,91 G) em partes, se necessário, para que eu possa exportar seu conteúdo para csvs para importar para o PostgreSQL. Atualmente, se eu tentar restaurar seletivamente a tabela de 10,91 GB com
impdp system/pw tables=TEST.BIG_TABLE directory=test_data dumpfile=test_data.dmp log=log.log;
eu recebo
Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
ORA-39002: invalid operation
ORA-31694: master table "SYSTEM"."SYS_IMPORT_TABLE_01" failed to load/unload
ORA-02354: error in exporting/importing data
ORA-39776: fatal Direct Path API error loading table "SYSTEM"."SYS_IMPORT_TABLE_
01"
ORA-12953: The request exceeds the maximum allowed database size of 11 GB
O maior Tablespace que consegui criar até agora foi do SIZE 10500M
, o comando:
CREATE TABLESPACE test DATAFILE 'test.dbf' SIZE 10600M ONLINE;
produziu erroORA-12953: The request exceeds the maximum allowed database size of 11 GB
Os resultados de select tablespace_name, sum(bytes) from dba_data_files group by tablespace_name
são:
tablespace | sum(bytes)/1000000
-----------+-------------------
SYSAUX | 692.06016
UNDOTBS1 | 398.45888
USERS | 104.8576
SYSTEM | 524.288
TEST | 11010.048
O espaço que uma mesa ocupa e o espaço necessário podem diferir.
Eu recomendo usar impdp com a opção sqlfile para colocar o script create table em um arquivo. Edite isso para tentar maximizar o uso do espaço (defina pctfree como 0). Remova qualquer chave primária ou restrição exclusiva, pois qualquer índice consumirá seu armazenamento disponível.
O INICIAL será a quantidade de espaço inicialmente alocado. Comece com o que estiver na saída sqlfile e desloque o valor para baixo até que a instrução create seja bem-sucedida. Em seguida, use impdp com TABLE_EXISTS_ACTION=TRUNCATE para inserir os dados na tabela já criada.
Cruze os dedos para que haja espaço suficiente. Caso contrário, você pode aplicar uma cláusula WHERE como parte do impdp e dividir os dados em dois.
Isso é importante
Talvez se você tentar usar "consulta" no impdp, poderá importar menos dados ...
exemplo: