Martin Klier


Oracle IMPDP: Wildcard hacking

Sometimes you want to use datapump import (impdp) for smart problems. An example is excluding (or including) a subset of objects, like tables. The usual way to do so is the EXCLUDE keyword.
(Footnote: All examples in this post are written for a parameter file, so don’t forget a proper quoting for your shell if you are using them on command line.)

(1) The basic syntax for excluding the table EMPLOYEES_1 from import is:


(2) More sophisticated is the use of an IN() statement for more than one table, let’s ignore EMPLOYEES_1, CARS_1 and TRUCKS_1:


(3) But if you have to leave out a large(r) number of tables, maybe properly described by a pattern, EXCLUDE with IN() allows wildcards. This example prevents us from importing all tables ending with the literal ‘1’ (“one”):


(4) But wildcards can be a curse, too. Especially since the underscore ‘_’ is not an uncommon part of an object’s name. In example 2 above, all tables are ending with ‘_1’. If you now want to distinguish between “ending with 1” and “ending with _1”, you will experience some trouble, the underscore is the SQL wildcard for “one arbitrary character”, so most ‘%1’ patterns will match ‘%_1’ as well, but you want something entirely different. You need to escape the ‘_’ in a way, that impdp accepts the character as a literal.

The IN() of example 3 looks very much like SQL wildcarding, and it is. So my guess was, that escaping would work as described for the SQL like clause, with a user-defined escape character: select …. like ‘%!_1’escape’!’; transferred to impdp syntax:


but impdp heavily complains with

ORA-39001: invalid argument value
ORA-39071: Value for EXCLUDE is badly formed.
ORA-00907: missing right parenthesis
ORA-06512: at "SYS.KUPM$MCP", line 2687

So now it was hard to know what to do. But at some point, some olde bash instincts came through: Let’s escape with a backslash, and vóila:


that’s it! All tables ending with ‘_1’ are excluded from importing.

The last one seems to be buggy somehow, I finally tried this one:


All seems to be well now.

Have fun, and be careful

Oracle: Query/Monitoring autoextend of datafiles
String concat with hierarchical query and sys_connect_by_path(): Avoid ORA-30004

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.