Загрузка данных таблицы Oracle RDS в локальную базу данных - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть база данных Amazon Oracle RDS.Я хотел бы экспортировать таблицу RDS и импортировать ее в мою локальную базу данных.Кикер в том, что он включает в себя столбец NCLOB.Локальная система Win10 работает под управлением Cygwin.

Я запускаю 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 выгружает файл в Oracle 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 голосов
/ 19 февраля 2019

RDS процедура rdsadmin.rds_file_util.read_text_file для чтения ТОЛЬКО текстового файла.Файл EXPDP DUMP не является текстовым файлом, это двоичный файл .

Доступ к файлу для экземпляра RDS запрещен.Получите доступ к каталогу DATA_PUMP_DIR только через db_link и используйте пакет DBMS_FILE_TRANSFER.

  1. Создайте ссылку на базу данных на экземпляре RDS между RDS DB и вашим локальным Oracle.
  2. Скопируйте дампфайлы из экземпляра RDS в локальную базу данных Oracle используют DBMS_FILE_TRANSFER.PUT_FILE через ссылку на базу данных
  3. Импорт файлов дампа в локальную базу данных impdp xlat/f0nature1931@local tables=TEXT_POOL_XLAT dumpfile=int_TEXT_POOL_XLAT.expdp directory='DATA_PUMP_DIR'

Если у вас нет возможности сделатьсвязь между вашей локальной базой данных и RDS Oracle, вы можете экспортировать данные еще двумя способами.

1 Вы можете сделать экспорт данных, используя старую утилиту exp на локальном ПК, этоУтилита также создает файлы экспорта .dmp, но для другого формата.Формат не совместим с impdp expdp.Утилита exp imp может подключаться через сеть SQL * NET к целевой базе данных как клиент-сервер.Эта утилита устарела и имеет меньшую производительность.Файл dmp не создается на сервере, как при запуске утилиты expdp.Файл dmp написан на той стороне, где запущена утилита exp (сервер или клиент)

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

, а затем выполните импорт данных, используя imp в локальный экземпляр Oracle.

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

2

Вы можете экспортировать данные в файл CSV, используя sqlplus

$ORACLE_HOME/bin/sqlplus -s user/pass@rds_amazon  @csv2.sql.

more csv2.sql 

set heading off
set termout OFF
SET FEEDBACK OFF
SET TAB OFF
set pause off
set verify off
SET UNDERLINE OFF
set trimspool on
set echo off
set linesize 1000
set pagesize 0
set wrap off
spool test2.csv
select code||','||name||','||code_rail from alexs.all_station;
spool off
exit;

, а затем выполнить импорт данных в локальный экземпляр Oracle с помощью утилиты sqlldr илиSQL Developer.

SQL Developer для импорта из Excel

...