我试图在 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以获取相同的数据?
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