我收到了.dmp
一个企业数据库的文件,但目前只能访问免费版本的 Oracle。我最终想将数据导入 PostgreSQL。但目前我想知道是否有办法在需要时以块的形式恢复最大的表(10.91G),所以我可以将其内容导出到 csvs 以导入 PostgreSQL。目前,如果我尝试有选择地恢复 10.91GB 表
impdp system/pw tables=TEST.BIG_TABLE directory=test_data dumpfile=test_data.dmp log=log.log;
我明白了
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
到目前为止,我能够创建的最大表空间是 of SIZE 10500M
,命令:
CREATE TABLESPACE test DATAFILE 'test.dbf' SIZE 10600M ONLINE;
产生错误ORA-12953: The request exceeds the maximum allowed database size of 11 GB
结果select tablespace_name, sum(bytes) from dba_data_files group by tablespace_name
是:
tablespace | sum(bytes)/1000000
-----------+-------------------
SYSAUX | 692.06016
UNDOTBS1 | 398.45888
USERS | 104.8576
SYSTEM | 524.288
TEST | 11010.048
一张桌子占用的空间和它需要的空间可能不同。
我建议使用 impdp 和 sqlfile 选项将创建表脚本放入文件中。编辑它以尝试最大限度地利用空间(将 pctfree 设置为 0)。删除任何主键或唯一约束,因为任何索引都会占用您的可用存储空间。
INITIAL 将是最初分配的空间量。从 sqlfile 输出中的任何内容开始,然后将值向下微调,直到 create 语句成功。然后将 impdp 与 TABLE_EXISTS_ACTION=TRUNCATE 一起使用,以便将数据插入到已创建的表中。
交叉你的手指,有足够的空间。如果没有,您可以将 WHERE 子句作为 impdp 的一部分应用,并将数据分成两部分。
这个很重要
也许如果您尝试在 impdp 中使用“查询”,您可以导入更少的数据......
例子: