【问题标题】:Oracle dump file table data extraction to file (original exp format)oracle dump文件表数据提取到文件(原exp格式)
【发布时间】:2014-07-22 19:22:11
【问题描述】:

我使用原始 exp(不是 expdp)(EXPORT:V10.02.01,Oracle 10g)创建了 Oracle 转储文件。它们仅包含四个表的表数据。

1) 我想将表数据提取到文件(平面/固定宽度、CVS 或其他文本文件)中,而不将它们导入另一个 Oracle DB。 [首选]

2) 或者,我需要一个可以将它们导入普通用户(不是 SYSDBA)的解决方案,以便我可以使用其他工具来提取数据。

我的数据库是 11g,但如果需要,我可以找到 10g 的数据库。我可以使用 TOAD for Oracle Xpert 11.6.1.6。我是一名经验丰富的 Oracle 程序员,但我之前没有使用过 EXP/IMP。

(以下信息已被隐藏以保护数据。)

以下是转储文件的创建方式:

exp FILE=data.dmp \
LOG=data.log \
TABLES=USER1.TABLE1,USER1.TABLE2,USER1.TABLE3,USER1.TABLE4 \
INDEXES=N TRIGGERS=N CONSTRAINTS=N GRANTS=N

这是日志:

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set
Note: grants on tables/views/sequences/roles will not be exported
Note: indexes on tables will not be exported
Note: constraints on tables will not be exported

About to export specified tables via Conventional Path ...
Current user changed to USER1
. . exporting table                      TABLE1        271 rows exported
. . exporting table                      TABLE2     272088 rows exported
. . exporting table                      TABLE3       2770 rows exported
. . exporting table                      TABLE4      21041 rows exported
Export terminated successfully without warnings.

提前谢谢你。

【问题讨论】:

  • 是什么阻止您使用 imp 导入它们?
  • 我有转储文件。我需要数据。但我在数据库中不需要它,这些是我宁愿避免的特权命令。我只想在一个平面文件中的表格数据。也就是说,我正在使用 imp 和服务器来获取数据并将其导出。我把这个问题留了一会儿,看看有没有其他人试过这个。
  • 您说您可以导入它们并以标志文件格式导出它们。是什么阻止您使用imp 这样做?除非您以某种方式将它们放入数据库,否则您将无法将它们放入平面文件中,因为 dmp 文件是二进制、专有的 Oracle 格式。

标签: oracle etl exp imp


【解决方案1】:

更新: TOAD 9.7.2 版将读取由 EXP 生成的“dmp”文件。

从菜单中选择数据库 -> 导出 -> 导出文件浏览器。

您需要为 TOAD 安装 DBA 实用程序。无法真正保证文件已被解析 正确,但数据将显示在架构浏览器中的 TOAD 中。

注意:由 exp 实用程序生成 dmp 文件的唯一其他已知实用程序是 imputility。您不能自己读取转储文件。如果这样做,您将面临解析文件不正确的风险。

如果您已经在 ORACLE 表中有数据:

要将表数据提取到文件中,请创建一个调用 SQL*PLUS 并导致 SQL*PLUS 将表数据假脱机到文件的 shell 脚本。每个表需要一个脚本。

#!/bin/sh
#NOTE: The path to sqlplus will vary on your system,
#      but it is generally $ORACLE_HOME/bin/sqlplus.
#YOU NEED TO UNCOMMENT THESE LINES AND SET APPROPRIATELY.
#export ORACLE_SID=YOUR_SID
#export ORACLE_HOME=PATH_TO_YOUR_ORACLE_HOME
#export PATH=$PATH:$ORACLE_HOME/bin
sqlplus -s user/pwd@db << EOF
set pagesize 0
set linesize 0
set linesize 255
set heading off
set echo off
SPOOL TABLE1_DATA.txt
REM FOR EACH COLUMN IN TABLE1, SET THE FORMAT
COL FIELD_ID   format 999,999,999
COL FIELD_DATA format a99
select FIELD_ID,FIELD_DATA from TABLE1;
SPOOL OFF
EOF

确保设置了每行的行大小并设置了每列的格式。有关数字格式列,请参见上面的 FIELD_ID,对于字符列,请参见 FIELD_DATA。 注意:您需要从文件末尾删除“已选择的 N 行”。

(您仍然可以使用imputility 将您创建的文件导入另一个架构。)

【讨论】:

  • 感谢您的回答,但这不是我需要的。我知道如何从 Oracle 数据库中导出数据。我的数据在 exp(不是 expdp)创建的转储文件中,而不是在 Oracle 中。我想提取数据而不必将其导入 Oracle。
  • 您仍然可以使用上述 SQL 脚本将表格数据保存在文本文件中,然后将数据导入 EXCEL 或其他应用程序。您只能使用转储文件进行导入。您不能使用 imp 以外的任何其他应用程序手动读取转储文件。
  • 这不是我希望的答案,但它是一个答案。答案是“不”。但是,我仍然希望在这些年的 Oracle 开发中,有人已经面临这个问题,并提出了解决方案。
  • 如果您的数据仅在转储文件中,则必须先将其导入数据库。任何可以从外部读取转储文件的人都必须有权访问专有的 ORACLE 代码。让我看看是否有官方的 ORACLE 实用程序可以读取这些文件。但是,我以前从未见过这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多