Oracle Data Pump的正确使用方法——expdp、impdp

问题描述 投票:0回答:1

我试图在 oracle linux 和 windows 10 上获取几行,它们都使用 expdp 和 impdp 运行 Oracle 21c XE 导入和导出,但我遇到了问题。两个数据库配置是相同的。

在 Linux 中,我可以有选择地导出 2 行,在 Windows 中,我无法有选择地导出任何行。 然后我的目标是将 2 行导入回表中。

数据如下:


SQL> select count(*) from account_balance;

  COUNT(*)
----------
         4

SQL> SELECT ROWID, AB.* FROM ACCOUNT_BALANCE AB;

ROWID              KEY_1            CURRENT_BALANCE
------------------ ---------------- ----------------
AAASyQAAMAAAAHrAAA 0000500521000111 12000
AAASyQAAMAAAAHrAAB 0000500521000112 56000
AAASyQAAMAAAAHrAAD 0000500521000114 36700
AAASyQAAMAAAAHsAAA 0000500521000113 679000

SQL> DELETE FROM ACCOUNT_BALANCE WHERE KEY_1 = '0000500521000111';

1 row deleted.

SQL> DELETE FROM ACCOUNT_BALANCE WHERE KEY_1 = '0000500521000113';

1 row deleted.

SQL> select count(*) from account_balance;

  COUNT(*)
----------
         2

SQL> SELECT ROWID, AB.* FROM ACCOUNT_BALANCE AB;

ROWID              KEY_1            CURRENT_BALANCE
------------------ ---------------- ----------------
AAASyQAAMAAAAHrAAB 0000500521000112 56000
AAASyQAAMAAAAHrAAD 0000500521000114 36700

SQL> desc account_balance;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 KEY_1                                     NOT NULL CHAR(16)
 CURRENT_BALANCE                                    CHAR(16)

SQL> SELECT table_name, owner FROM all_tables WHERE table_name='ACCOUNT_BALANCE' ORDER BY owner, table_name;

TABLE_NAME           OWNER
-------------------- --------------------
ACCOUNT_BALANCE      L3DBA


导出使用的查询(Oracle-Linux):

expdp L3DBA@VIRTUAL_PDB1 tables=account_balance directory=DATA_PUMP_DIR QUERY=\"WHERE KEY_1=\'0000500521000113\'\" dumpfile=acct_bal_0000500521000113_bkp.dmp logfile=acct_bal_0000500521000113_bkp.log;
expdp L3DBA@VIRTUAL_PDB1 tables=account_balance directory=DATA_PUMP_DIR QUERY=\"WHERE KEY_1=\'0000500521000111\'\" dumpfile=acct_bal_0000500521000111_bkp.dmp logfile=acct_bal_0000500521000111_bkp.log;

导出使用的查询(Windows-10):

expdp L3DBA@DESKTOP_XEPDB1 tables=account_balance directory=DATA_PUMP_DIR QUERY=\"WHERE KEY_1=\'0000500261000112\'\" dumpfile=acct_bal_bkp20230504_3.dmp logfile=acct_bal_bkp20230504_3.log;
LRM-00111: no closing quote for value ''000050026'

使用导入查询(Oracle-Linux):

impdp L3DBA@VIRTUAL_PDB1 tables=account_balance directory=DATA_PUMP_DIR dumpfile=acct_bal_0000500521000113_bkp.dmp logfile=acct_bal_0000500521000113_imp.log CONTENT=DATA_ONLY TABLE_EXISTS_ACTION=APPEND EXCLUDE=INDEX,CONSTRAINT;
impdp L3DBA@VIRTUAL_PDB1 tables=account_balance directory=DATA_PUMP_DIR dumpfile=acct_bal_0000500521000111_bkp.dmp logfile=acct_bal_0000500521000111_imp.log CONTENT=DATA_ONLY TABLE_EXISTS_ACTION=APPEND EXCLUDE=INDEX,CONSTRAINT;

我注意到,当我在导入选择行时连接到数据库时,导入已暂停。当我尝试导入完整表(同一个表)时,情况并非如此。 这可能是什么原因造成的?

另外,如何在Windows系统上正确执行expdp和impdp以获取相同的数据?

oracle impdp oracle21c expdp
1个回答
0
投票

Windows 尤其对命令行上的引号等非常挑剔。对我来说,我只是将东西放入 PARFILE 中以使生活更轻松

par.dat
=======
tables=account_balance 
directory=DATA_PUMP_DIR 
QUERY="WHERE KEY_1='0000500261000112'" 
dumpfile=acct_bal_bkp20230504_3.dmp 
logfile=acct_bal_bkp20230504_3.log;

expdp user/pass parfile=par.dat
© www.soinside.com 2019 - 2024. All rights reserved.