将Oracle RDS表数据下载到本地数据库

时间:2019-02-18 18:15:19

标签: oracle impdp expdp

我有一个Amazon Oracle RDS数据库。我想导出RDS表并将其导入我的本地数据库。更重要的是它包括一个NCLOB列。本地系统是运行Cygwin的Win10。

我运行expdp来捕获数据:

$ expdp xlat@int_rds/*****tables=TEXT_POOL_XLAT file=int_TEXT_POOL_XLAT.expdp

Export: Release 11.2.0.1.0 - Production on Mon Feb 18 11:37:30 2019

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
Legacy Mode Active due to the following parameters:
Legacy Mode Parameter: "file=int_TEXT_POOL_XLAT.expdp" Location: Command Line, Replaced with: "dumpfile=int_TEXT_POOL_XLAT.expdp"
Legacy Mode has set reuse_dumpfiles=true parameter.
Legacy Mode has set nologfile=true parameter.
Starting "XLAT"."SYS_EXPORT_TABLE_01":  xlat/********@int_rds tables=TEXT_POOL_XLAT dumpfile=int_TEXT_POOL_XLAT.expdp reuse_dumpfiles=true nologfile=true
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 51.68 MB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "XLAT"."TEXT_POOL_XLAT"                     32.50 MB  137850 rows
Master table "XLAT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for XLAT.SYS_EXPORT_TABLE_01 is:
  /rdsdbdata/datapump/int_TEXT_POOL_XLAT.expdp
Job "XLAT"."SYS_EXPORT_TABLE_01" successfully completed at Mon Feb 18 17:37:29 2019 elapsed 0 00:00:04

到目前为止,一切都很好。 expdp将文件转储到Or​​acle DATA_PUMP_DIR中,我使用脚本通过sqlplus命令下载数据:

sqlplus -s $DBusername/$DBpassword@$database >/dev/null <<EOF 
set colsep ,
set pagesize 0
set trimspool on
set headsep off
set linesize 8000
set termout off
SET FEEDBACK OFF
spool $filename $append
select * from table (rdsadmin.rds_file_util.read_text_file(p_directory => 'DATA_PUMP_DIR', p_filename  => '$DPfilename'));
quit
EOF

数据已下载。但是当我运行impdp时,我得到:

$ impdp xlat/f0nature1931@local tables=TEXT_POOL_XLAT dumpfile=int_TEXT_POOL_XLAT.expdp directory='DATA_PUMP_DIR'

Import: Release 11.2.0.1.0 - Production on Mon Feb 18 11:58:32 2019

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Personal Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-31619: invalid dump file "C:\app\waynej/admin/orcl/dpdump/int_TEXT_POOL_XLAT.expdp"

我想念什么吗?我认为这不是CR / LF问题,因为脚本下载时没有任何翻译。

谢谢。

1 个答案:

答案 0 :(得分:1)

RDS过程done读取文本文件。 EXPDP DUMP文件不是文本文件,而是 binary 文件。

禁止RDS实例的文件访问。仅通过db_link访问rdsadmin.rds_file_util.read_text_file目录,并使用DATA_PUMP_DIR包。

  1. 在RDS数据库和本地计算机之间的RDS实例上创建数据库链接 甲骨文。
  2. 将转储文件从RDS实例复制到本地Oracle DB使用 DBMS_FILE_TRANSFER通过数据库链接
  3. 将转储文件导入本地数据库 DBMS_FILE_TRANSFER.PUT_FILE

如果您没有机会在本地数据库和RDS Oracle之间建立链接,则可以通过两种其他方式导出数据。

1 您可以使用本地PC上的旧exp实用程序导出数据,该实用程序还会创建导出文件.dmp,但格式不同。该格式与impdp expdp不兼容。 exp imp实用程序可以通过SQL * NET网络作为客户端服务器连接到目标数据库。该实用程序已过时,性能较低。像在运行实用程序expdp时一样,不会在服务器上创建dmp文件。 dmp文件写在运行实用程序exp的一侧(服务器或客户端)

impdp xlat/f0nature1931@local tables=TEXT_POOL_XLAT dumpfile=int_TEXT_POOL_XLAT.expdp directory='DATA_PUMP_DIR'

然后使用imp将数据导入本地Oracle实例。

$ORACLE_HOME/bin/exp parfile=parfile_exp_full FILE=export.dmp LOG=export.log

2

您可以使用sqlplus将数据导出到CSV文件

$ORACLE_HOME/bin/imp parfile=parfile_imp_full FILE=export.dmp LOG=import.log

然后使用实用程序sqlldr或SQL Developer将数据导入到本地Oracle实例。

SQL Developer for importing from Excel